memória do java

7 respostas
0

O que acontece se acabar a memória do java? Como forçar isso?

7 Respostas

adriano_si

Você quer saber sobre o Heap ?? É meio difícil fazer isso viu… de repente um Loop infinito do tipo

while(true){ Objeto o = new Objeto(); // esse Objeto é o nome de sua classe }

Não sei se cola, desculpem-me se falei besteira…

Mas pra que cargas d’água vc quer fazer isso ??? alguma experiência maligna ??

0

huhahuahauhau

não não adriano_si

primeiramente obrigado ae

é só pra saber msm

é q tou lendo uma apostila e me deparei com isso

leo_mf

Se vc quer forçar.

Tente isso.

List<Double> list = new Arraylist<Double>();

for(long i=0; i<50000000; i++){

list.add(99999.9999);

}
ViniGodoy

Se a memória acabar, o new irá lançar um OutOfMemoryError. Isso geralmente mata a thread que ficou sem memória. É uma boa a sua thread de log capturar esse error (através do UncaughtExceptionHandler) e loga-lo e matar a sua aplicação de vez.

Não há muito o que se possa fazer numa aplicação que ficou sem memória. O erro pode acontecer em qualquer lugar, a qualquer momento.

ViniGodoy

adriano_si:
Você quer saber sobre o Heap ?? É meio difícil fazer isso viu… de repente um Loop infinito do tipo

while(true){ Objeto o = new Objeto(); // esse Objeto é o nome de sua classe }

Não sei se cola, desculpem-me se falei besteira…

Desse jeito não cola. Funcionaria se fosse no C++, mas no Java, o objeto o sairá de escopo a cada iteração do loop, e ficará passível de garbage collection.
O java ainda tem uma otimização para loops desse tipo.

Como ele percebe que o refere-se ao mesmo tipo de objeto, ele nem sequer realoca nova memória, e fica só reutilizando aquele espaço destinado no primeiro new. Essa é uma forma de fazer um garbage collection instantâneo e gratuito - já que, no fundo, não coleta nada, seguido de uma alocação instantânea e gratuita - que já estava feita, ele só roda o código de construção novamente para inicializar aquele espaço.

adriano_si

Ualaaaa… Valew a aula… Como eu sempre digo, é quebrando a cara que se aprende… hehehe 8)

O

Um OutOfMemoryError legal:

public class OutOfMemory {

   public static void main(String[] args) {
      int[] i = new int[Integer.MAX_VALUE];
   }
}
Criado 22 de outubro de 2008
Ultima resposta 22 de out. de 2008
Respostas 7
Participantes 5