java-面试

假如提供一个闹钟服务,订阅这个服务的人特别多,10亿人,怎么优化?

答:分而治之

如何打破双亲委派?

答:重写loadClass();

何时打破过双亲委派?

  1. JDK1.2之前,自定义ClassLoader都必须重写loadClass();
  2. ThreadContextClassLoad可以实现基础类调用实现类代码,通过thread.setContextClassLoad指定
  3. 热启动,热部署
    1. osgi tomcat 都有自己的模块指定classloader

对象内存布局(64位)

  1. 解释一下对象的创建过程
    1. Class loading
    2. Class linking(verification,preparation(静态变量默认值),resolution)
    3. Class initializing (静态变量设置初始值,执行static语句块)
    4. 申请对象内存
    5. 成员变量赋默认值
    6. 调用构造方法
      1. 成员变量顺序赋初始值
      2. 执行构造方法语句
  2. 对象在内存中的内存布局
    普通对象
    
    1. 对象头:markword  8
    2. ClassPointer指针(指向T.class,表明属于哪个class):-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的倍数
    
  3. 对象头具体包括什么

    https://blog.csdn.net/zhoufanyang_china/article/details/54601311

  4. 对象怎么定位

    1. 句柄池
    2. 直接指针(hostbot 使用这个)
  5. 对象怎么分配

  6. Object o = new Object(),在内存中占用多少字符

如果G1产生了FGC,你应该做什么?

  1. 扩内存
  2. 提高CPU性能
  3. 降低MixedGC触发的阈值,让MixedGC提早发生(默认是45%)

为什么G1使用SATB?

灰色->白色 引用消失时,如果没有黑色指向白色引用会被push到栈

下次扫描时拿到这个引用,由于有Rset的存在,不需要扫描整个堆去查找指向白色的引用,效率比较高,SATB配合RSet,浑然天成

发表评论

邮箱地址不会被公开。 必填项已用*标注