Dans l'environnement d'exécution Java, si mon application libère de la mémoire, l'exécution libère-t-elle la mémoire sur le système d'exploitation? Ou juste de retour à mon processus?Java VM - la mémoire libérée revient-elle au système d'exploitation?
Répondre
Cela dépend de l'implémentation de la machine virtuelle Java et n'est pas spécifié dans la spécification.
La JVM Sun le conservera dans un premier temps. Une fois qu'un certain pourcentage (configurable) de la mémoire allouée est inutilisé, il en renverra une partie au système d'exploitation (le comportement est influencé par le MinHeapFreeRatio
and MaxHeapFreeRatio
settings).
Retour au processus d'abord, mais pourrait également revenir à l'OS à la fin. La mémoire allouée par le GC est dans un gros morceau contigu (le tas) ou un ensemble de morceaux, et GC "libérant" libère simplement l'allocation dans le tas, mais pas nécessairement de nouveau au système d'exploitation. Une fois que le GC se compacte, il peut être possible pour la machine virtuelle de renvoyer de la mémoire au système d'exploitation. Le CPG souhaite conserver une certaine quantité d'espace afin de pouvoir répondre rapidement aux futures «nouvelles» demandes de mémoire. Donc, GC fait des demandes à l'OS pour la mémoire dans de grands segments, aussi rarement que possible.
- 1. La mémoire virtuelle n'est jamais libérée
- 2. Im Stumped, Pourquoi la mémoire UIImage \ Texture2d n'est pas libérée
- 3. visual vm analyser la fuite de mémoire
- 4. Java, Java VM, Java Platform,
- 5. renderInContext créer de la mémoire qui n'est pas libérée rapidement
- 6. La mémoire ne devient pas disponible même après l'avoir libérée
- 7. Traitement d'image WPF - La mémoire n'est jamais libérée
- 8. iPhone: la mémoire utilisée par les images n'est pas libérée
- 9. Java VM Références d'objet
- 10. Mémoire non libérée par l'application python cherrypy sur linux
- 11. Java -Xmx, Max mémoire sur le système
- 12. L'espace java PermGen fait-il partie de la mémoire VM totale?
- 13. Java VM tuning - Xbatch et -Xcomp
- 14. monorail - Comment écrire JavaScript au sein de la page .vm
- 15. Schéma - Système de mémoire
- 16. Empreinte de l'application système et de la mémoire système
- 17. Quelle VM Java embarquée suggérez-vous pour le développement ARM?
- 18. Comment vérifier que la mémoire a été libérée dans Visual Studio C++?
- 19. La mémoire Objective-C n'est pas libérée avec de grands tableaux
- 20. Passer des arguments à java vm depuis le script NSIS
- 21. Dépense de mémoire Java
- 22. gestion de la mémoire java
- 23. Java mémoire expliquée (SUN JVM)
- 24. Obtention de la taille de la mémoire du système d'exploitation à partir de Java
- 25. utilisation de la mémoire java
- 26. Système de fichiers en mémoire pour Windows
- 27. Aide au débogage de la mémoire ObjC
- 28. Spécifier la propriété système au projet Maven
- 29. Etat exact de la mémoire validée dans java
- 30. java système de connexion
Je n'ai jamais vu la Java VM agir de façon très agressive pour retourner de la mémoire au système - probablement une bonne chose par défaut. Les processus Java ont tendance à être longs et en constante expansion et les contrats peuvent fragmenter la mémoire. Pour la plupart des solutions côté serveur, libérer de la mémoire conduirait à un comportement non-déterministe et à des performances médiocres, mais ce serait bien s'ils laissaient cette décision aux utilisateurs (avec les paramètres -Xmx/-Xms). –