7
votes

La mémoire de tas de java est-elle contiguë?

J'ai vu des gens commenter sur la mémoire de tas de Java étant contiguë et les gens disent le contraire. Est-ce que quelqu'un peut me donner une réponse finale et expliquer cette question? En outre, existe-t-il une sorte de structure de données dans le tas Java car il y a dans la pile Java?


0 commentaires

3 Réponses :


6
votes

La vraie réponse est, vous ne savez pas et ne vous en souciez pas. Il y a différents JVMS, et personne ne fait de la promesse sur rien que des spécifications.


1 commentaires

Il est important de savoir; Cependant, vous devriez supposer que ce n'est pas contigu et planifie en conséquence. Cela signifie moins de petits objets et des objets / classes compacts plus importants pour réduire les erreurs de cache et les recherches de mémoire étendues. Les petits objets sont le fléau de la performance de la mémoire et des misses de cache.




2
votes

Cela dépend de la JVM mais n'est définitivement pas garanti d'être contiguës. Hotspot utilise un tas de génération que IBM JDK et JRockit ne le font pas. Je crois que les processus de collecte des ordures IBM et JROCKIT utilisent un algorithme de balayage / compresse qui, en pratique, devrait entraîner un tas contigu.


1 commentaires

> Je pense que les processus de collecte des ordures IBM et JROCKIT utilisent un algorithme de balayage / compresse qui, en pratique, devrait entraîner un tas contigu. Il est légèrement plus complexe que cela. Voir Publib.Boulder.ibm.com/infocenter/realTime/v2r0/... Il y a un doc sur Oracle à propos de JRockit et du tas non continu, je ne peux pas trouver maintenant, ne pas avoir le temps.