内存管理:
Java的内存管理很大程度就是:堆中对象的管理,也包括对象空间分配和释放。
对象空间的分配:使用new关健字创建对象即可
对象空间的释放:将对象赋值null即可
垃圾回收过程:如何一种垃圾回收算法一般做两种基本事情:
1、发现无用对象
2、回收无用对象占用的内存空间
垃圾回收机制保证可以将“无用的对象”进行回收
无用对象指:没有如何变量引用该对象。
垃圾回收基本算法:引用计数法、引用可达法。
引用计数法:
堆中每个对象都对应一个引用计数器,当有引用对象指向这个对象时,引用对象计数器加1;而当指向该对象的引用失效时(引用变为null),引用计数器减1,最后如果该对象的引用计数器的值为0时,则Java垃圾回收器会认为是无用对象并对其进行回收。优点是:算法简单;缺点:循环引用的无用对象无法被识别。
引用可达法:
程序把所有的引用关系看做一张图,从一个节点GCROOT开始,寻找对应的引用节点,找到这个节点,当所有的引用节点寻完毕之后,剩下的节点则被认为是没有被引用到的节点,即无用节点。
通用的分代垃圾回收机制:
1、堆内存分为三种: 年轻代、老年代、永久代
2、创建的新对象都储存在Edent区;它是储存从未被垃圾会回收的新对象。如Edent区满时会触发一次Minor GC,清理无用对象,将有用对象复制到“Survivorl”和“SURvivor2”区中。
3、Minor GC:专门清理年轻代,它是轻量级的启动快回频繁的去启动;
4、Major GC:专门清理老年代区
5、Full GC:清理年轻代。老年代。永久代区域;成本较高,会对系统性能产生影响。
6、JVM调优和Full GC
在对JVM调优的过程中,很大一部分工作就是对于FullGC的调节。以下原因可能导致Full GC:
i:老年代(Tenured)被写满;
ii:永久代(Perm)被写满;
iii:System。gc()被程序员调用;
iiii:上一次GC之后Heap的各域分配策略动态变化