1. JVM 对代码执行的两类优化
1.1 运行时优化
主要是针对解释执行和动态编译的一些通用机制的优化。如,锁(包括偏斜锁)和内存分配(如 TLAB)。
还包括一些专门优化解释执行效率的机制。如,模板解释器、内联缓存(优化虚方法调用的动态绑定)。
1.2 JIT优化
JVM根据运行时统计信息(Profile),动态决定部分方法(热点代码)被编译成机器码,直接运行在底层硬件上。
JIT 编译器的技术有 方法计数器、循环展开(Loop unrolling)、方法内联、无效代码消除(Dead Code Elimination)、逃逸分析、分支预测(Branch Prediction)等
这些编译所得的机器码会被暂存于Code Cache。
因为Code Cache容量有限,所以当热点代码不再是热点时,其对应的本地代码会被从Code Cache中移除。这就是 逆优化。
栈上替换技术(OSR,On-Stack Replacement)
针对热点循环代码,如果方法本身的调用频度还未达到编译标准,但是内部有大的循环,那么该方法还是会被判定为有优化价值而被编译。
2. 探查JVM优化的具体情况
针对Java编译期优化,我们可以通过反编译工具查看被优化的细节(如,常量折叠)
针对JVM运行期间的优化,我们一般通过设置启动参数让JVM输出相关日志,或一些专门的监控工具来查看相关细节。(《JVM内存监控与诊断》)
2.1 打印编译发生的细节
-XX:+PrintCompilation
输出更多编译细节:
-XX:UnlockDiagnosticVMOptions -XX:+LogCompilation -XX:LogFile=<your_file_path>
2.2 打印内联发生的细节
-XX:PrintInlining
2.3 查看 Code Cache 的使用情况
JMC、JConsole等工具
3. JVM 代码执行优化的调优角度和手段
3.1 调整热点代码门限值
-XX:CompileThreshold=N
通常是降低该值,以降低预热时间。
server模式默认10000次,client模式默认1500次
此外,JVM 会周期性的对方法计数的数值进行衰减,从而导致某些代码永远都达不到默认的热点代码门限值。所以降低降低该门限值可以让这些代码有机会成为热点。
当然也可以关闭计数衰减 -XX:-UseCounterDecay
3.2 调整 Code Cache 大小
-XX:ReservedCodeCacheSize=<SIZE>
通常是增大其容量,以容纳更多编译后的代码。
调整其初始容量:
-XX:InitialCodeCacheSize=<SIZE>
3.3 调整编译器线程数,或选择适当的编译器模式
JVM的编译器线程数与JVM的模式有关。
相关推荐
在《实战Java虚拟机——JVM故障诊断与性能优化》一书中,作者深入探讨了如何对JVM进行故障排查和性能调优,通过源码分析来帮助读者理解其内部工作原理。下面我们将根据书中的主题,详细阐述相关的知识点。 1. **JVM...
Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行Java程序。在Java 11中,JVM继续提供跨平台的兼容性和高效的运行环境。它将Java源代码编译成字节码,然后在运行时动态地解释或即时编译为机器码,实现了“一...
Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释执行字节码并管理内存。本篇文章将深入探讨JVM的一些常见问题,这些内容对于理解和优化Java应用程序至关重要,同时也是面试中的高频考察点。 一、JVM内存...
标题 "框架->java语言->jvm->os->汇编->硬件" 描述了一条技术学习路径,从上至下深入理解软件开发的核心技术栈。这个路径涵盖了从应用框架到底层硬件的关键环节,让我们逐步解析其中涉及的知识点: 1. **框架**:...
《实战Java虚拟机——JVM故障诊断与性能优化》是一本深入探讨Java开发人员和运维人员必备技能的书籍。本书作者葛一鸣以其丰富的实战经验,详细阐述了JVM(Java Virtual Machine)的工作原理,以及如何有效地进行故障...
《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...
9. **JVM内存管理**:Java虚拟机(JVM)负责垃圾收集和内存管理,理解堆、栈、方法区等内存区域对优化程序性能至关重要。 10. **注解(Annotation)**:注解提供了一种元数据的方式,用于向编译器或JVM提供额外的...
Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行字节码,为Java程序提供跨平台的运行环境。在深入理解JVM内核的运行机制时,我们需要关注以下几个关键点: 1. **类加载机制**:JVM通过类加载器将类文件加载...
《实战JAVA虚拟机 JVM故障诊断与性能优化》是一本深度剖析Java虚拟机(JVM)的实战型书籍,旨在帮助读者理解JVM的工作原理,掌握JVM的故障诊断技巧,以及进行有效的性能优化。在Java开发中,JVM扮演着至关重要的角色...
《实战JAVA虚拟机 JVM故障诊断与性能优化》是一本深度探讨Java虚拟机(JVM)的专著,旨在帮助开发者解决实际工作中遇到的JVM相关问题,提升系统的性能表现。通过对JVM内部机制的深入理解,我们可以更有效地调试、...
在JVM性能方面,JEP 330(String in Switch)改进了`switch`语句的行为,允许直接比较字符串,提高了代码的简洁性和执行效率。此外,JEP 323( Flight Recorder)提供了一套低开销的事件记录系统,用于收集诊断和...
Java虚拟机(JVM)是Java程序运行的核心,它是一个抽象的计算机系统,负责执行Java字节码。在"【IT十八掌徐培成】Java基础第25天-06.JVM结构1"的课程中,我们将会深入探讨JVM的内部结构,了解它是如何使得Java具有跨...
《实战Java虚拟机 JVM故障诊断与性能优化》是由葛一鸣编著的一本专业书籍,主要探讨了如何在实际工作中解决Java虚拟机(JVM)的相关问题,以及如何进行性能调优。书中涵盖了许多关键的知识点,让我们一一展开讨论。 ...
在Java开发领域,面试往往涉及核心的技术点,包括JVM(Java虚拟机)、Spring框架、分布式系统以及数据库管理。这些都是Java开发者必须掌握的关键知识点,也是面试官常常关注的重点。 首先,我们来深入了解一下JVM。...
Java虚拟机(JVM)内存分配机制和垃圾回收(Garbage Collection, GC)是Java编程中的核心概念,它们直接影响到程序的性能和稳定性。本文主要围绕JVM内存区域的分配策略,尤其是对象在新生代(Young Generation)的...
2. 高性能:GraalVM引入了即时编译器(JIT)和静态编译器(AOT),其中Graal JIT在优化模式下能够生成接近原生代码的性能,显著提升应用程序的运行效率。 3. GraalVM Native Image:这是一个强大的工具,允许开发者...
这个框架的核心在于其对Java类加载机制的深入理解和利用,使得可以在不修改原始代码的情况下,对运行中的程序进行动态拦截和处理。 AOP(Aspect-Oriented Programming)是一种编程范式,它将关注点分离,使得系统中...
JVM(Java虚拟机)是Java语言的核心组成部分,它使得Java程序能够跨平台运行。在本课程"【IT十八掌徐培成】Java基础第26天-03.JVM结构-finalize-gc"中,我们将深入探讨JVM的结构、`finalize`方法以及垃圾收集...
《实战JAVA虚拟机 JVM故障诊断与性能优化》是一本深度探讨Java虚拟机(JVM)的书籍,旨在帮助开发者解决在实际工作中遇到的JVM相关问题,提升系统的性能。这本书提供了丰富的源码实例,让读者能够深入理解JVM的工作...
### JAVA文件编译执行与虚拟机(JVM)介绍 #### 关键知识点概述: ...通过对JAVA文件编译、字节码执行及JVM工作原理的深入了解,JAVA程序员能够更好地掌握JAVA编程的核心技术,并有效地解决实际开发中的问题。