JVM
什么是堆(Heap)内存?
❒ 线程共享的区域: ✔ 主要用来保存new创建的对象实例,数组等,当堆中没有内存空间可分配给实例,也无法再扩展时,则抛出OutOfMemoryError异常。 ✔ 年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区(默认8: 1: 1)。 ✔ 根据JVM的策略,在经过几次垃圾收集后(默认15次),任然存活于Survivor的对象将被移动到老年代区间。 ✔ 老年代主要保存生命周期长的对象,一般是一些老的对象。 ❒ jdk1.7的时候方法区/永久带是放在堆内存里面的。为了节省内存,jdk1.8把方法区/永久带改名字元空间,放到本地内存中。
❒ 线程共享的区域(会出现线程安全问题): 主要用来保存对象实例,数组等,内存不够则抛出 OutOfMemoryError异常。 ✔ 组成: 年轻代 + 老年代 ✔ 年轻代被划分为三部分,Eden区和两个大小严格相同的Survivor区 ✔ 老年代主要保存生命周期长的对象,一般是一些老的对象 ❒ Jdk1.7 和 1.8的区别 ✔ 1.7 中有有一个永久代,存储的是类信息、静态变量、常量、编译后的代码 ✔ 1.8 移除了永久代,把数据存储到了本地内存的元空间中,防止内存溢出