G1

2018-06-10  本文已影响0人  夜雨声眠

G1 垃圾收集器

Java 技术和 JVM 概览


Java

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


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虚拟机的三个关键组件是:

性能优化的基本目标

一般来说,优化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来优化。

上一篇 下一篇

猜你喜欢

热点阅读