G1

G1 垃圾收集器

Java 技术和 JVM 概览


Java

    1995年Sun公司发布了一门编程语言——Java。Java广泛应用与基础软件、游戏以及商业软件中。Java运行在超过8亿5千万的私人设备上,包括移动终端、私人电脑和服务器。
Java是一门面向对象的编程语言,有以下几个特点:

  • 平台独立。Java程序代码被编译为字节码并存储在class文件中,由JVM加载class文件来运行。
  • 面向对象。
  • 自动垃圾收集。在C/C++语言中,开发者既是权利至高无上的上帝,又是最苦逼的奴隶。开发者能够利用指针直接操作内存,但是同时也要记得回收/释放这块内存,否则就会造成内存泄漏。
  • 功能丰富的标准库。

Java 运行环境(Java Runtime Environment)

JRE包含JVM(java虚拟机 Java Virtual Machine )以及java平台核心类库和支持文件。


Java Development kit

Java Development kit(JDK)是用于开发JAVA程序的一系列工具的集合。利用JDK,开发者不仅可以将Java程序编译后放在JVM中运行,也可以将JAVA应用程序打包和发布。

Java Virtual Machine

Java Virtual Machine(Java虚拟机,JVM)是一个抽象的操作系统。JAVA程序运行在JVM中,JVM屏蔽了不同操作系统底层接口的差异性,提供统一的接口和类库给JAVA程序,从而实现了JAVA语言的平台独立特性。
JAVA虚拟机对JAVA编程语言一无所知,它只认识字节码(准确的说,只认识class文件。Class文件中包括Java虚拟机指令,符号表以及其他的辅助信息)。换句话说,完全可以用其他语言来编写程序,只要有一个工具将语言翻译为字节码即可。
JVM拥有非常完善的体系架构,能够让它支持许多强大的基础特性,并实现了高性能和可大规模扩展的能力。以目前主流的JVM——HotSpot来说,
HotSpot中的JIT(Just In Time)编译器在发现某个方法或者代码块调用特别频繁的时候,会将这些代码认定为“热点代码(HotSpot Code)”,为了提高热点代码的运行效率,在运行时,HotSpot虚拟机将这些代码编译为与平台相关的机器码,并进行各个层次的优化,从而极大的提升整个软件的运行效率(据说在某些场景中,优化后的代码块运行速度甚至可以超过C++或者C)。

Slide1.PNG

HotSpot虚拟机的三个关键组件是:

  • Heap(堆),Heap是存放对象和数组的内存区域,它是垃圾收集器的重点回收目标。大多数的优化手段都是调整堆大小以及选择合适的垃圾收集器
  • JIT编译器,负责将机器码转化为操作系统原生指令。
  • Garbage Collector,垃圾收集器,负责回收内存。

性能优化的基本目标

一般来说,优化JAVA程序的目标分为两种:

  • 响应时间
  • 吞吐量

响应时间

响应时间代表应用程序多快能做成响应,例如:

. UI程序对一个事件(如点击一个按钮)的响应速度;
. 网站返回请求网页的速度
. 数据库查询的执行时间

以上这些场景,长时间的等待无疑会导致是不可接受的。

吞吐量

吞吐量代表应用程序在单位时间内处理的任务数量最大值。例如:

. 单位时间内的事务完成数量。
. 一小时内程序处理的任务数。
. 一小时内数据库能完成的查询数量。

在此种场景下,较长的暂停时间是可接受的,重点是要完成更多的任务。


回顾一下JVM GC

GC的作用就是回收内存。优化GC的收集效率,减少内存碎片,减少停顿(STW:Stop The World)是GC开发团队的永恒目标。

串行收集器(Serial 以及 Serial Old)

-XX:+SerialGC

串行收集器采用单线程STW的方式来回收内存空间。
当内存不足的时候,串行GC设置停顿表示,等所有线程都进入安全点后,应用线程全都暂停,GC开始工作,回收并整理空间。
显然,串行收集器非常适合与堆内存不大,单核甚至双核的应用程序中,这样的应用程序往往是客户端程序。

并行收集器(Parallel Scavenge + Parallel Old)

-XX:+UseParallelGC 或者


G1 垃圾收集器

使用方法

-XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=200

其中-XX:+UseG1GC为开启G1垃圾收集器,-Xmx32g 设计堆内存的最大内存为32G,-XX:MaxGCPauseMillis=200设置GC的最大暂停时间为200ms。如果我们需要调优,在内存大小一定的情况下,我们只需要修改最大暂停时间即可。

介绍G1垃圾收集器

The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machines with large memories. It meets garbage collection (GC) pause time goals with a high probability, while achieving high throughput. The G1 garbage collector is fully supported in Oracle JDK 7 update 4 and later releases. The G1 collector is designed for applications that:

  • Can operate concurrently with applications threads like the CMS collector.
  • Compact free space without lengthy GC induced pause times.
  • Need more predictable GC pause durations.
  • Do not want to sacrifice a lot of throughput performance.
  • Do not require a much larger Java heap.

垃圾收集器是个适用于使用多线程,大内存的服务端的垃圾收集器。它大概率降低垃圾收集的暂停时间,从而提升整体吞吐量。如果应用程序具有如下特点,就可以尝试使用G1来优化。

  • 如同CMS垃圾收集器一般,使用多线程回收,回收能够与应用程序的工作线程并发工作(因此看起来并没有stop the world)。
  • 压缩空间,减少内存碎片,并且并未延长GC等待时间。
  • GC等待的时间可预估。
  • 不能牺牲高吞吐量。
  • 不占用太大的堆内存(不明确,不知道官方的“大”是多大)。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容