一、联系
堆解决数据存储。
栈解决程序运行,如何处理数据。
方法区是辅助堆栈的快永久区(类信息、静态信息都存放于方法区中)。
二、辨清java堆
1. java堆完全是自动化管理,通过垃圾回收机制,垃圾对象会自动清理,不需要显示地释放。
2. 根据垃圾回收机制不同,java堆有可能拥有不同的结构。最为常见的就是将整个java堆分为新生代和老年代。
3. 新生代又分为eden区、s0区、s1区。eden又称伊甸园,新对象一来存放于此。s0与s1大小相等,是相互转换角色的空间,并且s0有对象则s1无对象,相反s1有对象则s0无对象。
4. 每经过一次新生代回收,如果对象还存活,则会进入s0或者s1,之后每一次新生代回收(GC操作),如果对象存活则它的年龄就加1,一定年龄后进入老年代。
5. 复制算法
三、栈
1. 栈是一块线程私有的内存空间。
2. 一个栈,一般由三部分组成:局部变量表、操作数栈和帧数据区。
(1) 局部变量表:用于报错函数的参数及局部变量
(2) 操作数栈:保存计算中间结果,同时作为计算过程中变量临时的存储空间。
(3) 帧数据区:保存常量池指针,还必须有一个异常处理表,方便发送异常时找到异常代码。