Bom dia!
Estou em um desafio do livro da caelum que pergunta o seguinte:
O que acontece se acabar a memória da java virtual machine? Como forçar isso?
Eu pesquisei no fórum e só consegui resultados para desalocar a minha intenção aqui seria o contrário, alguém pode me passar algum código que faça isso (se possível que gaste até a memória virtual aquela que usa do hd quando acaba a ram) e explicar que danos isso pode causar?
[quote=Onimatsu]Bom dia!
Estou em um desafio do livro da caelum que pergunta o seguinte:
O que acontece se acabar a memória da java virtual machine? Como forçar isso?[/quote]
A JVM finaliza. Uma maneira fácil de forçar isso é usar uma recursão infinita gerando um StackOverflowError.
Quem controla a memória virtual é o SO, não a JVM. Para conseguir um erro dessas proporções vc teria que fazer algo realmente errado em alguma linguagem que você tenha controle maior sobre o SO e a máquina, como C ou C++. Se vc quer lotar um HD não precisa tentar gastar memória virtual. Basta vc criar um loop infinito que cria arquivos em alçgum diretório da máquina. Pode demorar, mas uma hora o HD vai ficar lotado
É bom lembrar que a VM tem uma quantidade de memória máxima que ela aloca, e ela é bem diferente do máximo possível do SO. Por padrão, a VM aloca no máximo 64mb de RAM. Você pode alterar a configuração com o parâmetro -XMX, na hora de executar seu aplicativo.
Como vc pode ver, mesmo um aplicativo nativo muito determinado, não conseguirá acabar com toda RAM e toda memória virtual do HD de alguém, a menos que esteja abaixo desses limites. E por isso também que, se você quer acabar mesmo com a memória de alguém, você deve fazer um processo que dispare subprocessos. Como o clássico programa em C:
Por que o limite máximo da pilha é atingido antes do limite máximo da memória. O java usa para o stack (aprox. 512KB) uma quantia bem menor do que para o heap (64MB).
Pessoal obrigado pelas respostas na verdade isso foi mais por curiosidade para saber o que acontece quando fica sobrecarregado mas cada computador e sistema operacional têm suas limitações. Talvez vocês possam me passar uma idéia básica para me ajudar em um programa que estou tentando fazer: http://www.guj.com.br/java/230913-enviar-arquivos-a-diretorios-e-remove-los#1186404