Java垃圾回收算法

  1. 标记-清除算法
  2. 复制算法
  3. 标记-整理算法
  4. 分代收集算法

Java垃圾收集器

1.Serial收集器
2.ParNew收集器
3.并行收集器
4.SerialOld 收集器
5.Parallel Old收集器
6.CMS收集器
7.G1收集器

JVM参数设置

1.堆内存大小参数

  1. -Xmx:最大堆大小 物理内存的1/4 默认空余堆内存大于70%,JVM较少-Xms限制
  2. -Xms:初始堆大小 物理内存的1/64 默认空余堆内存小于40%,JVM增大直到-Xmx的最大限制
  3. -Xmn:新生代大小 eden+2*survivor空间
  4. -Xss:每个线程的堆栈大小 减小这个值能生成更多的线程
  5. -XX:MaxPermSize 设置老年代最大值 物理内存的1/4

The maximum amount of heap to use. Default is left to JVM default.
export HBASE_HEAPSIZE=1G

指定堆内存大小,一般不超过实际物理内存的1/2

2.CMS相关参数

  1. 1. -XX:+UseConcMarkSweepGC 使用CMS 垃圾收集器
  2. 2.-XX:+UseParNewGC 新生代采用并行GC策略
  3. 3.-XX:CMSFullGCsBeforeCompaction 多少次FullGC后进行内存压缩
  4. 4.-XX:+CMSParallelRemarkEnabled 降低标记停顿
  5. 5.-XX:UseCMSCompactAtFullCollection FullGC的时候,对老年代的压缩
  6. 6.-XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集
  7. 7.-XX:CMSInitiatingOccupancyFraction 使用CMS作为垃圾收集,使用N%后开始
  8. 8.-XX:CMSInitiatingPermOccupancyFraction 设置PermGen使用到达多少比率时触发
  9. 9.-XX:CMSIncrementalMode 设置为增量模式 用于单CPU的情况

在hbase-env.sh文件中设置

  1. # Extra Java runtime options.
  2. # Below are what we set by default. May only work with SUN JVM.
  3. # For more on why as well as other possible settings,
  4. # see http://hbase.apache.org/book.html#performance
  5. export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC"

3.辅助参数

  1. export HBASE_OPTS="$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails
  2. -XX:+PrintGCTimeStamps -Xloggc:${HBASE_HOME}/logs/gc-hbase.log"
  3. -verbose:gc:指定输出虚拟机中的详细信息
  4. -XX:+PrintGCDetails:指定输出格式
  5. -XX:+PrintGCTimeStamps:表示输出GC的时间
  6. -XXloggc:指定GC输出日志的输出路径