Réduction de la consommation de la mémoire en Java
J'ai travaillé avec certains des projets où la réalisation de meilleures performances et une réduction de la consommation de mémoire a été l'objectif principal. Mais croyez-moi, il a déjà été difficile de contrôler la consommation de la mémoire en Java.
Ce page wiki, dit le "Programme Java Vitesse"
Java est, dans certains cas, égale à C++ sur les bas-niveau et numérique repères.
Ces statistiques ne montre pas vraiment une grande différence dans le temps de calcul de la Performance de référence.
Cependant, l'utilisation de la mémoire en Java est bien supérieure à C++, car il y a un 8 octets de surcharge pour chaque objet et 12 octets pour chaque tableau en Java (32-bit; deux fois plus dans la version 64 bits de java) comme mentionné ci-dessus lien wiki.
Maintenant, la question est ce que toutes les mesures de gens prendre afin de minimiser l'utilisation de la mémoire en Java?
Veuillez noter que je suis très préoccupé par la mémoire de performance, puisque je ne vois pas de meilleurs moyens que de "l'écriture des programmes de mieux" et "correctement réglage de la mémoire dans le JDK"
- Vous ne pouvez pas optimiser la mémoire, aussi bien en java que vous pouvez dans le c++. Si la mémoire est la principale contrainte, est-il une raison pour laquelle vous avez besoin de java?
- Java utilise 4 octets pour l'en-tête d'un objet dans un programme 64 bits qui n'est pas double. Java utilise généralement 32 bits références pour jusqu'à 32 GO dans une JVM 64 bits, tandis que le C/C++ des programmes 64 bits utilisent généralement des pointeurs 64-bit.
- +Anshu Java philosophie ne se soucie quelle quantité de RAM utilisée, le gros point fort de Java est l'évolutivité, les performances et la normalisation, Si vous voulez quelque chose de la plupart de Java avantages mais léger envisager de prendre un coup d'oeil à GOLANG qui est le milieu entre Java et C++
- S'il est configuré correctement, JVM peut être redimensionnée à la verticale de l'optimisation de l'utilisation de la mémoire à la charge actuelle. Sélectionnés garbage collector est l'un des principaux fondateurs de briques et ses paramètres peuvent influencer l'ensemble du projet. Utilisation G1 GC et éviter les "agressif tas" approche. Plus de détails sont dans l'article "Réduire Java Utilisation de la Mémoire avec le Droit Garbage Collector" javacodegeeks.com/2017/11/...
Vous devez vous connecter pour publier un commentaire.
En fonction de votre ce que vous travaillez, vous pouvez bénéficier de différentes pratiques de programmation tels que:
Il n'y a pas beaucoup que vous pouvez faire de la mémoire autres que de réduire le nombre d'objets que vous créez et d'essayer de faire de votre objet de court-live. Cependant, Java sera toujours utiliser toute la mémoire qu'il est permis pour les meilleures performances.
Il peut y avoir deux motivation pour la gestion de la mémoire en java.
1. Éviter les fréquents création/suppression d'objets.
Cette tour, évite GC de se réveiller très souvent car cela peut causer un ou plusieurs de vos exécution de threads à suspendre.
Éviter temporaire/permanent mémoire trous
2. Réduire l'ensemble de la consommation de la mémoire de la VM
Ce sera nécessaire si votre VM sera exécuté dans un environnement où vous avez strictes contraintes de mémoire.
Idéalement à partir de la mémoire de la perspective d'un bien écrit un programme en java devriez essayer et obtenir à la fois de la ci-dessus.
Maintenant, pour atteindre 1, vous devez effectuer les opérations suivantes.
Préfèrent statique de l'allocation de mémoire, j'.e allouer une fois par VM plutôt
pour l'allocation de mémoire dynamique.
Éviter la création d'objets temporaires dans les fonctions de, pour ce faire, la plupart des
les objets peuvent mettre en œuvre une méthode reset() qui peut permettre à l'objet de
réutilisé
Comprendre l'API que vous utilisez, par exemple. si vous utilisez de la Ficelle, vous aurez
créer autant d'instances que il y a des modifications. L'
de même pour les auto boxed types.
Les points ci-dessus également aider à gérer ou de contrôler le point 2
Pour garder un contrôle sur VM taille de la mémoire, vous devez faire les points mentionnés ci-dessus et également effectuer les opérations suivantes
Utilisation Xmx et Xms drapeaux lors du lancement de votre VM et délibérément leurs valeurs à des valeurs plus faibles que ce qui pourrait être nécessaire, et d'être à l'affût de OutOfMemoryError .
Si OutOfMemoryError survient, ce qui signifie que vous êtes sur le tournage de la max taille de mémoire virtuelle. Identifier ce qui est la cause et le démarrage du paramétrage de votre création de l'objet.
Espère que ça aide ...
Ils ressemblent à de petits repères plutôt que de micro-tests de la taille d'un tableau est.
Vous pouvez essayer de comparer Java références (qui utilise 4 octets de même sur un 64-JVM) pour C++ partagé pointeurs (qui peut utiliser de 48 octets sur un processus 64 bits) et arriver à une conclusion qui est peu susceptible d'être utile dans un programme réel.
Généralement tout ce que vous devez faire est d'utiliser un profileur de mémoire. Cela vous aidera à réduire la consommation de mémoire en Java.
Je trouve cette obsession de sauver chaque octet est anachronique dans la plupart des cas. Dans un PC, un octet de mémoire coûte environ 5e-7 cents. Ou à propos de 2e-6 secondes de votre temps. Ceux-ci peuvent ajouter jusqu'mais si vous ne vous économiser 100 KO, il peut ne pas être la peine de changer tout le code pour le faire et si vous allez économiser de 1 GO, il peut être intéressant de passer quelques heures sur elle. Même si vous ne vous économiser de 1 GO, la mémoire est réutilisable, mais le temps n'est pas.
Je suis d'accord avec ce point que si vous avez un appareil avec un peu de MO, c'est à dire plus petit qu'un téléphone android par exemple, C serait votre meilleur choix. Si vous avez un appareil dont au moins un téléphone intelligent de la capacité, il se peut que Java est parfait pour vos besoins.