JVM入门以及class文件格式

保证指令的有序性

cpu有时为了提高效率会乱序执行指令.但是有的时候会因为乱序而导致异常

x86 CPU 内存屏障

  1. sfence: 在sfence指令前的操作必须在sfence指令后的操作,之前完成
  2. lfence: 在lfence指令前的操作必须在lfence指令后的操作,之前完成
  3. mfence: 在mfence指令前的 读写 操作必须在mfence指令后的 读写 操作,之前完成

jvm级别 内存屏障

jvm 的内存屏障依赖于cpu硬件支持

  1. LoadLoad
  2. StoreStore
  3. LoadStore
  4. StoreLoad

volatile 底层实现

  1. 字节码层面: 被标记了volatile的变量在被翻译成字节码文件的时候也就是加了一个 VOLATILE的标记
  2. jvm层面: 在这里插入图片描述
  3. OS和硬件层面
    根据cpu不同而不同

synchronize 底层实现

  1. 字节码层面 synchronize 代码块 增加了 monitorenter 和 monitorexit 指令
  2. jvm 层面 c 和 c++ 调用操作系统的同步机制
  3. 硬件层面 lock指令

对象的内存布局

java 内存模型

在这里插入图片描述

对象的创建过程

  1. classLoading
  2. classLinking (verification 校验合法性, preparation 把静态类变量赋初始值, resolution 解析)
  3. class initializing 静态变量赋 默认值, 执行静态代码块
  4. 申请对象内存
  5. 成员变量赋初始值
  6. 调用构造方法 : 成员变量赋 默认值

对象在内存中的存储布局

普通对象

  1. 对象头 markword 8 字节
  2. classpointer 开启压缩为4字节,不开启为8字节
  3. 实例数据, 开启压缩参数 引用类型4字节,不开启8字节
  4. padding 对其

数组对象

相比普通对象还多一个数组长度

对象头具体包括什么

  1. 锁定信息, 表示该对象是否被 synchronize 锁定
  2. 分代的年龄
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值