深入理解JVM(一)

第二章、Java内存区域和内存溢出异常

2.1、运行时数据区域

在这里插入图片描述

线程私有部分(图中白色部分)

  • 程序计数器:
    • 作用:使得线程切换后能恢复到正确的执行位置。
  • 虚机机栈:
    • 作用:描述Java方法执行的内存模型:每个方法在执行的同时会创建一个帧栈用于存储局部变量表,操作数栈、动态链接、方法出口信息等。(在一个方法执行的过程中会细讲
  • 本地方法栈:
    • 作用:与虚拟机栈类似,但是为Native方法服务

程序公有部分(图中绿色部分)

  • 堆:
    • 作用:存放对象实例(new)
    • 内部结构:新生代和老年代(Eden空间、From Survivor空间和To Survivor;8:1:1);
    • gc回收的目标:all
  • 方法区:
    • 作用:存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
    • gc的回收目标:常量池的回收和对类型的卸载

2.2 对象的创建

在这里插入图片描述

2.3、对象的内存布局

在这里插入图片描述

​ 对象在内存中存储主要分为3块,分别是:对象头、实例数据和对齐补充。

​ 对象头主要包含两部分信息:

  • Mark Word:存储对象自身的运行时数据,如:HashCode,GC分代年龄、锁状态标志等等。
  • 类型指针:对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。

2.4、对象的访问定位

​ Java程序需要通过栈上的reference数据来操作堆上的具体对象。目前,主流的访问方式有句柄和直接指针两种。

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值