Java的内存回收
Java的内存回收
Java的引用种类
是否回收一个对象在于,是否有引用对象引用该对象。
只要有引用对象,垃圾回收机制就不会回收它。
强引用;
软引用;当系统内存空间不足时,被回收。
弱引用;不管系统内存是否足够,总会回收该对象所占用内存。
虚引用;
强引用时造成java内存泄漏的主要原因之一。
跟踪,并监控每一个Java对象,当某个对象处于不可达状态时,回收该对象所占用的内存。
清理内存分配,回收过程中产生内存碎片。
窜行回收;不管系统中有多少个cpu,适终用一个cpu来执行垃圾回收。
并行回收;让多个cpu并行回收,效率很高,但复杂度增加。副作用,内存碎片多。
Yong代。
old代。
permanet代,装载class,生成动态代理。
-Xmx;堆内存最大容量
-Xms;堆内存最小容量
-XX:MinHeapFreeRatio = 40 堆内存最小空间百分比
-XX:MaxHeapFreeRatio = 70 对内存最大空间百分比
-XX:NewRatio = 2 Yong/Old内存的比例
-XX:NewSize = 64m Yong代默认容量
-XX:SurvivorRatio = 8;eden/surver
-XX:MaxNewSize = 128m Yong代内存的最大容量
内存管理的技巧
尽量使用直接量
使用StringBuilder,StringBuffer进行字符窜链接
尽早释放元对象的引用
尽量少用静态变量
避免在,循环中创建Java对象。
缓存经常使用的对像,OSCache,Ehcache等缓存
尽量不要使用finallize方法
当用数组时考虑使用SoftReference