In java Peut-on créer des objets avec l'allocation de mémoire statique et l'allocation de mémoire dynamique?In java Les objets Can peuvent-ils être créés avec l'allocation de mémoire statique et l'allocation de mémoire dynamique?
Répondre
Si par mémoire statique, vous voulez dire sur la pile, non, tous les objets sont alloués sur le tas. Seules les primitives sont allouées sur la pile. Editer: Je ne suis toujours pas sûr si par dynamique et statique vous entendez tas et pile, respectivement, mais c'est généralement d'où vient la question pour les personnes avec un fond C/C++, parce que ces langues donnent le contrôle du développeur au-dessus de ça.
En Java, lorsque vous faites une typique:
Object o = new Object();
Cela va allouer de la mémoire sur le tas. Si l'intérieur d'une méthode que vous faites:
int i = 1;
Alors que int est alloué sur la pile (si elle est un champ dans une classe, il sera alloué sur le tas).
pouvez-vous s'il vous plaît donner un exemple d'allocation statique et dynamique à la fois ?? –
Toute la mémoire d'instance (en appelant new) est allouée sur le tas, tous les paramètres sont alloués sur la pile. Mais les paramètres java (non primitifs) sont tous passés par référence (sauf les primitives).
En Java, tous les paramètres sont transmis par valeur. –
Toutes les instances sont passées par une référence comme un pointeur vers l'instance. À droite, le pointeur est passé par valeur, mais l'appel d'une méthode sur l'objet passé va changer l'original –
Exactement, Java est toujours valeur par passe, ce qui signifie que les références d'objet sont également transmises par valeur (et dans les objets Java sont toujours accédé par une référence). C'est complètement différent du renvoi par référence. http: // stackoverflow.com/questions/40480/is-java-pass-by-reference –
Les réponses affirmant que les non-primitives sont toujours allouées sur le tas sont totalement erronées. Les JVM peuvent faire escape analysis pour déterminer si les objets seront toujours confinés à un seul thread et si la durée de vie de l'objet est limitée par la durée de vie d'une trame de pile donnée. S'il peut déterminer qu'un objet peut être alloué sur la pile, une JVM peut l'y allouer. Pour plus de détails, voir this article. «Statique» ne veut pas dire «sur la pile»
Java 6u14 (lorsque -XX: + DoEscapeAnalysis est activé) utilise l'analyse d'échappement pour le remplacement scalaire, pas l'allocation de pile. Les objets sont * jamais * alloués sur la pile, mais leurs champs sont soulignés et traités comme des variables locales. Voir http://java.sun.com/javase/6/webnotes/6u14.html –
Les objets affectés à l'initialisation des variables statiques de classe, ou au static code blocks, sont alloués de manière statique, en ce sens que l'allocation est effectuée au moment du chargement de la classe (qui peut être statique immédiatement après le démarrage du programme).
Vous pourriez, en théorie, écrire un programme Java en utilisant seulement de telles allocations, et ce serait statically allocated, le même qu'un programme C qui n'a jamais appelé malloc, juste eu des tampons fixes pour le truc qu'il voulait faire. Si un tel programme démarre avec succès, cela prouve qu'il y a suffisamment de mémoire disponible pour tout ce qu'il peut faire, et donc il n'obtiendra jamais une erreur de mémoire insuffisante, un problème de fragmentation ou une pause GC.
Il va juste, si correctement écrit, retourner beaucoup de messages d'erreur en disant «Je ne peux pas faire ça».
- 1. Objets de mémoire secondaire de mémoire principale
- 2. Stratégies de tuyau nommées avec mémoire dynamique?
- 3. C++ Allocation dynamique de la mémoire
- 4. Surveillance de la consommation de mémoire par différents objets Java
- 5. removeFromSuperView/mémoire/changement de vue dynamique
- 6. Fuite de mémoire (sorte de) avec un statique std :: vector
- 7. C#: objets simples et complexes et utilisation de la mémoire
- 8. Allocation de mémoire dynamique dans VB6
- 9. allocation de mémoire dans les dispositifs de petite mémoire
- 10. Java mémoire Problème de fuite avec JPanels
- 11. structures dynamiques dans la mémoire statique?
- 12. Déclaration de déclarations de mémoire dynamique C++
- 13. gestion de la mémoire java
- 14. Comment supprimer les objets CoreData de la mémoire?
- 15. Instantané des objets en mémoire
- 16. Déterminer l'utilisation de la mémoire des objets?
- 17. Java statique vs objets réguliers
- 18. Allocation de mémoire Java non bloquante
- 19. Mémoire insuffisante avec Postgres en Java
- 20. Fuite de mémoire avec OracleCommand
- 21. Java utilise toujours la mémoire système après désallocation des objets et récupération de place
- 22. Mémoire non gérée et mémoire gérée
- 23. Pièges de fuite de mémoire dans l'API Java Standard
- 24. Comportement mémoire de/Possible fuite de mémoire dans UITableView
- 25. delete [] et fuites de mémoire
- 26. Java mémoire expliquée (SUN JVM)
- 27. Manque de mémoire avec dataSet.GetXml()
- 28. Comment initialiser un tableau après l'allocation de mémoire dynamique?
- 29. Allocation de mémoire et bouclage
- 30. Sur JQuery, les fermetures et les fuites de mémoire possibles
Qu'entendez-vous par "allocation de mémoire" "statique" et "dynamique"? – nos