JVM 垃圾回收学习总结1

本文详细介绍了JVM的内存布局,包括线程共享区域如java堆区、方法区及运行时常量池;线程私有区域如PC寄存器、java栈和本地方法栈。解析了各个区域的作用和特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. JVM 运行时内存区 (图片为引用,非自创,非商业)
    JVM内存运行时内存图

jvm的内存区可以根据受访权限的不同,定义为线程共享和线程私有两大类。
线程共享:所有的线程都可以访问的内存区域。

线程共享区:

  • java 堆区

  • java 方法区

  • java 运行时常量池

1.
java 堆区: 存储对象实例,是GC执行垃圾回收的重点区域,GC的回收频率和效率,主要跟该区域的特性有关。
根据jvm对象的存活时间长短,堆区可以更细分为新生代老年代,其中新生代又分为Edge区From Survivor区To Survivor区
2.
java 方法区:存储每一个java类的结构信息。比如:运行时常量池,字段和方法数据,构造函数,普通方法的字节码内容,以及类, 实例,接口需要用到的特殊方法数据。 该区也被称之为永久代。
该区域并不会像java堆区那样,频繁的被GC执行回收,还可以显式指定是否需要GC回收方法区内容。没有指定不对该区域回收时,GC仅针对该区域的常量池和类型卸载进行回收
3.
运行时常量池:属于方法区的一部分。主要包含一些常量。比如字节码文件中,编译期就已经确定的值。
当类装载器成功将一个类或接口装载到JVM后,就会创建对应的运行时常量池。

线程私有区:
  • PC寄存器
  • java栈
  • 本地方法栈

1.
PC计数器:JVM是基于栈结构的。PC计数器作为线程私有,是为了记录线程执行到了哪一条字节码指令,方便CPU进行线程间的切换。
2.
java栈 线程私有,生命周期同线程一致,存储局部变量,操作数栈,方法出口。java堆区存储的是对象实例,则java栈存储的是对象引用,原始数据类型。
3.
本地方法栈:用于支持native方法,(c/c++实现的方法)。

小结1:
以上内存区,除了PC计数器,都会抛出OutOfMemoryError 异常。栈还会抛出StackOverFlowError 异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值