class,object,reference变量在哪里存储在java中.在堆或堆栈?堆或堆栈在哪里?

use*_*201 42 java

我知道方法的变量存储在堆栈中,类变量存储在堆中.那么我们创建的类,对象在哪里存储在java中

小智 58

JVM中的运行时数据区可以分为以下几种,

  1. 方法区域:已编译类文件的存储区域.(每个JVM实例一个)

  2. 堆:对象的存储区域.(每个JVM实例一个)

  3. Java堆栈:局部变量的存储区域,中间操作的结果.(每个线程一个)

  4. PC寄存器:如果下一条指令是本机方法,则存储下一条要执行的指令的地址,然后pc寄存器中的值将是未定义的.(每个线程一个)

  5. 本机方法堆栈:帮助执行本机方法(用Java以外的语言编写的方法).(每个线程一个)


mud*_*sen 28

以下是您需要考虑的有关java中内存分配的要点.

注意:对象和对象引用是不同的东西.

1)java中有一个新的关键字经常用于创建新对象.但新功能是为您正在创建的类的对象分配内存并返回引用.

这意味着无论何时将对象创建为静态或本地,它都会存储在HEAP中.

2)所有类变量原语或对象引用(它只是指向存储对象的位置的指针,即堆)也存储在堆中.

3)由类加载器加载的类静态变量以及静态对象引用存储在堆中的特殊位置,这是永久生成的.

4)本地原始变量,本地对象引用方法参数存储在Stack中.

5)本地函数(方法)存储在堆栈中,但静态函数(方法)进入永久存储.

6)所有与类类名称相关的信息,与类关联的 Object数组,JVM使用的内部对象(如java/lang/Object)和优化信息都进入Permanent Generation区域.

7)要了解堆栈,堆,数据,您应该阅读有关操作系统中的进程和进程控制块的信息.

  • 这个答案很有帮助,但恐怕我需要参考链接。 (2认同)

Thi*_*ilo 13

Java中的所有对象都存储在堆上.保存对它们的引用的"变量"可以在堆栈上,也可以包含在其他对象中(然后它们不是真正的变量,而是字段),这也将它们放在堆上.

定义类的Class对象也是堆对象.它们包含构成类的字节码(从类文件加载),以及从中计算的元数据.


Ken*_*ent 6

内存的Stack部分包含方法,局部变量和引用变量.

堆部分包含对象(也可能包含引用变量).

在短暂的谷歌之后,我找到了一个描述它的链接,是一个youtube视频链接.^ _ ^

http://www.youtube.com/watch?v=VQ4eZw6eVtQ

  • 该视频已无法播放.下次,请考虑在答案中总结视频.这样,如果视频不可用,则不会显着影响您的答案. (11认同)
  • 视频无法播放.你能给我们另一个链接吗? (5认同)

sid*_*ani 5

这个概念非常简单:

  1. 实例变量(原始、包装类、引用、对象(非静态))- 堆
  2. 局部变量,引用 - 堆栈
  3. 其他数据对象,如:类元数据、JVM 代码、静态变量、静态对象引用、静态函数等,以前位于 Permgen Space(直到 Java 7)中,现在已移至 JAVA 8 中的 Metaspace。

PS:元空间是本机内存的一部分,因此现在无需担心 OOM:Pergem Exeption。

欲了解更多详情: https: //siddharthnawani.blogspot.com/