JVM运行时内存笔记

图片引用他人,如有侵权,告知即删。

运行时内存

1.程序计数器:

1.线程私有。
2.在jvm文档中没有定义OOM。
3.用户代码推进器,不作用于native源码。
4.用来分支,循环,跳转,异常处理等代码流程结构。

2.虚拟机栈(方法栈)

1.线程私有。
2.StackOverFlowError&&OutOfMemoryError。
3.一个方法就是一个栈帧,栈帧的出入栈表示方法的执行。
4.栈帧上包含局部变量表,动态链接,操作数栈,方法出口信息。
5.逃逸分析的介入,对象也可能分配到栈帧上,跟随方法的生命周期。
6.只作用于用户代码(程序员写的代码)

3.本地虚拟机栈(本地方法栈)

1.线程私有。
2.StackOverFlowError&&OutOfMemoryError。
3.只作用于native代码。
4.其他类似
5.Sun hot spot合二为一。

4.堆:

1.线程共享。
2. OutOfMemoryError。
3.分配对象的位置。
4.垃圾回收的主要区域。
5.物理不连续,逻辑连续即可。

5.方法区:

1.线程共享
2. OutOfMemoryError。
3.存放类信息,常量池,静态变量,即时编译的代码。
4.垃圾回收效率最低的地方。
5.物理不连续,逻辑连续即可。
6.常量池(方法区的一部分)
    1>.存放字面量和符合引用
    2>.动态改变的,比如String.intern.

6.对象的访问方式:

1.句柄
    将java堆划分为句柄池和对象数据池,句柄池中句柄由对象数据的指针和对象类型数据的指针组成。
2.直接指针
    没有对象数据池,引用就是对象数据的指针,对象类型数据的指针仍然存在,并指向方法区。
3.why?
    句柄的方式当垃圾回收需要进行对象的移动时,只需要修改句柄的指针既好,但是句柄方式也增加了转换的开销,直接指针就没有这样的开销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值