1:大对象可以直接进入old区,多大的对象?大于eden区的剩余空间的对象直接进入old区域。
- -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8
- eden区8M,from和to各1M,old区10M,总共20M的空间
用参数-XX:PretenureSizeThreshold=3145728 控制。
注意:PretenureSizeThreshold参数只对Serial和ParNew两款收集器有效,Parallel Scavenge收集器不认识这个参数,Parallel Scavenge收集器一般并不需要设置。如果遇到必须使用此参数的场合,可以考虑ParNew加CMS的收集器组合。
2:性能优化需要注意的地方:
Finalizers: don;t do it!需要2个gc cicle,gc循环会变慢?在对象销毁的时候,最好用方法
释放资源,如果不可以,用soft reference,最好也别用?否则会导致更多更长时间的垃圾收集暂停。
class ClassWithFinalizer{ protected void finalize(){} } class MyClass extends ClassWithFinalizer { private byte[] buffer = new byte[2014*1024*5]; }
最好写成
Class MyClass { private ClassWithFinalizer classWithFinalizer; private byte[] buffer = new byte[1024*1024*5] }
在此处有好几个性能优化的案例都是由于 Finalizer 方法使用不当导致的很严重的性能问题。
内部类的使用问题,inner class have a implicit reference to the outer class
增长了对象的生命周期,延迟了垃圾回收的时间??
二:Jvm的内存使用
jvm采用分代内存管理,分为
Young Generation --gc比较频繁,采用Copy算法
+Eden
+From Survivor
+To Survivor
Old Generation --gc较少,采用标记 收集 压缩的算法
Permanent Generation,存放方法和常量,如果常量迟无限增大,也会触发垃圾回收,(Full GC)。
由于堆内存是被所有进程共享的,新分配的对象要加锁,如果分配的对象比较小,就先分配到线程自己的缓冲中分配(?待确认),如果在Young Genration中分配的话就分配在eden区,如果Eden区域没有空间了,就gc一次,将存活的对象copy到 From和To中的一个,如果还是空间不足,就再gc一次,将From区域存活的对象copy到 To区域,将其中存活过一定时间的对象copy到Old区,将Eden区域的对象copy到To区域,如此循环,From和To总有一个是空的。
如果Old区域也满了,就会出发Full Gc了。
32bit的cPU 有4g内存给java程序,其中有一个部分被OS和C runtime占用,剩下的部分是userspace
三:内存区域控制常用的参数
-Xmx -- Heap区域的最大值,默认为1G
-Xms --heap区域初始化的时候的大小,默认为系统的1/64,不超过1G。如果当前的空余堆内存比例小于40%(见-XX:MinHeapFreeRatio)系统会将堆内存扩大到最大值。通常-Xmx和-Xms设置为一样的值,免得内存来回变动损耗性能
-XX:PermSize --设置方法区的初始化值,默认为系统的1/64
-XX:MinHeapFreeRatio——设置Heap区域最小空闲值,用于控制何时将堆内存扩大至最大值,通常是40%
-XX:MaxHeapFreeRatio——设置Heap区域最大空闲值,用于控制何时将对内存缩小至初始值,通常是70%
-XX:NewRatio——设置Heap区域中new和old代大小的比例,值就是年轻代内存大小/年老代内存大小。
-XX:SurvivorRatio——设置Survivor区域和Eden区域的比例,值就是Eden区域大小/Survivor区域大小。
引用:
HotSpot VM里Java程序通过JNI调用C函数的流程
Java虚拟机规范
The Law of Leaky Abstractions
Java InstanceOf 的具体实现
http://www.artima.com/insidejvm/ed2/security2.html
阅读OpenJdk代码
语法分析
bison的运算符优先级一例
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩
Bson手册
javascript学习
DLR
https://kenai.com/hg/maxine~maxine/file/213118b238e8/mxmaxine
Davik Internal