假如提供一个闹钟服务,订阅这个服务的人特别多,10亿人,怎么优化?
答:分而治之
如何打破双亲委派?
答:重写loadClass();
何时打破过双亲委派?
- JDK1.2之前,自定义ClassLoader都必须重写loadClass();
- ThreadContextClassLoad可以实现基础类调用实现类代码,通过thread.setContextClassLoad指定
- 热启动,热部署
- osgi tomcat 都有自己的模块指定classloader
对象内存布局(64位)
- 解释一下对象的创建过程
- Class loading
- Class linking(verification,preparation(静态变量默认值),resolution)
- Class initializing (静态变量设置初始值,执行static语句块)
- 申请对象内存
- 成员变量赋默认值
- 调用构造方法
- 成员变量顺序赋初始值
- 执行构造方法语句
- 对象在内存中的内存布局
普通对象 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的倍数
- 对象头具体包括什么
https://blog.csdn.net/zhoufanyang_china/article/details/54601311
-
对象怎么定位
- 句柄池
- 直接指针(hostbot 使用这个)
- 对象怎么分配
-
Object o = new Object(),在内存中占用多少字符
如果G1产生了FGC,你应该做什么?
- 扩内存
- 提高CPU性能
- 降低MixedGC触发的阈值,让MixedGC提早发生(默认是45%)
为什么G1使用SATB?
灰色->白色 引用消失时,如果没有黑色指向白色引用会被push到栈
下次扫描时拿到这个引用,由于有Rset的存在,不需要扫描整个堆去查找指向白色的引用,效率比较高,SATB配合RSet,浑然天成