面试官:new 关键字在 JVM 中是如何执行的?

简介: 问:new 关键字在虚拟机中是怎样的一个过程?JVM 构造对象的步骤都有哪些?

问:new 关键字在虚拟机中是怎样的一个过程?JVM 构造对象的步骤都有哪些?


1、解答

image.png


2、Java对象创建流程

指针碰撞

如果Java堆中的内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边揶动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”(Bump the Pointer)。


空闲列表

如果Java堆中的内存并不是规整的,已使用的内存和空闲的内存相互交错,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称为“空闲列表”(Free List)。


怎么判断Java堆内存是否规整?

Java 堆是否规整由所采用的垃圾收集器是否带有压缩整理功能决定。使用标记整理法比如Serial、 ParNew的收集器时,系统采用的分配算法是指针碰撞, 而使用标记清理法比如CMS的收集器时,则通常采用空闲列表。


怎样保障创建对象时的线程安全性?

问题说明


对象创建在虚拟机中是非常频繁的行为,即使是仅仅修改一个指针所指向的位置,在并发情况下也并不是线程安全的,可能出现正在给对象 A 分配内存,指针还没来得及修改,对象B又同时使用了原来的指针来分配内存的情况。


解决方案


对分配内存空间的动作进行同步处理,虚拟机采用CAS配上失败重试的方式保证更新操作的原子性。

把内存分配的动作按照线程划分在不同的空间之中进行,即每个线程在Java雄中预先分配一小块内存,称为本地线程分配缓冲TLAB(Thread Local Allocation Buffer)。哪个线程要分配内存,就在哪个线程的TLAB上分配,只有TLAB用完并分配新的TLAB时,才需要同步锁定。

来源:https://blog.csdn.net/Shockang/article/details/116724401


相关文章
|
2月前
|
存储 编译器 C#
C#关键字常见面试题
C#关键字常见面试题
|
7月前
|
存储 编译器 C#
C#关键字相关面试题
C#关键字相关面试题
|
8月前
|
存储 监控 算法
阿里面试官,别挂电话,jvm性能调优,我还能说上半小时
性能调优:性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。性能调优基本上按照以下步骤进行:明确优化目标、发现性能瓶颈、性能调优、通过监控及数据统计工具获得数据、确认是否达到目标。
70 0
|
7月前
|
Java 开发者
吊打面试官的16000字JVM专属秘籍,又一个Java面试神器!
前言 吊打面试官的16000字JVM专属秘籍,总共包含三部分的内容,从基础到进阶带大家一步步深入理解JVM! 学完就可以在简历上面直接写上精通JVM!
|
7月前
|
缓存 前端开发 Java
4年开发二面美团最终败给:volatile关键字作用和原理这道面试题
一位6年工作经验的小伙伴,在某里二面的时候被问到“volatile”关键字。然后,就没有然后了… 同样,还有一位4年的小伙伴,去某团面试也被问到“volatile 关键字“。然后,也没有然后了… volatile关键字是Java并发编程中的一个重要的关键字,这个问题确实问得比较底层了。难道大厂现在都这么卷了吗?那今天呢,我给大家分享一下我的理解,希望能够帮助到大家。
44 0
|
8月前
|
前端开发 Java 程序员
阿里p8 面试官狂推的java面试神器!jvm与多线程面试80问!
说在前面的话 网上各种关于Java太卷的说法很对,Java目前是越来越卷了,但“卷”对个人来说也不一定是坏事,我们得搞清楚Java越来越卷的底层逻辑,才能客观看待这个事。
|
8月前
|
Java 关系型数据库 MySQL
阿里面试官(性能优化):描述一下jvm加载class文件的原理机制?
相信很多人对于性能优化都不陌生,为了获得更好的系统性能,或者是为了满足不断增加的业务需求。 都需要用到我们的性能调优。所以性能优化在面试中出现的频率特别高 楼主自认为自己对性能优化相关知识有很多了解,而且因为最近在找工作面试,所以单独复习了很多关于索引的知识。
|
8月前
|
缓存 算法 Oracle
面试官:JVM是如何判定对象已死的?学JVM必会的知识!
作为一名Java程序员,我们每天都在程序里不停地去new对象,但是你知道这些被new出来的对象,最后是怎么被回收的吗?
22221 4
面试官:JVM是如何判定对象已死的?学JVM必会的知识!
|
8月前
|
存储 安全 Java
Java中多线程同步问题、生产者与消费者、守护线程和volatile关键字(附带相关面试题)
1.多线程同步问题(关键字Synchronized),2. Object线程的等待与唤醒方法,3.模拟生产者与消费者,4.守护线程,5.volatile关键字
47 0
|
9月前
|
开发框架 Java Spring
【Java面试】Spring中Autowired和Resource关键字的区别
【Java面试】Spring中Autowired和Resource关键字的区别
89 0