JVM之优化(概述)
现代JVM是一个具有灵活适应各种应用能力的软件,尽管很多应用能够在JVM的默认配置下运行良好,但是有些应用还是需要优化JVM配置以达到其性能要求。由于各种各样的应用能够运行在现在JVM上面,所以大量的JVM选项可以配置来提升应用的性能。不幸的是,对一个应用而言优化得很好的JVM配置,对应另外的应用不一定适合。所以,真正理解怎样优化JVM配置是非常有必要的。
在优化JVM之前,你需要先知道怎样测试应用性能、性能需求、测试的基础工具以及用来收集数据的垃圾回收器的命令行选项。
优化的指标
- 可用性
- 易管理性
- 吞吐量
- 延迟和响应时间
- 内存占用
- 启动时间
可用性
可用性是衡量应用处于可用状态的指标。可用性需求表明了当应用的某些组件损坏或者遇到错误的时候,整个应用或应用的其他部分处于可用状态。增强可用性,会降低易管理性。
- 系统中某块业务出问题,不能影响整个系统的使用
- 服务器down掉了,导致系统无法使用
可用性需求例子:“当系统某一部分出现错误的时候,不要让整个应用程序崩溃”。
解决方法:一般用分布式系统解决这个问题,情况1将一个系统部署在多个JVM上,情况2将一个系统拆分成多个业务,分别部署在多个JVM上。
易管理性
易管理性是衡量系统的运行和监控的成本以及配置应用的成本。易管理性的需求表明了这个应用被管理的容易程度。通常来讲,用更少的JVM去运行应用,那么需要付出更小的成本去维护和监控应用。而且更少的JVM应用配置也更加简单,但是这个是建立牺牲应用的可用性上面的。
易管理性需求例子:“由于有限的资源,应用只能部署到尽量少的JVM上面。”
吞吐量
吞吐量是衡量系统在单位时间里面完成的工作数量。吞吐量需求通常忽略延迟或者响应时间。通常情况下,提升吞吐量需要以系统响应变慢和更多内存消耗作为代价。
吞吐量的例子:“这个应用需要每秒完成2500个事务。”
延迟和响应时间
延迟或者响应时间是衡量应用从接收到一个任务到完成这个任务消耗的时间。一个延迟或者响应时间的需求需要忽略吞吐量。通常来讲,提升应用的响 应时间需要以更低吞吐量或提高应用的内容消耗。
延迟或者响应时间的例子:"这个应用会在60毫秒内,执行完成交易操作。"
内存占用
内存占用是衡量应用消耗的内存,这个内存占用是指应用在运行在某一个吞吐量、延迟以及可用性和易管理性指标下的内存消耗,内存占用是通常描述为应用运行的时候Java堆的大小或者总共需要消耗内存。通常情况下,通过增加Java堆的大小以增加应用内存占用可以提升吞吐量或者减少延迟,或者两者兼具。当应用可用的内存减少的时候,吞吐量和延迟通常会受到损失。在给定内存的情况下,应用占用的内存可以限制应用的实例数(这个会影响可用性)。
内存占用的例子:“这个应用会单独运行在一个8G的系统上面或者多出3个应用实例运行在一个24G的应用系统上面。”
启动时间
启动时间是衡量应用初始化的时间(如:eclipse的启动时间)。在Java应用中,大家可能对JVM优化应用的热点需要的时间感兴趣。Java应用初始化需要消耗的时间依赖于很多因素包括单不仅限于需要装载的类的数量、需要初始化的对象数量、并且这些对象怎么初始化,以及HotSpot虚拟器运行环境的选择(client or server,eclipse使用的HotSpot Client,Jboss会使用HotSpot Server,两者在初始化时间上和运行过程中对热点的优化不一样)。
抛开需要加载的类的数量、需要初始化的对象的数量以及对象如何初始化,使用HotSpot client运行环境会获得更快的启动速度,由于他没有做足够的优化,这些优化可以提供更高吞吐量和更低的延迟。相反,HotSpot Server运行环境需要更长的启动时间,由于它需要更好多的获得应用关于Java代码的信息,并且对生成的机器码进行了很高优化。
启动时间需求的例子:“这个应用会再15秒内完成初始化。”
优化步骤
1. 给应用的系统需求定优先级
系统第一步的工作就是确定需求,然后给各项指标定优先级,确定了优先级后就要有所舍弃,因为在提升某项指标,经常是以降低某项指标为代价。
比如说,为了最少的消耗内存,往往需要以延迟或者响应时间作为代价。或者,你想要提升应用的易管理性,你需要降低应用的的可用性的级别,由于可用性的提升是建立在多个JVM上的,多个JVM可用降低一个JVM出错造成整个应用的无法使用的风险。由于有很多的取舍需要做,理解真正性能需求就变得极其重要了,理解需求才能够正确的使用方法。
2. 选择JVM模型
选择部署在多个JVM(分布式系统)上还是单个JVM上,因为这个涉及到可用性、易管理性这个两个指标。
3. 选择JVM的Runtime
HotSpot虚拟器提供了聚焦在更快的启动速度和更小的内存占用的32位的client虚拟器,以及在32位和64位系统中有更高的吞吐量server虚拟器。系统对吞吐量、响应时间以及启动时间的需求决定了对JVM Runtime的选择。
4. 选择垃圾回收器
为了满足系统对内存占用、延迟以及吞吐量的需求,我们按照首先内存占用,其次延迟时间,最后吞吐量的顺序来进行优化。
5. 优化
优化是在不停地测试和调整配置中循环的,需要数次循环以达到性能的需求,另外,也有可能优化了一个点的时候,但是需要回到前面几个步骤重新进行检查。比如,假如你在几次优化垃圾回收器之后,对应用的延迟还是不满意,这个时候就有必要调整JVM的部署模型。另外一种可能是,应用程序有修改或者需要重新设定应用程序的性能需求。
对系统需求进行优先级排序
优化操作的第一步就是对系统层面的需求进行优先级排序。做这个需要把主要的应用负责人叫到一起来商定优先级的排序,并且最终达成一致。这个讨论需要在应用的架构和设计阶段完成,由于这个讨论可以提供非常明确的结论,比如说:什么系统需求是最重要的。
对于应用的负责人来说,系统需求的优先级决定了优化操作。最重要的系统需求促使形成一些基本决定。比如说:可用性比易管理性重要,那么JVM部署模型就会采用部署多个JVM。相反如果易管理性比可用性重要,那么就更加倾向于选择单个JVM的部署模型。
相关推荐
类加载器的主要作用是将编译后的`.class`文件加载到JVM中,使之成为可执行的字节码。这样做的好处在于提高了Java程序的灵活性和安全性,同时也支持动态加载。 **2.2 类加载器的分类** 除了上述提到的三种默认类...
本资源“JVM详细概述与优化大全”深入探讨了JVM的基础知识及其性能优化策略,对于Java开发者来说是一份宝贵的参考资料。 首先,了解JVM的基础知识是必要的。这包括JVM的内存模型、类加载机制、字节码执行引擎等。...
五、JVM优化实践 1. 类加载优化:合理设计类结构,避免过多的类装载。 2. 编程习惯优化:避免大量临时对象,合理使用StringBuilder,减少反射等。 3. 调整JVM参数:例如-Xms、-Xmx设置堆大小,-XX:NewRatio控制...
JVM详解与优化
**JVM与Java概述** Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)在1995年推出。它的设计目标是“一次编写,到处运行”,这得益于Java虚拟机(JVM)的存在。JVM...
一、JVM概述 Java虚拟机是Java应用程序的运行环境,它负责解析字节码并执行程序。JVM的核心功能包括类加载、内存管理、垃圾收集以及线程调度等。理解JVM的工作原理对于提高Java应用的性能至关重要。 二、JVM内存...
一、JVM概述 Java虚拟机是Java平台的核心组成部分,它负责执行字节码,并提供了内存管理、垃圾回收等服务。理解JVM的工作原理对于优化Java应用至关重要。JVM分为几个主要区域,包括堆内存、方法区、栈内存、程序...
JVM性能监控与调优实战课程,作为整篇课程的重中之重,非常值得同学们参考学习。课程前端讲解了JVM的性能监控和调优的概述,对调优的的方法和工具进行讲解学习,让同学们掌握方法,理解知识。课程的中间阶段我们进行...
3. **Java 2 Platform, Standard Edition (J2SE)**:2000年,J2SE发布,引入了更多的JVM优化技术,如JIT编译器的进一步改进和内存管理的优化。 4. **Java 5.0与泛型**:2004年,Java 5.0引入了泛型、枚举、自动装箱...
### 面试必问之JVM与性能优化——关键知识点解析 #### 一、JVM加载Class文件的原理机制 在Java开发过程中,深入理解JVM如何加载Class文件至关重要,尤其是在面试时,这一知识点往往是考察的重点之一。下面将详细...
#### JVM内存模型概述 Java虚拟机的内存主要由以下几个区域构成: 1. **堆内存(Heap)**:这是JVM管理的最大块内存区域,用于存储所有对象实例以及数组。堆内存又分为年轻代(Young Generation)和老年代(Old ...
### Java基础之JVM ...以上概述了JVM的基本概念及其核心组成部分,了解这些内容对于深入学习Java编程语言和提升编程效率至关重要。此外,掌握JVM的工作原理还有助于开发者更好地理解和优化Java应用程序的性能问题。
### 深入JVM内核—原理、诊断与优化 #### 一、JVM基础知识 ##### 1.1 JVM概念 Java虚拟机(Java Virtual Machine,简称JVM)是运行Java字节码的虚拟机环境。它为Java程序提供了一个独立于硬件平台的抽象计算机环境...
Java虚拟机(JVM)是Java程序运行的基础,它负责解释和执行字节码,为开发者提供了跨平台的运行环境。...以上只是JVM与性能优化部分关键知识点的概述,深入学习和实践这些内容,将有助于编写更高效、稳定的Java应用。
### JVM配置与优化详解 #### 一、JVM垃圾回收机制及配置优化 **1.1 垃圾回收机制概述** JVM(Java虚拟机)的垃圾回收机制(Garbage Collection, GC)是自动内存管理的核心部分。它负责识别并回收不再使用的对象所...
1. **JVM指令集概述** JVM指令集是一组二进制指令,每条指令都对应一个特定的操作,如加载、存储、算术运算、控制流等。这些指令由编译器在将源代码编译为字节码时生成。由于JVM是平台无关的,因此指令集设计为与...
1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节码的虚拟机,负责执行Java程序。 - JVM实现了Java的跨平台特性,即“一次编写,到处运行”。 2. **类加载机制**: - 类的生命周期包括...
一、JVM概述 Java虚拟机(JVM)是Java平台的核心,它负责执行字节码,提供了内存管理、类加载、垃圾回收等功能,确保了Java的“一次编写,到处运行”的特性。JVM通过解析.class文件中的字节码,将其转换为机器码,...