Maison  >  Questions et réponses  >  le corps du texte

java 基本数据类型各种情况下在内存中存储位置?

问题:

如何理解《Java编程思想-第四版》P23 中,这个变量直接存储“值”,并置于堆栈中,因此更加高效
一句中的 “堆栈” 两字,到底是堆还是栈?情况如下:

class demo {
    private int var1; // 字段1
    private Integer var2; // 字段2

    public static void main(String[] args) {
        int var3 = 0; // 变量1

        demo obj1 = new demo(); // 实例1
    }
}

我的理解

参考《Java编程思想-第四版》P23 和 《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》P39-P43,对于该 demo

如果是存储在堆中的话,何来高效一说?

黄舟黄舟2743 Il y a quelques jours540

répondre à tous(4)je répondrai

  • PHPz

    PHPz2017-04-18 10:54:21

    On ne peut généralement pas dire que tous les types de données de base sont placés sur la pile ! Lorsqu'il y a un type de base dans une instance de classe, le type de base est placé sur le tas !

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:54:21

    La mémoire est divisée en tas et en pile, vous le savez déjà.

    La mémoire du tas appartient à la JVM et la mémoire de la pile appartient à la méthode. Lorsque la méthode se termine, la mémoire de la pile disparaît.

    Lorsque le programme exécute la fonction principale, il existe une mémoire tas et une mémoire de pile principale

    int var3 = 0;
    Ce var3 est placé dans la mémoire de pile de la fonction principale et est une valeur.

    Après cela
    demo obj1 = new demo();
    Il y a une variable de référence dans la mémoire de pile de la fonction principale, obj1, qui pointe vers la nouvelle instance dans la mémoire du tas.

    Regardons cette instance dans la mémoire du tas. Elle comporte 2 champs, tous deux stockés dans le tas.

    Lorsque la fonction principale se termine, s'il y a d'autres threads en cours d'exécution, la JVM n'est pas encore terminée. À ce moment, la mémoire de pile de la fonction principale est effacée, var3 n'est plus là et la variable de référence obj1 n'est plus là. plus là, mais le tas L'instance en mémoire existe toujours, et si aucune autre variable de référence ne pointe vers elle, elle sera effacée plus tard.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:54:21

    是翻译错误,原文中用的是pile,即栈,而不是堆栈。以下是原文:

    Cas particulier : les types primitifs

    Un groupe de types, que vous utiliserez assez souvent dans votre programmation, bénéficie d'un traitement spécial. Vous pouvez les considérer comme des types « primitifs ». La raison de ce traitement spécial est que créer un objet avec new (en particulier une petite variable simple) n'est pas très efficace, car new place les objets sur le tas. Pour ces types, Java s'appuie sur l'approche adoptée par C et C++. Autrement dit, au lieu de créer la variable en utilisant new, une variable « automatique » est créée qui n'est pas une référence. La variable contient la valeur directement, et elle est placée sur la pile, donc c'est beaucoup plus efficace.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:54:21

    p22, pile fait référence à la pile et tas fait référence au tas

    répondre
    0
  • Annulerrépondre