吞吐量(Throughput)
CPU用于运行用户代码的时间与CPU总消耗时间的比值;
即吞吐量=运行用户代码时间 /(运行用户代码时间+垃圾收集时间);
高吞吐量即减少垃圾收集时间,让用户代码获得更长的运行时间;
垃圾收集器期望的目标(关注点)
- 停顿时间
停顿时间越短就适合需要与用户交互的程序;
良好的响应速度能提升用户体验;- 吞吐量
高吞吐量则可以高效率地利用CPU时间,尽快完成运算的任务;
主要适合在后台计算而不需要太多交互的任务;- 覆盖区(Footprint)
在达到前面两个目标的情况下,尽量减少堆的内存空间;
可以获得更好的空间局部性;
栈帧的大小在什么时候确定的?
程序代码编译时确定
栈帧的大小在什么时候确定的存储了哪些信息?
方法的局部变量表
操作数栈
动态连接
方法返回地址
GC主要回收的内存区域是在哪块?
堆栈、方法区
GCRoot主要包含哪些对象?
1、虚拟机栈中的引用对象
2、方法区中的静态属性引用的对象
3、方法区中的常量引用的对象
4、本地方法栈中JNI(Native方法)的引用对象
哪个垃圾收集器可以同时收集新生代和老年代?
G1
并发垃圾收集和并行垃圾收集的区别?
- 并行(Parallel)
指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态;
如ParNew、Parallel Scavenge、Parallel Old;- 并发(Concurrent)
指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行);
用户程序在继续运行,而垃圾收集程序线程运行于另一个CPU上;
如CMS、G1(也有并行)
可以用于老年代的垃圾收集器
CMS,G1