jvm的堆栈内存结构

JDK1.8之前的内存结构 jvm中的内存结构分为:堆heap、栈stack、非堆区域 堆当中存放的是对象的实例 栈当中存放的是线程运行时的临时变量 非堆区域包括方法区、常量池和永久代 永久代存放的是类加载之后的元数据 静态方法和静态变量都存放在方法区

JDK1.8之后的内存结构 jvm中的内存结构分为:堆、栈、方法区 常量池存放在堆中 永久代被弃用,Class信息存放在本地内存中metaSpace

总结:  jvm的内存结构分为堆、栈、非堆区域,堆内存里面存放的是对象实例,栈内存里面存放的是线程运行时的临时变量,非堆区域里面包括方法区、常量池和永久代;JDK1.8之后,jvm的内存结构就改变了,常量池移到了堆当中,永久代被弃用,使用本地内存来存放类加载的class信息(MetaSpace)

1.堆分为两个区域:新生代和老年代     新生代保存的是新创建的对象,老年代当中存放的是年老的对象(被多次垃圾收集都没有回收掉的对象)     新生代当中,会使用复制算法进行垃圾收集minorGC,老年代使用的是标记-整理算法进行垃圾收集(老年代进行GC的时候会造成一个应用程序线程中断的效果,会影响到应用程序的性能),所以现代的商用虚拟机使用的是分代收集算法 2.栈当中存放的是线程运行时的临时变量 3.方法区存放的是静态数据

jvm提供了很多中垃圾回收策略,垃圾回收器CMS、G1(采用多线程进行GC) 什么时候对象算死了呢,可以进行垃圾收集?     1.引入计数法(解决不了循环引用的问题)     2.可达性分析法  引用链,当一个对象到GC Roots没有任何引用链(即GC Roots到对象不可达)时,则证明此对象是不可用的 对象的引用类型     1.强引用(Object obj = new Object())         如果一个对象是强引用,那就类似于必不可少的生活用品,垃圾回收器绝对不会回收它,当内存空间不足,java虚拟机宁愿抛出OutOfMemoryError错误,是程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题     2.弱引用   一旦被垃圾回收器扫描到,不管当前内存空间足够与否,都会回收     3.软引用   如果内存足够就不回收,如果内存不足就会回收     4.虚引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值