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()相关推荐

  1. 论文阅读(Chenyi Chen——【ACCV2016】R-CNN for Small Object Detection)

    Chenyi Chen--[ACCV2016]R-CNN for Small Object Detection 目录 作者和相关链接 方法概括 创新点和贡献 方法细节 实验结果 总结与收获点 参考文献 ...

  2. 【CVPR2022】Detecting Camouflaged Object in Frequency Domain

    [CVPR2022]Detecting Camouflaged Object in Frequency Domain 论文有一个非官方的实现:https://github.com/VisibleShad ...

  3. 【转】论文阅读(Chenyi Chen——【ACCV2016】R-CNN for Small Object Detection)

    Chenyi Chen--[ACCV2016]R-CNN for Small Object Detection 目录 作者和相关链接 方法概括 创新点和贡献 方法细节 实验结果 总结与收获点 参考文献 ...

  4. 【JVM】浅谈双亲委派和破坏双亲委派

    转载自   [JVM]浅谈双亲委派和破坏双亲委派 一.前言 笔者曾经阅读过周志明的<深入理解Java虚拟机>这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自 ...

  5. 【JVM】最全笔记(黑马+尚硅谷+张龙整合笔记)

    本身整合了如下视频的笔记,并进行了整理:尚硅谷周阳.张龙.黑马程序员 黑马ppt非常好:https://download.csdn.net/download/hancoder/12834607 本文及 ...

  6. 【JVM】对象存活判定算法、GC算法、STW、GC种类详解

    [JVM]对象存活判定算法.GC算法.STW.GC种类详解 文章目录 [JVM]对象存活判定算法.GC算法.STW.GC种类详解 GC主要关注的区域 垃圾标记阶段:对象存活判断 标记阶段:引用计数算法 ...

  7. 【JVM】浅记JVM

    前言 一.参看视频.网站.书籍 差不多是花了一个月看完黑马的视频,然后查看其它的相关的面试题.差不多花费的时间就是一个半月吧. ① 黑马程序员JVM完整教程,Java虚拟机快速入门, 附上黑马视频自带 ...

  8. 【JVM】内存结构(下)

    10. 对象实例化内存布局与访问定位 10.1 对象的实例化 10.1.1 创建对象的方式 10.1.2 创建对象的步骤 public class ObjectTest {public static ...

  9. 【JVM】jvm的双亲委派机制

    双亲委派机制 一.JVM体系结构 二.双亲委派机制的含义 三.双亲委派机制的源代码 四.双亲委派机制的意义 五.示例代码 一.JVM体系结构 我们先在这里放一张 JVM 的体系架构图,方便我们有个总体 ...

最新文章

  1. 刘知远、赵鑫、施柏鑫:AI青年科研人员成长之路
  2. Git常用的基本命令
  3. java 浅拷贝和深拷贝
  4. IntelliJ IDEA for Mac 文件结构侧边窗口/类文件内部结构(File Structure)
  5. 前端学习(1666):前端系列实战课程之仿造qq发送消息思路
  6. js中常见的数据加密与解密的方法
  7. photoshop标尺工具_工具设置:PhotoShop
  8. 红米K40稳定版12.5.3.0 刷面具 magisk一键ROOT教程 附工具
  9. 我的世界服务器交易系统,《我的世界》交易系统介绍 村民交易系统详解
  10. java生成图片,特殊字符显示方框问题解决
  11. 初学SDRAM笔记2--SDRAM的信号线及结构图
  12. ShowWindow 隐藏、显示、最大化、最小化窗口
  13. 《Python从入门到实践》读书笔记——第五章 if语句
  14. WizFi210测试:实现高速“串口转WiFi”
  15. 前端开发之闭包、继承、原型链
  16. 【Android OpenGL开发】OpenGL ES与EGL介绍
  17. Android手机摄像头编程入门
  18. base64字符串和图片相互转换
  19. axure内联框架和动态面板_Axure中动态面板和母版有什么区别
  20. android 4g网络注册不上去,手机的4G网速慢怎么设置?这恐怕不得行噢!

热门文章

  1. VC++游戏编程----游戏画面特效制作1
  2. 每日一课 | 在Python中获取列表的长度和大小
  3. 【自动控制理论(三)】频率特性
  4. 如何学IO流IO流的含义
  5. DirectShow编程
  6. 使用Excel VBA制作成绩统计图----(嵌入模式)
  7. Qt数据库(三)利用QSqlQuery类执行SQL语句(一)
  8. lastb 命令的输出结果中的 ssh:notty 的意思
  9. java中SSM环境搭建
  10. 文本长度过长时隐藏并显示省略号“...”,以及鼠标停留时悬浮显示全部文本(兼容IE)