O que acontece se acabar a memória do java? Como forçar isso?
memória do java
7 Respostas
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 ??
huhahuahauhau
não não adriano_si
primeiramente obrigado ae
é só pra saber msm
é q tou lendo uma apostila e me deparei com isso
Se vc quer forçar.
Tente isso.
List<Double> list = new Arraylist<Double>();
for(long i=0; i<50000000; i++){
list.add(99999.9999);
}
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.
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.
Ualaaaa… Valew a aula… Como eu sempre digo, é quebrando a cara que se aprende… hehehe 8)
Um OutOfMemoryError legal:
public class OutOfMemory {
public static void main(String[] args) {
int[] i = new int[Integer.MAX_VALUE];
}
}