Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

281
Visualizações
Error de memoria de montón en Java

Estoy jugando un poco con Java, pero tengo mucha experiencia en otros idiomas. Tengo un problema de prueba para el que conozco la solución (y puedo producirlo fácilmente en Python y C++). Pero ejecutar el siguiente código Java da una

Excepción en el subproceso "principal" java.lang.OutOfMemoryError: espacio de almacenamiento dinámico de Java

Me pregunto si estoy cometiendo un simple error, no esperaría que la huella de memoria de este programa fuera muy grande:

 public static void main(String[] args) { ArrayList<Integer> longest_sequence = new ArrayList<>(); ArrayList<Integer> this_sequence; int n = 0; for (int i = 1; i < 1000000; i++) { this_sequence = new ArrayList<Integer>(); n = i; this_sequence.add(n); while (n != 1) { if (n % 2 == 0) { n = n / 2; } else { n = 3*n + 1; } this_sequence.add(n); } if (this_sequence.size() > longest_sequence.size()) { longest_sequence = this_sequence; } } System.out.println(longest_sequence.get(0)); System.out.println(longest_sequence.size()); }

Para aclarar un poco más:

Se crea una nueva lista en cada iteración del programa. Se conserva asignándole la secuencia más larga o se descarta y se sobrescribe con una nueva instancia de lista.

¿Supongo que mis suposiciones sobre eso son incorrectas y las instancias se están preservando? El tamaño de las listas no debería ser un problema (alrededor de 500 elementos para la más grande).

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Fallará incluso si aumenta su espacio de almacenamiento dinámico.

Para n = 113383, una operación lo hace pasar por el límite de enteros y n se vuelve negativo y esto termina en un bucle infinito.

Funciona si cambia Integer por Long.

over 4 years ago · Santiago Trujillo Relatório

0

Creo que lo más fácil de evitar esto es agregar memoria usando el indicador -Xmx

https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html aquí hay documentos oficiales para leer más al respecto

over 4 years ago · Santiago Trujillo Relatório

0

para cambiar la VM para Eclipse, puede cambiar la cantidad de MV desde Windows> Preferencias> Java> JRE instalados desde allí, seleccione el JRE y haga clic en editar, luego escriba los Argumentos de VM predeterminados: a -Xmx1024M o cualquier otra cantidad de memoria. ..

Bueno, se explica por sí mismo: te has quedado sin memoria.

Es posible que desee intentar iniciarlo con más memoria, utilizando el indicador -Xmx, por ejemplo

java -Xmx2048m [lo que haya escrito antes] Esto usará hasta 2 gigas de memoria.

Consulte la lista de opciones no estándar para obtener más detalles.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda