美团java面试灵魂9连问

1. 请解释一下对象的创建过程?

这道题主要考验面试者对于对象的半初始化状态的理解。
一个对象的创建主要经历了三个过程

申请空间
构造器
对象T
内存空间半初始化,赋值初始值
将对象原本的值赋给内存空间

第一步:对象t 申请内存空间,将对象实例属性初始化成初始值。
第二步:通过该对象的构造器 将对象原本初始值赋值给内存空间
第三部:将对象t与内存空间建立连接

2.加问DCL要不要加volatile问题?

这道题主要考验面试者对于指令重排的问题
由于第一题中我们得知对象的创建过程,这个过程可能会造成指令重排问题,所以要想完全避免,需要根据你的业务场景判断是否增加 volatile 关键字

3. 对象在内存中的存储布局?

对象在内存中主要有四种类型,markword,classpoint ,instance data, padding

4. 对象头具体包括什么?

markword classpointer
markword 主要包括 hashcode,锁信息,GC信息

5.对象怎么定位?

在这里插入图片描述
句柄(间接方式),直接

6.对象怎么分配?

在这里插入图片描述
第一步:尝试栈上分配,分配成功,对象随栈信息一起pop
第二步:栈上分配失败,看对象占用内存是否大?如果内存过大,直接进入老年代,通过FGC清理。
第三步:内存不大,进入线程本地缓冲区(TLAB),然后进入Eldn(新生代).
第四步:判断GC ,不需要清除进入S1或S2 安全区。经过多次安全区后,进入老年代。需要清除的直接清理。

多少次经过安全区后进入老年代。

可通过jvm参数进行配置。默认 使用 PN+PO是 15次,使用CMS是6次

7.Object o = new Object() 在内存中占用多少字节?

答:压缩不压缩都是16个字节

8. 为什么hotspot不使用c++对象来代表java对象?

答:因为C++对象有一个virtual table 这个是java对象所不需要也没有的。会占用内存。

9.Class对象是在堆还是方法区。

答:C++对象在方法区,Java对象在堆。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值