堆内存和垃圾回收机制
堆内存分为年轻代和老年代,年轻代又分为eden区和survivor区,survivor区由Fromspace和Tospace组成,一般为容量大小为8:1:1
新生成对象首先存放在Eden区,当Eden区满了触发minorGC,存活下来的对象存放于survivor0区,满了再执行minorGC,存活对象移动到survivor1区,经过多次minorGC依旧存活的对象移动到老年代。
老年代存放长期存活的对象,占满时会触发majorGC(清理老年代)和fullGC(清理整个堆空间)
分新生代和老年代的原因:根据对象的存活概率分类,存活时间长的放到老年代,会减少垃圾扫描时间和GC频率,对不同分区运用不同垃圾回收算法。
Survivor区分为两块的原因:解决碎片化
下图为堆内存垃圾回收过程,红色为幸存对象,绿色为剩余空间,黄色标识死亡对象。在垃圾回收后fromspace和tospace调换。
jvm部分参数
-Xms java虚拟机堆区内存初始内存,默认为操作系统可用内存的1/64
-Xmx java虚拟机堆区内存可被分配的最大上线
一般在开发时,两个参数调为一致
-Xmn 新生代内存大小
-XX:PermSize 表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
-XX:MaxPermSize:表示对非堆区分配的内存的最大上限
-Xss 每个线程分配的堆内存
-XX:survovorRatio 年轻代中EDen区与survivor区的比例,默认为8,即8:1:1
-XX:newRatio 年轻代与老年代的比值
-XX: UseparallelGC 使用多线程并行执行年轻代垃圾回收
-XX: UseparallelOldGC 激活老年代并行执行垃圾回收,且激活年轻代并行执行垃圾回收,jvm 多核时使用,优于-XX: UseparallelGC
-XX:parallelGCThreads 可以指定并行垃圾收集的线程数量
-XX:TimeRatio 指定目标应用程序线程的执行时间达到的目标比值
-XX:+UseConcMarkSweepGC 激活CMS收集器
-XX:UseParNewGC 当使用CMS收集器时,该标志激活年轻代使用多线程并行执行垃圾回 收
-XX: +CMSConcurrentMTEnabled 标志激活时,并发的CMS阶段将以多线程执行
-XX: ConcGCThreads 定义并发CMS过程运行时的线程数
堆内存和垃圾回收机制
堆内存分为年轻代和老年代,年轻代又分为eden区和survivor区,survivor区由Fromspace和Tospace组成,一般为容量大小为8:1:1
新生成对象首先存放在Eden区,当Eden区满了触发minorGC,存活下来的对象存放于survivor0区,满了再执行minorGC,存活对象移动到survivor1区,经过多次minorGC依旧存活的对象移动到老年代。
老年代存放长期存活的对象,占满时会触发majorGC(清理老年代)和fullGC(清理整个堆空间)
分新生代和老年代的原因:根据对象的存活概率分类,存活时间长的放到老年代,会减少垃圾扫描时间和GC频率,对不同分区运用不同垃圾回收算法。
Survivor区分为两块的原因:解决碎片化
下图为堆内存垃圾回收过程,红色为幸存对象,绿色为剩余空间,黄色标识死亡对象。在垃圾回收后fromspace和tospace调换。
jvm部分参数
-Xms java虚拟机堆区内存初始内存,默认为操作系统可用内存的1/64
-Xmx java虚拟机堆区内存可被分配的最大上线
一般在开发时,两个参数调为一致
-Xmn 新生代内存大小
-XX:PermSize 表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
-XX:MaxPermSize:表示对非堆区分配的内存的最大上限
-Xss 每个线程分配的堆内存
-XX:survovorRatio 年轻代中EDen区与survivor区的比例,默认为8,即8:1:1
-XX:newRatio 年轻代与老年代的比值
-XX: UseparallelGC 使用多线程并行执行年轻代垃圾回收
-XX: UseparallelOldGC 激活老年代并行执行垃圾回收,且激活年轻代并行执行垃圾回收,jvm 多核时使用,优于-XX: UseparallelGC
-XX:parallelGCThreads 可以指定并行垃圾收集的线程数量
-XX:TimeRatio 指定目标应用程序线程的执行时间达到的目标比值
-XX:+UseConcMarkSweepGC 激活CMS收集器
-XX:UseParNewGC 当使用CMS收集器时,该标志激活年轻代使用多线程并行执行垃圾回 收
-XX: +CMSConcurrentMTEnabled 标志激活时,并发的CMS阶段将以多线程执行
-XX: ConcGCThreads 定义并发CMS过程运行时的线程数