J'ai trouvé une tonne de questions sur « la taille retenue » et le accepted answer semble être:Calcul de la taille retenue, y compris les variables de cadre de pile?
La taille retenue pour un objet est la quantité de mémoire présente des objets conserves de collecte des ordures.
Maintenant, je travaille sur le calcul programmatique de la taille conservée dans un dossier hprof
(tel que défini here), en utilisant le Netbeans profiler library (le calcul de la taille retenue est fait dans HprofHeap.java
). Fonctionne très bien (désolé, utilisé Kotlin par souci de concision):
val heap: Heap = HeapFactory.createHeap(myHeap.toFile())
val threadClass: JavaClass = heap.getJavaClassByName("java.lang.Thread")
val instanceFilter = { it: Instance -> threadClass == it.getJavaClass() }
val sizeMap = heap.allInstances
.filter { instanceFilter(it) }
.toMap({ findThreadName(it) /* not shown */ }, { it.retainedSize })
Ce que je remarque quand le sizeMap
avait seulement un nombre marginal de tailles retenues est que Netbeans calcule conserve la taille que pour les objets qui sont pas sur la pile. Donc, les variables locales (allouées sur la pile) affectées au Thread
seraient incluses dans la taille retenue.
Ma question est la suivante: existe-t-il un moyen de faire en sorte que la bibliothèque netbeans considère les éléments de la pile comme des objets dépendants, par exemple le calculateur Yourkit Profiler? Comment pourrais-je ajouter une telle fonctionnalité si la réponse à la question précédente est "non"?