¿Hay una manera (fácil) para determinar qué objetos de la GC es "eliminar"?

Jonathan Sylvester:

Tengo un programa en Java que crea una docena de conjuntos de de aproximadamente 160 millones de longitud cada uno. Las matrices contienen primitivas (char, corto, y flotadores). En mi algoritmo, me he dado cuenta (a través de JProfiler) que la GC se ejecuta un poco justo en mi sistema (máquina Windows máquina virtual en la nube de Google, 16 núcleos de CPU, memoria RAM de 64 GB), pero no puedo entender por qué la GC está funcionando tan a menudo y el consumo de 80% de la potencia total de cálculo CPU.

Así que pensé: Si pudiera averiguar (ya sea a través JVM comandos / logs o, preferentemente, a través de un generador de perfiles tan JProfiler) qué objetos precisa que era "recolección de basura", que podría tener una oportunidad de entender lo que está pasando y, o bien fijar un sencillo emisión o rearchitect basada en mi mejor entendimiento de lo que está haciendo de Java. (A lo mejor de mi conocimiento, he minimizado creaciones de objetos;. Hago uso de una gran cantidad de características de transmisión en paralelo jdk8 embargo, por lo que no sé si eso es de alguna manera causando problemas GC) ¿Hay una manera de determinar qué objetos ( o qué tipos de objeto) de la GC está tratando de recoger la basura en cualquier momento específico para que pueda comprender mejor por qué la GC está funcionando tan a menudo y tan difícil?

Ingo Kegel:

En JProfiler, se puede utilizar la grabación de asignación para este fin.

Para mostrar los objetos recogidos de la basura en la vista "objetos grabados", cambie el selector de vida de la conexión en la barra de herramientas a cualquiera "basura recogida objetos" u "objetos vivos y basura recogida". El diálogo de opciones del árbol de llamadas asignación y vistas del punto caliente de asignación tiene un desplegable equivalente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=221361&siteId=1
Recomendado
Clasificación