JVM介绍

堆内存:JVM运行时数据区域,它为类实例和数组分配的内存。堆可以是固定大小的也可以是可变大小的。其中 Heap = (Old + NEW =(Eden , from, to))

upload successful
程序中运行的各种类实例称之为对象,每个对象都有不同的生命周期,有的存活时间长点,有的存活时间短点。JVM内存机制的设置就是为了要满足这种不同生命周期的对象对内存的需求,并使之能达到最大的性能表现。
JVM为了对各种不同生命周期的对象进行有效管理也划分了各种不同的区域,这就是“代”的概念,分别叫作:“年轻代”、“老年代”、“持久代”

年轻代

年青代由一个Eden Space和两个Survivor Spaces组成,虚拟机初始时分配所有的对象到Eden Space,许多对象也是在这里死去。当它执行一个“minor GC”的时候,虚拟机将从Eden Space中移动一些残余的对象到其中的一个Survivor Spaces中。

Eden Space: 这个内存池在对象初始化时被分配;

Survivor Space: 这个内存池中包含着Eden Space 经过GC之后幸存下来的对象;

新对象在Eden区分配内存,GC时将Eden和有对象的Survivor区(From Space)的所有对象复制到另外一个Survior(To Space),然后清空Eden和原Survior

当一个对象在from和to之间复制次数超过一定阈值(-XX:MaxTenuringThreshold)后,进入到年老代。如果是CMS GC,这个阈值默认为0,也就是经过一次copy后就进入年老代

老年代

虚拟机将在Survivor Spaces中生存足够长时间的对象移动到老年代的Tenured Spaces中。当Tenured Generation被填满,则将执行一个完全GC,这个完全GC非常的慢,因为它要处理所有存活着的对象,用的是串行标记收集的方式,并发收集可以减少对于应用的影响。

JVM垃圾回收

JVM所管理的有限内存也要实现最优化利用,Garbage Collection(GC)就是用来释放没有被引用的对象所占领的内存,目的在于清除不再使用的对象。GC通过算法和参数的配置可以对性能产生效果显著的影响。JVM调优的目的在于如何能是系统表现出更好的响应时间、更大的吞吐量。
MinorCollections(局部垃圾回收):当通用内存消耗完被分配的内存时,JVM会在内存池上执行一个局部的GC(总是调用minor collection)去释放被dead的对象所占用的内存。这个局部的GC通常比完全GC要快许多。青年代中的垃圾回收就是采用局部垃圾回收机制,因此,青年代中内存分配和管理效率也是最高。
通常情况下,对于内存的申请优先在年轻代中申请,当内存不够时会整理年轻代,当整理以后还是不能满足申请的内存,就会向老年代移动一些生命周期较长的对象。这种整理和移动会消耗资源,同时降低系统运行响应能力,因此如果青年代设置的过小,就会频繁的整理和移动,对性能造成影响。那是否把年青代设置的越大越好,其实不然,青年代采用的是复制搜集算法,这种算法必须停止所有应用程序线程,服务器线程切换时间就会成为应用响应的瓶颈。

Major Collections(完全垃圾回收):当老年代需要被回收,这就是一个major collection ,它的运行常常非常慢,因为它要涉及所有存活着的类。

JVM参数

可参考链接地址http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html