栈和堆的基本概念

目录

堆的组成


 

 

栈是一种数据结构,具有先进先出的特点。栈内存主管程序的运行,生命周期和线程同步。

线程结束,栈内存也就释放,因此栈不存在垃圾回收问题

8大基本类型+对象引用+实例方法运行在栈中

栈满了:StackOverFlowError

 

 

 

一个JVM只有一个堆,堆内存的大小可以调节

堆内存中细分三个区域:新生区(伊甸园区)、养老区、永久区(元空间),GC垃圾回收主要在伊甸园区和养老区

所有引用类型的真实对象保存在堆中,此外常量池的地址也保存在堆中 

堆满了:OutOfMemoryError

 

 

堆的组成

 

新生区还包括伊甸园区、幸存0区、幸存1区。这里进行的GC叫做轻GC,GC时在伊甸园区的存活下来的对象会进入到幸存区,此时伊甸园区被清空。

当幸存区的内容满了,会进行一次重GC,幸存区中存活的对象(默认是15次GC后存活的对象)会进入到老年代,百分之99的对象在老年代满之前就嗝屁了~更相信的GC流程参考我的其他博客

如果老年代满了,会报OOM错误。堆内存即溢出,具体的例子有当加载大量第三方jar包时、tomcat部署了太多应用时,动态生成的反射类太多时

永久区即元空间,元空间里包含方法区,常量池又在方法区中。元空间用来存放JDK自身携带的Class对象。存储的是Java运行时的一些环节或类信息,元空间不存在垃圾回收,关闭JVM就会释放这个区域的内存

==========

永久区名称演变

jdk1.6之前:永久区如图所示,常量池在方法区中

jdk1.7:永久区退化了,常量池直接扔到堆中

jdk1.8:永久区改名为元空间,常量池在其中

 

 

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读