JVM试用G1的垃圾收集器

因为以前用默认的GC,,老年代经常在占比超过99%才发生一个GC行为,感觉不爽。。。尽管每次FULL GC只要0.5S。

结合上次听中华构架师大会,一哥们分享的G1 GC。。。试试。。

就在TOMCAT的catania.sh里JAVA的启动参数加一段吧。。

JAVA_OPTS=‘ -Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC ‘

JMAP输出如下啦:

jmap -heap xxxx
Attaching to process ID xxx, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.0-b56

using thread-local object allocation.
Garbage-First (G1) GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 1073741824 (1024.0MB)
   NewSize          = 1363144 (1.2999954223632812MB)
   MaxNewSize       = 268435456 (256.0MB)
   OldSize          = 5452592 (5.1999969482421875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 268435456 (256.0MB)
   MaxPermSize      = 268435456 (256.0MB)
   G1HeapRegionSize = 1048576 (1.0MB)

Heap Usage:
G1 Heap:
   regions  = 1024
   capacity = 1073741824 (1024.0MB)
   used     = 525790240 (501.4326477050781MB)
   free     = 547951584 (522.5673522949219MB)
   48.968032002449036% used
G1 Young Generation:
Eden Space:
   regions  = 108
   capacity = 275775488 (263.0MB)
   used     = 113246208 (108.0MB)
   free     = 162529280 (155.0MB)
   41.06463878326996% used
Survivor Space:
   regions  = 6
   capacity = 6291456 (6.0MB)
   used     = 6291456 (6.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:
   regions  = 415
   capacity = 791674880 (755.0MB)
   used     = 406252576 (387.4326477050781MB)
   free     = 385422304 (367.5673522949219MB)
   51.31558247749379% used
Perm Generation:
   capacity = 268435456 (256.0MB)
   used     = 65695576 (62.652183532714844MB)
   free     = 202739880 (193.34781646728516MB)
   24.473509192466736% used

35236 interned Strings occupying 3876240 bytes.

JMAP相关GC输出如下:

jstat -gc xxxx 1000 10
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
 0.0   6144.0  0.0   6144.0 269312.0 81920.0   773120.0   396840.2  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   6144.0  0.0   6144.0 269312.0 100352.0  773120.0   396840.2  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   6144.0  0.0   6144.0 269312.0 120832.0  773120.0   396840.2  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   6144.0  0.0   6144.0 269312.0 139264.0  773120.0   396840.2  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   6144.0  0.0   6144.0 269312.0 176128.0  773120.0   396840.2  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   6144.0  0.0   6144.0 269312.0 193536.0  773120.0   396840.2  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   6144.0  0.0   6144.0 269312.0 211968.0  773120.0   396840.2  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   6144.0  0.0   6144.0 269312.0 229376.0  773120.0   396840.2  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   6144.0  0.0   6144.0 269312.0 243712.0  773120.0   400994.0  262144.0 64155.8   3579   84.690   0      0.000   84.690
 0.0   8192.0  0.0   8192.0 267264.0 44032.0   773120.0   402843.3  262144.0 64155.8   3580   84.719   0      0.000   84.719

ZABBIX的输出图马上由大宝剑变成了蜿行蛇啦。。。

时间: 2024-10-29 15:00:39

JVM试用G1的垃圾收集器的相关文章

Garbage First(G1)垃圾收集器

引言:G1垃圾收集器采用一个略微不同的手段来解决并行.串行以及CMS GC的众多缺陷.对于大的Java堆来说,通过将Java堆拆分成一个个分区,G1会比其他垃圾收集器有更好的综合表现.本文选自<Java性能调优指南>. G1垃圾收集器采用一个略微不同的手段来解决并行.串行以及CMS GC的众多缺陷.G1将堆拆成一系列的分区,这样在一个时间段内,大部分的垃圾收集操作就只是在一个分区内执行,而不是整个堆或整个(老年)代. 在G1里,年轻代就是一系列的内存分区,这意味着不用再要求年轻代是一个连续的内

【深入理解JVM】:HotSpot垃圾收集器

相关概念 并发和并行 这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,它们可以解释如下. 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态. 并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上. Minor GC 和 Full GC 新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以M

JVM之几种垃圾收集器简单介绍

本文中的垃圾收集器研究背景为:HotSpot+JDK1.7 一.垃圾收集器概述 如上图所示,垃圾回收算法一共有7个,3个属于年轻代.三个属于年老代,G1属于横跨年轻代和年老代的算法. JVM会从年轻代和年老代各选出一个算法进行组合,连线表示哪些算法可以组合使用 二.各个垃圾收集器说明 1.Serial(年轻代) 年轻代收集器,可以和Serial Old.CMS组合使用 采用复制算法 使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止 client模式年轻代默认算法 G

G1垃圾收集器入门

G1垃圾收集器概述 一步步介绍G1 G1收集器采用一种不同的方式来分配堆. 下面通过图解的方式一步步地讲述G1系统. 1. G1的堆内存结构 堆内存被划分为固定大小的多个区域. 每个heap区(Region)的大小在JVM启动时就确定了. JVM 通常生成 2000 个左右的heap区, 根据堆内存的总大小,区的size范围允许为 1Mb 到 32Mb. 2. G1 堆空间分配 实际上,这些区域(regions)被映射为逻辑上的 Eden, Survivor, 和 old generation(

G1垃圾收集器和CMS垃圾收集器 (http://mm.fancymore.com/reading/G1-CMS%E5%9E%83%E5%9C%BE%E7%AE%97%E6%B3%95.html#toc_8)

参考来源 JVM 体系架构 堆/栈的内存分配 静态和非静态方法的内存分配 CMS 回收算法 应用场景 CMS 垃圾收集阶段划分(Collection Phases) CMS什么时候启动 CMS缺点 G1收集算法 G1的发展 分代垃圾回收瓶颈 G1使用场景 G1特点 G1堆内存的分配 G1的进程内存占用(Footprint) G1 收集器收集过程 G1命令行参数 记录G1的GC日志 G1性能调优 参考来源 http://blog.csdn.net/renfufei/article/details/

深入理解 Java G1 垃圾收集器--转

原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么?简单的说垃圾回收就是回收内存中不再使用的对象. 垃圾回收的基本步骤 回收的步骤有2步: 查找内存中不再使用的对象 释放

GC入门指南(三)----垃圾收集器类型

这篇文章我们来学习下所有可用的垃圾收集器类型.java目前有四种类型的垃圾收集器: 1.串行垃圾收集器(Serial Garbage Collector): 2.并行垃圾收集器(Parallel Garbage Collector): 3.CMS垃圾收集器(CMS Garbage Collector); 4.G1垃圾收集器(G1 Garbage Collector); 每种类型都有其优点和缺点,最重要的是我们开发者可以通过jvm参数为JVM选择不同的垃圾收集器.每种垃圾收集器关注点都不同,其带来

HotSpot的7种垃圾收集器组合

HotSpot共有7种垃圾收集器,3个新生代垃圾收集器,3个老年代垃圾收集器,以及G1,一共构成7种可供选择的垃圾收集器组合. 新生代与老年代垃圾收集器之间形成6种组合,每个新生代垃圾收集器都对应2种组合. Serial Old(MSC)可以与所有新生代收集器进行组合,共3种组合JVM仅指定新生代垃圾收集器的情况下,默认老年代采用Serial Old垃圾收集器(带压缩):-XX:+UseSerialGCSerial (DefNew) + Serial Old(Serial Mark Sweep

jdk8:垃圾收集器

垃圾收集器是垃圾回收算法(标记-清除算法.复制算法.标记-整理算法)的具体实现,不同商家.不同版本的JVM所提供的垃圾收集器可能会有很在差别.这里写图片描述 图中展示了7种不同分代的收集器: Serial.ParNew.Parallel Scavenge.Serial Old.Parallel Old.CMS.G1: 而它们所处区域,则表明其是属于新生代收集器还是老年代收集器: 新生代收集器:Serial.ParNew.Parallel Scavenge: 老年代收集器:Serial Old.P