首页 > 其他 > 详细

GC和GC Tuning

时间:2021-02-06 19:06:06      阅读:40      评论:0      收藏:0      [点我收藏+]

GC和GC Tuning

GC的基础知识

1.什么是垃圾

C语言申请内存: malloc free

C++ :new delete

Java : new?

自动内存回收,编程上简单,系统不容易出错;手动释放内存,容易出两种类型的问题:

  1. 忘记回收
  2. 多次回收

2.如何定位垃圾

  1. 引用计数(不能解决循环引用的问题)

  2. root searching

    线程池变量,静态变量,常量池,JNI指针

    which instances are roots :JVM stack,native method stack , run-time constant pool, static references in method area ,clazz

3.常见的垃圾回收算法

  1. Mark-Sweep 位置不连续,产生碎片
  2. Copying 没有碎片,浪费空间
  3. Mark-Compact 标记压缩 效率偏低

4.JVM内存分代模型(用于分代垃圾回收算法)

技术分享图片

  1. 部分垃圾回收器使用的模型
  2. 新生代 + 老年代 + 永久代(1.7)/元数据区(1.8)
    1. 永久代 元数据 -Class
      1. 永久代必须指定大小限制,元数据可以设置,也可以不设置,无上限(受限于物理内存)
      2. 字符串常量 1.7-永久代 1.8-堆
      3. MethodArea是一个逻辑概念 1.7对应永久代,1.8元数据
  3. 新生代=Eden+2个survivor区
    1. YGC回收之后,大多数的对象会被回收,活着的进入survivor0
    2. 再次YGC,活着的对象Eden+s0 -> s1
    3. 再次YGC,活着的Eden+s1 -> s0
    4. 年龄足够-> 老年代(15 cms:6)
    5. s区装不下 -> 老年代
  4. 老年代
    1. 顽固分子
    2. 老年代满了,FGC Full GC
  5. GC Tuning(Generation)
    1. 尽量减少FGC
    2. MinorGC = YGC
    3. MajorGC = FGC

5. 常见的垃圾回收器

技术分享图片

  1. Serial年轻代 串行回收
  2. Paraller Scanvenge 年轻代 并行回收
  3. ParNew 年轻代,配合CMS的并行回收
  4. SerialOld
  5. ParallelOld
  6. ConcurrentMarkSweep 老年代 并发的,垃圾回收和应用程序同时进行,降低了STW的时间(200ms)
  7. G1(10ms)
  8. ZGC (1ms) PK c++
  9. shenandoah
  10. Epsilon

调优调1 2 4 5 ,因为1.8默认的垃圾回收是PS+ParallelOld

6. JVM调优第一步,了解生产环境下的垃圾回收器组合

  • JVM的命令行参数参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

  • JVM参数分类

    标准: -开头,所有的HotSpot都支持

    非标准:-X开头,特定版本的HotSpot支持特定命令

    不稳定:-XX开头,下个版本可能取消

    -XX:+PrintCommandLineFlags 查看程序使用的默认JVM参数

    -XX:+PrintFlagFinal 最终参数值

    -XX:+PrintFlagInitial 默认参数值

GC和GC Tuning

原文:https://www.cnblogs.com/y6ming/p/14382365.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!