Pessoal como faço para implementar um determinado algoritmo de GC, uma vez que não quero usar o default.
Implementando algoritmos de GC
10 Respostas
Boa noite,
Desculpa a pergunta, pode ser meio ignorante. hehe, mas apenas para conhecimento, com que intuito implementamos um GC e ignoramos o GC default.
Abraço
Não tem como. Uma das coisas que a Sun sempre deixou intocavel na linguagem Java é o gc. O máximo que você poderá fazer é ajustar seus parâmetros de funcionamento:
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
Ainda que tivesse, você provavelmente iria levar anos para superar o GC da Oracle.
Ele é fruto de vários anos de pesquisas e de diversos profissionais especialistas.
Se quiser fazer gerenciamento de memória no braço, use C++. Lá você pode ter horas e horas de diversão com alocadores, e implementar um gc na linguagem.
Esse artigo do ponto v mostra como sobrecarregar o new e delete para fazer detecção de memory leaks:
http://www.pontov.com.br/site/cpp/46-conceitos-basicos/90-detectando-memory-leaks
Acho que você quis dizer “como é que eu faço para usar um dos algoritmos de GC disponíveis no Java - mas não o default?”
Para fazer isso, é necessário passar um parâmetro adicional na linha de comando do java.exe, javaw.exe ou /usr/local/bin/java :
-XX:+UseG1GC - usar o G1 (Garbage First)
-XX:+UseParallelGC - usar o Parallel Collector
-XX:+UseSerialGC - usar o Serial Collector
-XX:+UseConcMarkSweepGC - usar o Concurrent Low Pause Collector
-XX:+UseParNewGC - usar o Parallel Young Generation Collector
etc.
(Veja http://www.lucidimagination.com/blog/2011/03/27/garbage-collection-bootcamp-1-0/ )
Boa noite,Desculpa a pergunta, pode ser meio ignorante. hehe, mas apenas para conhecimento, com que intuito implementamos um GC e ignoramos o GC default.
Abraço
como o pessoal falou, com java não há como. Mas se quiser estudar modelos simples de coleta de lixo e gerenciamento de memória pode começar com c++ usando smartpointers.
http://ootips.org/yonat/4dev/smart-pointers.html
O Garbage Collector é extremamente difícil de mudar em Java e de ser escrito e implementado, porque ele está muito amarrado com a estratégia de alocação de memória, que por sua vez está muito amarrado com a geração de código.
Tanto ele está amarrado, que por um bom tempo o JVisualVM não dava suporte a inspecionar programas Java se eles estivessem rodando com o G1 GC, porque muitas das estruturas de dados que são exigidas para monitoração não eram usáveis pelo JVisualVM, não por falha do JVisualVM mas porque o pessoal da Oracle teve de implementar um monte de coisa para permitir que um programa rodando sob G1GC fosse monitorável.
Se a JVM fosse só interpretada, não compilada em tempo de execução, provavelmente seria bem mais fácil criar uma JVM com garbage collectors “plugáveis”.
Havia me expressado mal pessoal queria saber justatamento o que o colega entanglement disse. Pessoal qual é o tipo de GC default da JVM e qual a diferença entre os 3 tipos de GC.
O default depende da configuração da máquina, na verdade.
Leia:
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
O default depende da configuração da máquina, na verdade.Leia:
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
depende da versão da jvm também. No java7 o padrão é o g1.
Pessol qual a diferencça entre os GCs, G1,serial,paralelo e o concorrente, e em quais situações eles se aplicam?
Quanto ao serial, olhe
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html (desde o começo)
Quanto aos outros, olhe
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#available_collectors
Quanto ao G1, olhe
http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html