美文网首页
GC-实战真实的面试题

GC-实战真实的面试题

作者: zzj0990 | 来源:发表于2020-12-30 01:24 被阅读0次

请解释下对象的创建的过程

屏幕快照 2020-12-30 上午12.22.24.png

对象在内存中存储布局

观察虚拟机配置

java -XX:+PrintCommandLineFlags -version

普通对象
  1. 对象头:markword 8
  2. ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节 不开启为8字节
  3. 实例数据
    1. 引用类型:-XX:+UseCompressedOops 为4字节 不开启为8字节
      Oops Ordinary Object Pointers
  4. Padding对齐,8的倍数
数组对象
  1. 对象头:markword 8
  2. ClassPointer指针同上
  3. 数组长度:4字节
  4. 数组数据
  5. 对齐 8的倍数

对象头具体包括什么?

屏幕快照 2020-12-30 上午1.06.26.png

对象怎么定位?

https://blog.csdn.net/clover_lily/article/details/80095580

  1. 句柄池
  2. 直接指针


    屏幕快照 2020-12-30 上午1.16.45.png

对象怎么分配?

屏幕快照 2020-12-30 上午1.20.36.png

Object 0 = new Object()在内存中占用多少字节?(请参考问题2,见上)

import com.mashibing.jvm.agent.ObjectSizeAgent;
    public class T03_SizeOfAnObject {
        public static void main(String[] args) {
            System.out.println(ObjectSizeAgent.sizeOf(new Object())); // 16
            System.out.println(ObjectSizeAgent.sizeOf(new int[] {})); // 16
            System.out.println(ObjectSizeAgent.sizeOf(new P())); // 32
        }
        private static class P {
                            //8 _markword
                            //4 _oop指针
            int id;         //4
            String name;    //4
            int age;        //4
    
            byte b1;        //1
            byte b2;        //1
    
            Object o;       //4
            byte b3;        //1
    
        }
    }
    

————————————————————
坐标帝都,白天上班族,晚上是知识的分享者
如果读完觉得有收获的话,欢迎点赞加关注

相关文章

网友评论

      本文标题:GC-实战真实的面试题

      本文链接:https://www.haomeiwen.com/subject/vwrcoktx.html