Olá pessoal…gostaria de um help de vcs; é o seguinte : Estou fazendo um programa de otimização na universidade e preciso usar nele muita alocação e desalocação de objetos. Eu tenho usado o System.gc() mas como ele é um tread de baixa prioridade e assincrono estou tendo problemas de falta de memoria e olha que a minha máquina tem 512M :!:
Preciso saber urgentemente se há como obrigar o Java a recolher memoria alocada imediatamente.
Valeu e agradeço desde já por qualquer ajuda.
cara, infelizmente naum é possível, pois quando vc executa a linha System.gc(); vc apenas dá um alerta para a jvm, mas naum garante que uma thread de maior prioridade seja executado.
dica: tente atribuir null as suas variáveis, objetos após a utilização, pois isso garante a liberação dos objetos com maior antecedência.
o renan está correto, mas tem mais uma coisa: não importa se a tua máquina possui 512MB pois a configuração default da JVM ocupa no máximo 128MB, ou seja se vc quiser ocupar efetivamente teus 512MB tens que passar como argumento na execução do teu programa do seguinte modo:
java -Xms256M -Xmx512M
terminei ontem um artigo exatamente sobre isso … algumas “ajudas” que podemos dar ao garbage collector … vou passar pro pessoal do pj pra eles publicarem ! depois deem uma lida lá … fui
legal…
mas viu newton
nao adiantaria obrigar a maquina virtual a chamar o garbage collector
quando ela esta prestes a ficar sem memoria ela ja tentou isso faz tempo
entao o problema deve ser outro
[]'s