Como desabilitar o Garbage Collector?!

Fiquei sabendo por amigos e também li aqui na seção de Tutoriais do GUJ que existem a possibilidade de desabilitar o Garbage Collector explicitamente no código.

Preciso fazer isso pois tenho um programa que precisa medir tempos de execução de outros programas (curiosidade: em Pascal) para saber não estão otimizados.

Aguardo a resposta!

Abração!

Desabilitar o GC?
Nunca vi nada parecido, e até onde sei isso não é possível.*

Use os parâmetros de inicialização para melhorar a performance:
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp

    • A não ser que você recompile a JVM tirando o GC.

Pois eh cara, vi um comentário sobre desabilitar o GC no último parágrafo deste link:

http://www.guj.com.br/java.tutorial.artigo.28.1.guj

Vou dar uma olhadinha melhor no link que você me passou! vlw!

Era possível desligar o GC até a versão 1.2 com a opcao -noasyncgc. Hoje em dia não há mais como…

Na verdade há uma maneira de “desligar” o GC que eu já utilizei com sucesso mas que dá bastante trabalho e apenas uma boa justificativa justica tal esforço: simplesmente não deixe nenhuma referencia sair de escopo. Cacheie tudo e faça um pool de objetos para tudo.

Pelo que entendi a sugestão é utilizar a técnica do Sérgio de nunca perder a referência para o Objeto, assim o GC nunca terá o que recolher.
Nunca vi um cenário desses, ou a necessidade de um, mas me cheira mal.

Tbm nunca vi um cenario destes… e realmente não consigo imaginar o pq disto… a onde isto seria utilizavel… agora fiquei curioso…

  1. Para fazer medições de desempenho, normalmente você faz uma série de repetições dessa medição, e descarta os resultados mais lentos e mais rápidos. É como as notas de uma competição de ginástica olímpica.

  2. Use alguma linguagem de script (como Python) se seu intuito é fazer medições simples de programas escritos em outra linguagem. Você pode desabilitar o garbage collector do Python e usar apenas “reference counting” caso desejado. http://docs.python.org/lib/module-gc.html

  3. O que pode ser desabilitado em Java não é o garbage collector e sim o fato de System.gc provocar uma “garbage collection” requerida pelo usuário. Isso pode ser desabilitado (é uma “policy” em alguns web e application containers), para evitar que uma aplicação qualquer fique chamando explicitamente System.gc e “fritar” as outras aplicações.

[quote=luistiagos][quote]
Pelo que entendi a sugestão é utilizar a técnica do Sérgio de nunca perder a referência para o Objeto, assim o GC nunca terá o que recolher.
Nunca vi um cenário desses, ou a necessidade de um, mas me cheira mal.
[/quote]

Tbm nunca vi um cenario destes… e realmente não consigo imaginar o pq disto… a onde isto seria utilizavel… agora fiquei curioso… [/quote]

O GC é preemptivo, ou seja, ele precisa “parar o mundo todo” por alguns milisegundos para fazer o cleanup, mesmo em máquinas com mais de um processador.

Bancos de investimento e bolsas de valores são os principais interessados em “desligar” o GC, pois nesse business cada milegundo vale muito dinheiro. Mais sobre isso aqui:

http://www.onjava.com/pub/a/onjava/2006/05/10/real-time-java-introduction.html

Acho que poderia ficar mais viável desabilitar o Garbage Collector se no Java tivéssemos mecanismos para desalocarmos nossos Objetos do Heap de forma explícita e programática (algo parecido com destrutores…), ainda que isso pudesse levar a outros problemas.

Inté.