3, JVM tuning, how to use the work, GC algorithm and recovery strategy which
jvm调优的目的是减少GC的频率和Full GC的次数。
Full GC会对整个堆进行整理,因此要尽量减少Full GC的次数。
导致Full GC的原因,
老年代空间满了,调优时尽量让对象在新生代时被回收、让对象在新生代多存活一段时间和不要创建太大的对象以及数组,避免直接在老年代创建对象。
持久代空间不足,增大持久代空间,避免太多静态对象,控制好新生代和老年代的比例。
System.gc()触发,垃圾回收不要手动触发,尽量依靠jvm自身机制触发。
jvm调优方法和步骤:1、监控GC状态,使用各种jvm工具,分析当前jvm参数设置,并且分析当前堆内存快照h和gc日志。
2、生成堆的dump文件
3、分析dump文件
4、分析结果判断是否需要优化,如果满足下面的指标,则一般不需要进行GC:
Minor GC执行时间不到50ms;
Minor GC执行不频繁,约10秒一次;
Full GC执行时间不到1s;
Full GC执行频率不算频繁,不低于10分钟1次;
5、调整GC类型和GC分配
GC算法:引用计数算法、标记清除算法、复制算法、标记整理算法
GC回收策略:可达性分析法、引用计数法
4, Java thread pool is how to achieve? What few core configuration parameters to create a thread pool is?
6, GC mechanism is what? What is the basic principle is that the garbage collector? Whether memory can be recovered immediately? How to take the initiative of informing the JVM garbage collection?
jvm主要是对堆以及方法区进行垃圾回收
需要进行回收的对象是已经不存活的对象,判断一个对象是否存活有两种办法,一种是引用计数法,另一种是可达性分析法。
GC分为minor GC和full GC
minor GC的触发条件是:Eden区内存满时,触发minor GC
full GC的触发条件:手动条用System.gc时、老年代空间不足时、方法区空间不足时、
通过minor GC进入老年代的对象平均大小大于老年代的可用内存
由Eden区、From Space区向To Space区复制时,对象大于To Space区内存,则把该对象转移到老年代,且老年代的可用内存小于该对象的大小
GC常用的算法:标记-清除法、复制算法、标记整理算法、分代收集算法
垃圾收集器:串行收集器(Serial收集器)、并行收集器(ParNew、Parallel收集器)、CMS收集器、G1收集器
垃圾回收期的基本原理:对于GC而言,当程序员创建对象的时候GC就开始监控这个对象在内存的地址、大小以及使用情况。GC采用有向图的方法记录和管理堆中所有的对象,通过这种方式来确定哪些对象是可达的哪些对象是不可达的,当确定了不可达对象,就将该对象所占用的内存回收。
7, parent class loader delegation model and mechanism?