El patrón de diente de sierra en el uso de montón se puede explicar por el hecho de que se crean varias variables locales durante la invocación de la invocación System.out.println
. Lo más notable en el Oracle/Sun JRE, varios HeapCharBuffer
casos se crean en la generación joven, como se indica en la siguiente instantánea obtenida utilizando el generador de perfiles de memoria de VisualVM:
La parte interesante es en el número de objetos en vivo que están presentes en el montón. El patrón de dientes de sierra es el resultado del ciclo de recolección de basura de jóvenes que ocurre cuando el espacio de eden se llena; dado que no se realiza una gran actividad de cómputo en el programa, la JVM puede ejecutar varias iteraciones del ciclo, lo que da como resultado que se llene el espacio de eden (de 4 MB de tamaño).El siguiente ciclo de recolección de jóvenes genera la mayor parte de la basura; es casi siempre la totalidad del espacio eden, a menos que los objetos son todavía en uso, como se indica por la siguiente traza gc obtenida de VisualVM:
El comportamiento del patrón de diente de sierra de este modo se puede explicar por una serie de asignaciones de objetos en rápida sucesión que llenan el espacio de eden, desencadenando un ciclo de recolección de basura de gen jóvenes; este proceso se repite cíclicamente sin demoras, ya que el proceso JVM subyacente no es reemplazado por otro proceso, y el subproceso principal dentro de la JVM que es responsable de las asignaciones de objetos tampoco es reemplazado por otro subproceso.
Y parece variar en un buen ... uh ... ¿3 megabytes? Puede eso ser verdad? – Owen
Obtendrá una idea de esto al probar otros algoritmos de recolector de elementos no utilizados. Consulte aquí para obtener información: http://www.tikalk.com/java/garbage-collection-serial-vs-parallel-vs-concurrent-mark-sweep – skaffman
@ buch11: nunca subestime la gigantesca cantidad de basura, incluso la Java más trivial método/API es capaz de generar. He hecho cálculos científicos con múltiples subprocesos usando Java y puedo decirte que hay tantos errores que ni siquiera son graciosos;) Debes darte cuenta de que la mayoría de los programadores Java usarán cosas como * Map * y te contarán que si no es un cuello de botella no tiene nada de malo. Java es básicamente un mundo en el que casi todo el mundo genera incontables desechos y piensa: * "El recolector de basura se encargará de eso" *. Hay una razón por la cual Photoshop no está escrito en Java;) –
SyntaxT3rr0r