1、CMS收集器有什么缺点? 1)CMS收集器对CPU资源非常敏感; 2)CMS收集器无法处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另一次Full GC的产生 3)其采用的标记—清除算***产生空间碎片 2、G1收集器的工作过程是什么样的? 初始标记 并发标记 最终标记 筛选回收 3、CPU时间和墙钟时间的区别是什么? 墙钟时间包括各种非运算的等待耗时,例如等待磁盘IO、等待线程阻塞。 而CPU时间不包括这些耗时,但当系统有多PCU或者多核的话,多线程系统会叠加这些CPU时间。 4、对象在内存的哪些地方分配? 大部分在堆上分配,且主要分配在新生代的Eden区上(但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配); 如果启用了本地线程分配缓冲,将按线程优先在TLAB上分配; 少数情况下也可能会直接分配在老年代中(如大对象)。 备注:对象在内存的分配规则不是百分百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数设置。 5、MinorGC和Full GC有什么不一样吗? 新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以MinorGC非常频繁,一般回收速度也比较快; 老年代GC(Full GC):指发生在老年代的GC,出现了Full GC,经常会伴随至少一次的Minor GC(但非绝对的,在ParallelScavenge收集器的收集策略里就有直接进行Full GC的策略选择过程)。Full GC的速度一般会比Minor GC慢10倍以上。
全部评论
(1) 回帖