【JVM】Object obj = new Object()
1.请解释一下对象的创建过程
1)申请一块内存,变量值为默认值(半初始化)
2)调用构造方法,变量值进行赋值(初始化)
3)建立关联,指向内存
2.volatile与DCL问题
volatile关键字的作用:1)保证线程的可见性:一个线程的改变,另一个线程很快可以看到;2)禁止指令重新排序:CPU为了提高执行效率,会将指令并发执行,一个指令执行到一半的时候另一个指令开始执行,流水线式不间断,在此过程中就会出现指令重新排序。加了volatile关键字,就不会发生指令重新排序了。
DCL:Double Check Lock,双重检查锁,保证线程安全。1)判断实例是否为空;2)加锁synchronized。
你听说过单例模式吗,单例模式里面有一种叫双重检查的你了解吗,这个单例要不要加volatile?
答:要加的,虽然出现问题的概率很低,但是不加volatile就会出现指令重排序,导致问题发生。
public class Singleton{private volatile static Singleton instance;public static Singleton getInstance(){if(instance==null){synchronized(Singleton.class){if(instance==null)intance = new Singleton();}}}return instance;}public static void main(String[] args){Singleton.getInstance();}
}
3.对象在内存中的存储布局
对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。
4.对象头具体包括什么
存储对象自身的运行时数据,Mark Word:哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等
类型指针klasspointer,对象指向它的类型元数据的指针,Java虚拟机通过这个指针来确定该对象是哪个类的实例。
5.对象怎么定位
间接:使用句柄访问对象。Java堆中划分句柄池,reference存储的是对象的句柄地址,句柄中包含了对象实例数据与类型数据各自具体的地址信息。
直接:通过直接指针访问对象。reference存储的是对象地址,只访问对象本身,不需要间接访问一次的开销。【速度更快】
6.对象怎么分配
栈上==>本地线程==>Eden==>Old
7.Object obj = new Object(); 在内存中占用多少字节
对象头:1)mark word:8 byte;2)klass pointer:4 byte【压缩后 4 byte(默认)、不压缩 8 byte】
实例数据:具体类型占用的字节
对齐填充:保证(对象头+实例数据)byte % 8 = 0,缺多少填多少
最终总字节数为三者之和。
【JVM】Object obj = new Object()相关推荐
- 论文阅读(Chenyi Chen——【ACCV2016】R-CNN for Small Object Detection)
Chenyi Chen--[ACCV2016]R-CNN for Small Object Detection 目录 作者和相关链接 方法概括 创新点和贡献 方法细节 实验结果 总结与收获点 参考文献 ...
- 【CVPR2022】Detecting Camouflaged Object in Frequency Domain
[CVPR2022]Detecting Camouflaged Object in Frequency Domain 论文有一个非官方的实现:https://github.com/VisibleShad ...
- 【转】论文阅读(Chenyi Chen——【ACCV2016】R-CNN for Small Object Detection)
Chenyi Chen--[ACCV2016]R-CNN for Small Object Detection 目录 作者和相关链接 方法概括 创新点和贡献 方法细节 实验结果 总结与收获点 参考文献 ...
- 【JVM】浅谈双亲委派和破坏双亲委派
转载自 [JVM]浅谈双亲委派和破坏双亲委派 一.前言 笔者曾经阅读过周志明的<深入理解Java虚拟机>这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自 ...
- 【JVM】最全笔记(黑马+尚硅谷+张龙整合笔记)
本身整合了如下视频的笔记,并进行了整理:尚硅谷周阳.张龙.黑马程序员 黑马ppt非常好:https://download.csdn.net/download/hancoder/12834607 本文及 ...
- 【JVM】对象存活判定算法、GC算法、STW、GC种类详解
[JVM]对象存活判定算法.GC算法.STW.GC种类详解 文章目录 [JVM]对象存活判定算法.GC算法.STW.GC种类详解 GC主要关注的区域 垃圾标记阶段:对象存活判断 标记阶段:引用计数算法 ...
- 【JVM】浅记JVM
前言 一.参看视频.网站.书籍 差不多是花了一个月看完黑马的视频,然后查看其它的相关的面试题.差不多花费的时间就是一个半月吧. ① 黑马程序员JVM完整教程,Java虚拟机快速入门, 附上黑马视频自带 ...
- 【JVM】内存结构(下)
10. 对象实例化内存布局与访问定位 10.1 对象的实例化 10.1.1 创建对象的方式 10.1.2 创建对象的步骤 public class ObjectTest {public static ...
- 【JVM】jvm的双亲委派机制
双亲委派机制 一.JVM体系结构 二.双亲委派机制的含义 三.双亲委派机制的源代码 四.双亲委派机制的意义 五.示例代码 一.JVM体系结构 我们先在这里放一张 JVM 的体系架构图,方便我们有个总体 ...
最新文章
- 刘知远、赵鑫、施柏鑫:AI青年科研人员成长之路
- Git常用的基本命令
- java 浅拷贝和深拷贝
- IntelliJ IDEA for Mac 文件结构侧边窗口/类文件内部结构(File Structure)
- 前端学习(1666):前端系列实战课程之仿造qq发送消息思路
- js中常见的数据加密与解密的方法
- photoshop标尺工具_工具设置:PhotoShop
- 红米K40稳定版12.5.3.0 刷面具 magisk一键ROOT教程 附工具
- 我的世界服务器交易系统,《我的世界》交易系统介绍 村民交易系统详解
- java生成图片,特殊字符显示方框问题解决
- 初学SDRAM笔记2--SDRAM的信号线及结构图
- ShowWindow 隐藏、显示、最大化、最小化窗口
- 《Python从入门到实践》读书笔记——第五章 if语句
- WizFi210测试:实现高速“串口转WiFi”
- 前端开发之闭包、继承、原型链
- 【Android OpenGL开发】OpenGL ES与EGL介绍
- Android手机摄像头编程入门
- base64字符串和图片相互转换
- axure内联框架和动态面板_Axure中动态面板和母版有什么区别
- android 4g网络注册不上去,手机的4G网速慢怎么设置?这恐怕不得行噢!
热门文章
- VC++游戏编程----游戏画面特效制作1
- 每日一课 | 在Python中获取列表的长度和大小
- 【自动控制理论(三)】频率特性
- 如何学IO流IO流的含义
- DirectShow编程
- 使用Excel VBA制作成绩统计图----(嵌入模式)
- Qt数据库(三)利用QSqlQuery类执行SQL语句(一)
- lastb 命令的输出结果中的 ssh:notty 的意思
- java中SSM环境搭建
- 文本长度过长时隐藏并显示省略号“...”,以及鼠标停留时悬浮显示全部文本(兼容IE)