java - programa - ¿Jmap fuerza la recolección de basura cuando se usa la opción en vivo?
programa opción (1)
Para determinar la vida, Java tiene que ejecutar GC completo, así que sí, lo hace.
Para poner la pregunta a dormir ... aquí está la respuesta, si alguien necesita profundizar más. Sentirse libre.
parte de /hotspot/agent/src/share/vm/services/attachListener.cpp tomado de
openjdk http://download.java.net/openjdk/jdk7/ y debe aceptar http://www.gnu.org/licenses/gpl-2.0.html
// Implementation of "inspectheap" command
//
// Input arguments :-
// arg0: "-live" or "-all"
static jint heap_inspection(AttachOperation* op, outputStream* out) {
bool live_objects_only = true; // default is true to retain the behavior before this change is made
const char* arg0 = op->arg(0);
if (arg0 != NULL && (strlen(arg0) > 0)) {
if (strcmp(arg0, "-all") != 0 && strcmp(arg0, "-live") != 0) {
out->print_cr("Invalid argument to inspectheap operation: %s", arg0);
return JNI_ERR;
}
live_objects_only = strcmp(arg0, "-live") == 0;
}
VM_GC_HeapInspection heapop(out, live_objects_only /* request full gc */, true /* need_prologue */);
VMThread::execute(&heapop);
return JNI_OK;
}
en vmGCOperations.hpp es la definición
`VM_GC_HeapInspection(outputStream* out, bool request_full_gc,
bool need_prologue) :`
He estado experimentando con jmap -histo
y jmap -dump
hoy
Cuando se ejecuta en esta secuencia
jmap -dump:format=b,file=heap.1 [pid]
jmap -dump:live,format=b,file=heap.2 [pid]
jmap -dump:format=b,file=heap.3 [pid]
heap.3
parece a heap.2
más que heap.1
. En particular, los objetos "muertos" que me interesan en heap.1
están ausentes de heap.3
.
Al ver esto, comencé a buscar documentación que me dijera qué debo esperar. Lo más cercano que logré llegar fue esta discusión , donde los comentarios de briand y alanb implican que en la práctica puedo esperar que este GC ocurra cuando use la opción en vivo; pero las respuestas tienen cinco años, y las publicaciones en un foro parecen un poco informales para una especificación.
¿Dónde puedo encontrar el comportamiento actual documentado?