创建对象内存
栈
- Java栈的区域很小 , 大概2m左右 , 特点是存取的速度特别快。栈存储的特点是, 先进后出
- 存储的是: 基本数据类型的数据 以及 引用数据类型的引用!
堆
-
存放的是:类的对象 。
-
Java是一个纯面向对象语言, 限制了对象的创建方式: 所有类的对象都是通过new关键字创建。
-
new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:
堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长 !
-
堆内存中内存的释放是由GC(垃圾回收器)完成的。
-
垃圾回收器 回收堆内存的规则: 当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !
Person p1=new Person(); Person p2=p1; //p1和p2共用一个内存空间,两者指向的内容一致 //p1调用的属性改变,则p2的相应属性也变
方法区
当类的对象被创建时,该类的属性和方法就会被加载到方法区中。
存放的是
-
类信息
-
静态的变量
-
常量
-
成员方法
方法区中包含了一个特殊的区域 ( 常量池 )(存储的是使用static修饰的成员)
PC寄存器
- PC寄存器保存的是 当前正在执行的 JVM指令的 地址 !
- 在Java程序中, 每个线程启动时, 都会创建一个PC寄存器 !
本地方法栈
- 保存本地(native)方法的地址。
总结:
对象被创建后,存放在堆中,堆存放的是地址;对象的相关属性的值存放在栈中。
当某个栈无任何对象引用时,该栈就会变成垃圾,等待GC回收。
方法区:存放类的相关属性和方法及静态变量。
匿名对象
- 没有对象名称的对象 就是匿名对象。例,new Person();
- 匿名对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾,等待被G·C回收。
- 只使用一次的对象可以通过匿名对象的方式完成,这一点在以后的开发中将经常使用到。