java变量在内存中的储存形式

2017年01月09日

RAM(random access memory)

随机存储器,是与CPU直接交换数据的内部存储器,又叫内存

非RAM储存

硬盘等永久性储存空间


寄存器

最快的存储区,由编译器根据需求进行分配,程序中无法控制


栈(Stack)

存放基本类型的变量数据和对象引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象),或者常量池中(字符串常量对象存放在常量池中)


堆(heap)

存放new出来的对象


静态域

存放静态成员(static 定义的)


常量池

存放字符串常量和基本类型常量(public static final)


成员变量

类内,方法外的变量


局部变量

方法内的变量


  1. 栈和常量池中对象可以共享(值发生改变不影响共享),堆中的对象不能共享(值发生改变,则引用对象的内容全部改变)
  2. 栈中的数据大小和生命周期是可以确定的,当没有引用指向这个数据时,这个数据就会消失
  3. 堆中的对象有垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性
  4. 字符串的引用存放在栈中,若用"",则存放在常量池中;若用new 出来,则存放在堆中(常量池中可以共享)
  5. 成员变量储存在堆中,由JVM负责回收,局部变量储存在栈中,随生命周期的结束而结束
  6. 只有引用型数据类型才能与object类相容,基本的数据类型需要包装之后才能与object类相容,Integer的最大作用在于字符串和整形的相互转换上