• Java内存管理


    在介绍三种垃圾收集算法之前,先说下三种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信息输出到单独的文件中.
  • 相关阅读:
    CentOS6.5安装Scrapy
    CentOS6.5安装pip
    CentOS6.5 安装openssl
    curl不能支持https问题
    pip安装时遇到的问题集锦,持续更新!
    CentOS6.5安装python3.7
    IntelliJ IDEA 17 本地LicenseServer激活
    omnidb数据库web管理工具安装
    CentOS7安装Kubernetes1.18.1并使用flannel
    Portainer中文汉化
  • 原文地址:https://www.cnblogs.com/fxust/p/7289970.html
Copyright © 2020-2023  润新知