码迷,mamicode.com
首页 > 编程语言 > 详细

Java内存管理3-读书笔记

时间:2017-08-05 14:04:49      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:分配   文件   多线程   reads   core   thread   参数   client   公式   

在介绍三种垃圾收集算法之前,先说下三种GC的区别:

MinorGC:年轻代空间回收

MajorGC:老年代空间回收

FullGC:整个堆空间回收

垃圾收集算法分类

1.Serial Collector

  JVM在client模式下的默认GC方式.通过JVM配置参数:-XX:+UseSerialGC指定GC使用该收集算法.我们创建的所有对象都在Eden区创建,如果Eden区空间不足就会触发MinorGC.不过每次MinorGC之前会查看之前每次晋升对象大小是否超过了Old区的剩余空间,如果大于则触发一次FullGC,如果小于,则要看HandlePromotionFailure参数(-XX:-HandlePromotionFailure)的值,如果为true,仅触发MinorGC,否则再触发一次FullGC.

2.Parallel Collector

  Parallel GC根据Minor GC和Full GC的不同,分为三种.

  1)ParNewGC

  通过-XX:UseParNewGC参数指定,它的对象分配和回收策略与Serial Collector类似,只是回收的线程是多线程并行回收.

  2)ParallelGC

  在Server下默认的GC方式,通过-XX:UseParallelGC参数来强制指定,并行回收的线程数可以通过-XX:ParallelGCThreads来制定,这个值有个计算公式,如果CPU和核数小于8,线程数和核数一样,如果大于8,值为 3+(cpu core*5)/8

  3)ParallelOldGC

  通过-XX:UseParallelOldGC参数来强制指定,与上面的类似,并行回收的线程数可以通过-XX:ParallelGCThreads来制定,这个值有个计算公式,如果CPU和核数小于8,线程数和核数一样,如果大于8,值为 3+(cpu core*5)/8

3.CMS Collector

  可以通过-XX:UseConcMarkSweepGC来指定,并发的线程数默认为4(并行GC线程数+3),也可通过ParallelCMSThreads来指定.CMS GC是基于MinorGC和FullGC之间的一种GC,它的触发规则是检查Old区或者Perm区的使用率,当达到一定比例时就触发CMS GC,触发时会回收Old区的内存空间.触发CMSGC回收的只是Old区和Perm区的垃圾对象,在回收时和之前的MinorGC,FullGC基本没有关系.

触发FullGC的两种情况:

A.Eden分配失败,触发MinorGC后分配到To Space,To Space不够再分配到Old区,Old区不够则触发Full GC.

B.当CMS GC正在进行向Old区申请内存失败则会直接触发Full GC.

4.组合使用者三种GC

技术分享

5.三种GC的优缺点

技术分享

 6.GC日志输出参数

  • -verbose:gc,可以辅助输出一些详细的GC信息.
  • -XX:+PrintGCDetails,输出GC的详细信息.
  • -XX:+PrintGCApplicationStoppedTime,输出GC造成应用程序暂停的时间.
  • -XX:+PrintGCDateStamps,GC发生的时间信息.
  • -XX:+PrintHeapAtGC,在GC前后输出堆中各个区域的大小.
  • -Xloggc:[file],将GC信息输出到单独的文件中.

Java内存管理3-读书笔记

标签:分配   文件   多线程   reads   core   thread   参数   client   公式   

原文地址:http://www.cnblogs.com/fxust/p/7289970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!