`

【Java 8 GC 调优】引言

    博客分类:
  • Java
 
阅读更多

从小型桌面应用到大型服务器上的Web服务,有大量不同种类的应用程序使用了 Java SE 平台。为了支持多种多样的部署,Hotspot 这个 JVM 提供了多个垃圾收集器(GC),它们被设计成满足不同的需求。这是为了同时满足不同大小应用的重要组成部分。Java SE 会根据应用程序所运行的计算机类别,选择最合适的GC。但这可能并不是对每个应用的最优选择。用户,开发者,以及对性能目标有严格要求或有其它要求的管理员,可能需要显式地选择GC,并调整某些参数,来达到期望的性能水平。此文档提供了帮助执行这些任务的信息。首先,垃圾收集器的一般特性和基本调优选项会在 “Stop-the World” 系列中描述。然后介绍其它GC特点,及选择GC时应考虑的因素。
 

垃圾收集器(GC)是内存管理工具。它通过以下操作来实现自动内存管理:

  • 把对象分配到新生代中,将老对象提升到老年代中。
  • 在并发(并行)标记阶段找到老年代中的存活对象。
    当堆内存使用量超过默认阈值时,Hotspot 会触发标记阶段。
    Concurrent Mark Sweep (CMS)》、《Garbage-First (G1)
  • 通过并行复杂活动对象,使它们更紧凑,来恢复可用内存。
    并行GC》、《Garbage-First (G1)

什么时候 GC 的选择会很重要?对某些应用来说,永远都不重要。也就是说,在 GC 所引发暂停的频率和持续时间适中的情况下,这些应用也能良好地运行。但是大量的应用并不是这种情况,尤其是那些有大量数据(几个GB)、很多线程、事务处理频度高的应用。
 

阿姆达尔定律:对于给定的问题,并行处理它的加速效果受限于问题中必须串行处理的部分。 这个定律意味着决大多数工作不能被完全并行化;总有某些部分是串行,无法从并行化中获益。这对于Java平台同样适用。尤其是 Java 1.4 之前的Oracle Java平台不支持并行GC,所以GC在多处理器系统中的影响会比其它并行应用更大。
 

下图“比较垃圾收集所花费时间的百分比”对一个理想的系统进行建模。除GC外,该系统拥有完美的扩展性。

  • 红线表示此应用在单处理器系统中只花费了 1% 的时间用于垃圾收集;在32个处理器的系统中,其吞吐量损失超过 20%。
  • 洋红色的线表示一个应用程序花费了 10% 的时间用于垃圾收集(在单处理器系统中这个耗时并不算多);当扩展到32个处理器时,其吞吐量损失超过 75%。
    (多个处理器必须等待某一个处理器完成串行任务的处理)


 

这表明在开发小型系统时可忽略的速度问题会在扩展到大型系统时成为主要瓶颈。但是在减少这种瓶颈方面的小改进可以获得很大的性能提升。对于足够大的系统,选择一个合适的垃圾收集器,并在必要时对其进行调优是值得的。
 

串行收集器 通常适用于大多数“小型”应用程序(所需堆内存不超过100MB)。其它收集器有额外的开销或复杂性,这是特殊处理的代价。如果应用程序不需要其它收集器的特殊处理,请使用串行收集器。对于一个运行在多处理器上且使用了大量内存的大型多线程应用程序来说,串行收集器不是最佳选择。当应用程序运行在服务器类的机器上时,(Hotspot)默认使用并行收集器。
Ergonomics
 

此文档基于 Solaris 操作系统(SPARC平台板)上的 Java SE 8 编写。但是此文档中的概念与建议适用于所有支持的平台,包括 Linux、Microsoft Windows、x64平台版的Solaris、OS X。而且提及的命令行选项可在所有这些平台中使用,尽管某些选项的默认值在不同平台上可能不同。

 

  • 大小: 10.3 KB
分享到:
评论

相关推荐

    Java-JVM调优总结

    ### Java-JVM调优总结 #### 一、引言 在现代软件开发中,Java 作为一种广泛使用的编程语言,其应用程序的性能优化至关重要。而 JVM(Java Virtual Machine)作为 Java 程序运行的基础环境,对其进行合理的调优可以...

    Java性能调优

    垃圾回收(GC)是JVM中最消耗资源的过程之一,因此对其进行调优可以显著改善Java应用程序的性能。主要的调优目标有两个: 1. **最小化GC暂停时间**:GC操作会导致整个JVM暂停,这在实时系统中是不可接受的。通过...

    java性能调优

    ### Java性能调优详解 #### 一、引言 在软件开发过程中,性能问题往往成为影响用户体验的关键因素之一。尤其对于使用Java语言构建的应用程序来说,由于其运行于JVM之上,性能调优显得尤为重要。本文将从编写高性能...

    JVM调优总结PDF,带原理图

    #### 一、引言 随着软件系统的复杂度不断提高,性能优化成为了软件开发中的一个重要环节。对于Java应用程序来说,Java虚拟机(JVM)的性能直接影响着应用的整体表现。垃圾回收(GC)作为JVM的重要组成部分,其效率直接...

    weblogic jvm调优

    特别是在面对复杂的企业级应用时,合理地进行JVM(Java虚拟机)调优能够显著提升系统的稳定性和响应速度。本文将基于给出的文件信息,深入探讨如何通过JVM来查找WebLogic中的内存泄露问题,并提供一系列有效的解决...

    java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优

    ### Java虚拟机(JVM)内存设置与调优详解 #### 引言 在现代软件开发中,Java虚拟机(JVM)作为执行Java字节码的核心组件,其性能直接影响到Java应用的运行效率与稳定性。特别是在大数据处理场景下,合理设置JVM内存...

    Spark性能调优

    #### 一、引言 随着大数据技术的发展,Apache Spark作为一款通用的大数据分析引擎,因其高效的数据处理能力而受到广泛青睐。然而,在实际应用中,为了充分发挥Spark的优势,对其进行合理的性能调优是至关重要的。...

    Java performance tuning - getting started

    ### Java性能调优入门 #### 引言 本文档旨在为读者提供一系列有用的起步方法,以解决与Java相关的性能问题,并帮助用户针对HP-UX环境下的Java应用进行性能调优。文档并不涵盖所有细节,而是作为该领域的入门指南。...

    Java performance tunning guide

    ### Java性能调优指南 #### 引言 Java性能调优是提高应用程序运行效率的关键步骤。本指南基于GlassFish应用服务器编写,旨在为广泛的Java应用程序提供优化建议和技术支持。通过细致地调整Java虚拟机(JVM)配置、...

    weblogic 调优

    #### 一、引言 在现代企业的IT环境中,WebLogic服务器作为一款高性能的企业级Java应用服务器,其稳定性和性能至关重要。随着业务量的增长和技术的发展,WebLogic服务器面临着越来越多的挑战,如高并发访问、大数据...

    weblogic 调优文档

    - **PermSize**: 配置永久代内存大小,适用于Java 8及以下版本。 - **XX:MaxPermSize**: 控制最大永久代内存。 - **GC策略**: 选择合适的垃圾回收策略,如CMS或G1。 ##### 2. **调整线程池大小** - 根据应用的...

    Java performance 高清英文版

    8. **系统级性能优化:**这不仅仅是Java代码层面的优化,而是涉及整个系统层面的性能调优。这可能包括数据库优化、网络配置优化、操作系统的参数调整等。 9. **Java性能工具的使用:**掌握各种性能分析和调优工具的...

    Eclipse启动运行速度调优

    永久代主要用于存储类定义和静态数据,在Java 8之前,这是JVM的一个重要组成部分。通过提前告知JVM所需的永久代内存,可以减少启动阶段的垃圾回收事件,从而提升启动速度。 ##### 5. **-XX:CompileThreshold=100** ...

    WebSphere性能调优.pdf

    #### 一、引言 在IT领域中,WebSphere作为一款企业级应用服务器,其稳定性和性能至关重要。尤其是在面对高并发、大数据量的应用场景时,如何有效地优化WebSphere的性能,成为了很多开发人员和技术支持团队关注的...

    深入java虚拟机学习

    性能调优是利用各种工具和技术提高Java应用程序性能的过程。这包括但不限于: - **JVM参数调优**:调整堆大小、GC策略等参数。 - **代码层面优化**:减少不必要的对象创建、优化循环结构等。 - **工具辅助**:使用...

    Java进阶教程解密JVM视频教程

    * 在垃圾回收章节,不仅会介绍垃圾回收算法、分代垃圾回收机制,还会重点介绍 G1 垃圾回收器,辨析 Full GC 发生条件,jdk8以来对垃圾回收的优化,以及垃圾回收的调优法则。 * 在字节码与类加载技术章节,会从一个 ...

    java内存讲解

    本文将详细探讨JVM的垃圾回收机制及其调优方法,深入分析Java内存分配原理,并讨论Java中的内存管理与内存泄露问题。 #### 二、JVM的垃圾回收机制概述 垃圾回收(Garbage Collection, GC)是JVM用于自动回收不再使用...

    毕业设计 计算机专业-Java JAVA公共资源模块的设计与开发(源代码+论文)

    12. **性能优化**:了解JVM内存模型,学习如何进行性能调优,例如通过分析堆内存、CPU使用率和GC行为。 13. **软件架构**:理解MVC(Model-View-Controller)、三层架构或其他架构模式,确保模块间的松耦合。 以上...

    Plumbr Handbook Java Garbage Collection-2015-英文版.pdf

    为了更好地进行垃圾回收调优,手册还介绍了一系列有用的工具和技术,比如JVisualVM、GC日志分析工具等,这些工具可以帮助开发者更高效地识别和解决问题。 ##### 7. 垃圾回收调优:实践案例 最后,通过一系列具体的...

Global site tag (gtag.js) - Google Analytics