首页 > 代码库 > java内存管理的分析

java内存管理的分析

java 中的内存分为四个部分:

stack(栈):存放基本类型的数据和对象的引用,即存放局部变量。

Note:

如果存放的是基本类型数据(非静态变量)则直接将变量名和值存入stack中。

如果存放的是引用类型,则将变量名存入栈,然后指向它new出的对象(存放在堆中)。

heap(堆)存放 new 出来的东西。

data segment(数据区):分为静态区和常量区(常量池)

静态区(static segment):

存放在对象中用 static 定义的静态成员(即静态变量,如果该静态变量是基本类型变量,则将变量名和值都存入静态区中,如果是引用类型则指向 new 出来的对象。

常量池(constant pool):

存放在编译期被确定,并被保存在已编译的 .class 文件中的一些数据。如代码中基本类型和引用类型(String、Class、数组、Integer等包装类)的常量值(final)。此外,这里还存放一些以文本形式出现的符号引用(如:字段的名称和描述符、方法的名称和描述符、类和接口的全限定名)。

code segment(代码区):存放代码。

【图示】

1:注意比较静态变量和非静态变量的变量名、变量值所存储位置的区别:


2:对于值相同的 String 常量,在 constant pool 中只会创建一个。

   对于 String s3 = new String("s3");

   创建了两个 String 对象,一个是在编译期间通过""双引号创建的,另一个是在运行期间 new 出来的。

3: