​​美团追魂七连问

对象的创建过程

美团追魂七连问
美团追魂七连问

  1. 分配内存,默认值是0
  2. 调用构造方法,初始值为8
  3. astore_1 建立关联 t ---->new T()

DCL和volatile问题(禁止指令重排)

美团追魂七连问

对象在内存中的存储布局

美团追魂七连问
对象头包括 markword(8个字节) + class pointer(4个字节),
loss due to the next object alignment 对 齐,目的是成为8个倍数。
美团追魂七连问
美团追魂七连问

对象头具体包括什么?

主要包括锁的信息。synchronized锁定的是一个对象(给对象加锁),而不是锁定代码。
锁升级的过程——new -->偏向锁–>自旋锁–>重量锁。
美团追魂七连问

对象怎么定位(直接 间接)

平常使用的就是直接指针(OpenJDK)。
美团追魂七连问
A a =new A();
a就是引用变量,它指向了一个A对象,也可以说它引用了一个A对象。我们通过操纵这个a来操作A对象。 此时,变量a的值为它所引用对象的地址。

对象怎么分配?

逃逸分析 (栈上分配)

美团追魂七连问

一个Object占多少字节?

美团追魂七连问
new Object()占16个字节,然后o是oops(普通对象指针Ordinary object pointers),占4个字节。
new Object()也不一定是16个字节。
因为使用了-XX:+UseCompressedClassPointers对 对象头 的class pointer进行了压缩,所以是4个字节,如果取消压缩的话就是8个字节(-XX:-UseCompressedClassPointers),也就没有了自动对齐。
那什么情况下不压缩?
4个字节的寻址是 4G。使用压缩指针的话,堆内存超过4G的话,已经访问不到堆内存中的所有对象了。此时压缩自动不起作用。
美团追魂七连问
美团追魂七连问
美团追魂七连问


美团追魂七连问
美团追魂七连问


美团追魂七连问


百度
美团追魂七连问
美团追魂七连问


美团
美团追魂七连问
美团追魂七连问


顺丰
美团追魂七连问

相关文章:

  • 2021-08-09
  • 2021-07-02
  • 2021-11-30
  • 2021-12-04
  • 2021-06-13
  • 2021-04-25
  • 2022-01-10
猜你喜欢
  • 2021-12-07
  • 2022-01-11
  • 2021-09-10
  • 2021-12-05
  • 2021-06-28
  • 2021-08-19
  • 2021-12-02
相关资源
相似解决方案