Como aumentar o tamanho da memória VM para um teste JUnit no Eclipse?

WebViewer:

Eu estou tentando executar um teste simples JUnit que inclui o seguinte código:

    @Test
    public void testVeryLongString() {
            String s = "0123456789";
            String repeated = new String(new char[214748364]).replace("\0", s);
            assertEquals(2147483640, repeated .length());
   }

Ele falha nas linhas acima com "o tamanho da matriz solicitada excede o limite VM".

Tentei aumentar a configuração Run deste teste para -Xmx18292m (em uma estação de trabalho 64GB Windows), mas ainda estou recebendo o temido "tamanho da matriz pedida excede limite VM".

o que estou perdendo?

Existe uma maneira de deixar o teste prosseguir sem falhar neste limite VM?

howlger:

O tamanho da matriz pedida excede limite VM significa que uma maior variedade do queInteger.MAX_VALUEé tentada a ser alocado. Como Java 9String eStringBuilder(o que é utilizado paraString.replace(...)) utilizar internamente cada uma matriz de bytes duas vezes o tamanho do comprimento da cadeia , em vez de umacharmatriz com o mesmo comprimento.

Com Java 8 e memória suficiente (muito mais do que -Xmx18292mcomo matrizes adicionais são necessárias para fazer String.replace(...)) para evitar um OutOfMemoryError, ele deve funcionar .

Para um melhor desempenho e requisitos de memória menos, utilize o seguinte código:

@Test
public void testVeryLongString() {
    String s = "0123456789";
    char[] chars = new char[214_748_364 * s.length()]; // Java 9+: 107_374_182
    for (int i = 0; i < chars.length; i += s.length()) {
        for (int j = 0; j < s.length(); j++) {
            chars[i+j] = s.charAt(j);
        }
    }
    String repeated = new String(chars);
    assertEquals(2_147_483_640, repeated.length()); // Java 9+: 1_073_741_820
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=335235&siteId=1
Recomendado
Clasificación