你或许也知道,正是JVM( Java Virtusal Machine,Java虚拟机)使得Java成为遵循“一次编写,处处运行”的范例。JVM包括如下核心组件:
堆
栈
持久代及方法区
JIT编译器
代码缓存
堆是你的应用程序代码中new操作符分配内存的地方。栈存储的是你在某个方法作用域内要进行赋值的那些本地变量。有一点需要注意的是,方法作用域内所定义的变量在方法结束后将会被删除。比如说,一个String变量在方法内被赋值了,它的作用域是本地作用域,那么它将会被存储到栈里,而给它所赋的值则是存储在堆中。
持久代空间是用来存储类及方法的数据以及应用程序中定义的静态变量。方法区其实就是持久代空间中的一块区域,它将会存储所有的方法,字段,常量池的详细数据。
JIT编译器和代码缓存密不可分。JVM核心会在运行时将Java字节码解释成汇编代码。这个解释的过程是非常缓慢的,因为每次执行你的应用程序的代码时都需要将字节码转化成机器代码。这就是JIT编译器发挥作用的地方了,它会将方法编译好然后存储到代码缓存中。
JIT编译器会在运行时分析应用程序的代码,来识别出哪些方法可以归类为热方法。在这里热方法意味着代码段会被频繁地访问。JIT编译器给每个方法都分配一个计数器,以便统计它们的使用频率。当计数器达到预定义的阈值时,这个方法会被JIT编译器编译成对应的汇编代码,然后存储到代码缓存中。现在,当JIT需要再调用这些已经被编译好并存储到代码缓存中的方法时,它不用再去解释执行了,而是可以使用代码缓存中已编译好的汇编代码。这能提升你的应用程序的执行效率,因为使用编译好的代码要比运行时去解释要快得多。
当提及JIT编译器时,由于缺少相关的文档,有两个主要的因素我们大多数人可能都不太了解。它们分别是:
Client
Server
默认使用哪个编译器取决于对应程序运行的机器的体系结构以及JVM的版本(32位还是64位的)。我们来看下它们分别有什么作用。
客户端编译器在应用启动的时候就会将你的字节码编译成汇编代码。这间接意味着会增加你的应用程序的启动时间。不过它最大的缺点在于你的代码缓存可能很快就会用光你的内存。很多优化只有当你的程序运行了一段时间才能够进行。不过由于客户端编译器已经占用了代码缓存的空间,你可能没有地方去存储这些优化后的汇编代码了。这就是服务端编译器要胜出的地方。
服务端编译器不像客户端编译器那样,它不会在应用启动的时候就编译代码。它会让应用程序的代码运行一段时间(这也被称为预热阶段),然后它才会开始将字节码编译成汇编代码,最终将它们存储到代码缓存里。
我的下一篇文章将会讨论如何可以将客户端及服务端编译给结合起来,同时还将介绍几个很少用到的JVM参数,但它们对提升应用的性能至关重要。
原创文章转载请注明出处:
http://it.deepinmind.com
英文原文链接
分享到:
相关推荐
jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识...
《深入理解JVM JIT与CHA:实战解析》 在Java世界中,JVM(Java虚拟机)是执行Java代码的核心引擎。它不仅负责类的加载、验证、解析和初始化,还在运行时通过JIT(Just-In-Time)编译器优化性能。本篇将围绕"jvm-jit...
"浅谈 JVM 原理" JVM(Java Virtual Machine)是一种虚拟机,它可以模拟完整的硬件系统功能,运行在一个完全隔离的环境中,提供了一个完整的计算机系统。JVM 可以分为三类:VMWare、Visual Box 和 JVM。其中,...
"深入JVM系列-JIT编译详解1" 在这篇文章中,我们将深入探讨JVM中的JIT编译技术。JIT(Just In Time)编译器是一种即时编译技术,它可以加速Java程序的执行速度。 JIT编译过程 -------- 在执行Java程序时,JVM会将...
Java即时编译器(JIT,Just-In-Time Compiler)是Java虚拟机(JVM)的重要组成部分,它在程序运行期间对热点代码进行编译,从而提高程序的运行效率。前端编译是指将.java源文件编译成.class字节码文件的过程,而JIT...
"jvm视频及笔记"这个资源显然是一份全面学习JVM的材料,结合了视频教程和书面笔记,帮助学习者深入理解JVM的工作原理及其在实际开发中的应用。 JVM的学习可以从以下几个重要的知识点开始: 1. **JVM架构**:JVM...
1. JVM原理:JVM的工作原理涉及类加载器(ClassLoader)、类文件(ClassFile)、内存管理及垃圾收集机制。类加载器负责将.class文件加载到内存中,为程序的运行准备数据结构。内存管理涉及JVM内存区域,包括堆、栈、...
21丨深入JVM即时编译器JIT,优化Java编译.html
标题 "框架->java语言->jvm->os->汇编->硬件" 描述了一条技术学习路径,从上至下深入理解软件开发的核心技术栈。这个路径涵盖了从应用框架到底层硬件的关键环节,让我们逐步解析其中涉及的知识点: 1. **框架**:...
4. 执行引擎:解释器负责逐条解释执行字节码,而即时编译器(JIT)会将热点代码编译成本地机器码,以提高运行效率。 5. 内存管理:JVM的垃圾回收机制自动管理内存,包括对象的分配和回收。常见的垃圾收集算法有标记...
- **动态编译**:现代JVM如HotSpot使用即时编译(JIT)技术,将频繁执行的字节码编译为本地机器代码,提高执行效率。 - **内存管理**:JVM的垃圾回收器自动识别并回收不再使用的对象,释放内存资源。 - **异常...
《JVM和GC详解及调优》是一本深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的专业书籍,对于Java开发者来说,是进阶提升的必备资料。书中详尽地阐述了JVM的工作原理,以及如何进行有效的性能...
同时,作者还配置了 JVM 日志,包括 GC 日志、JIT 编译日志和 Safepoint 日志。然而,在这样做之后,作者的应用出现了奇怪的问题,表现为处于安全点的时间特别长。 作者通过分析 Safepoint 日志和 GC 日志,发现了...
- 类似于HotSpot JVM的即时编译(JIT)技术,将频繁执行的字节码编译成机器码,以提高性能。 - 垃圾收集参数调整,例如设置新生代和老年代的比例,以优化不同应用的内存需求。 - 栈帧优化,如逃逸分析,帮助确定...
在高级篇和优化篇中,虽然没有提供具体的内容,我们可以推断出,高级篇可能包含了对JVM更深层次的探讨,例如JVM内存模型的高级细节、类加载器的深入讨论、即时编译器(JIT)的工作原理等。而优化篇可能会涵盖JVM性能...
这些指令是给JVM解释器或者即时编译器(JIT)使用的低级指令集。在JVM上运行的Java程序会被编译成一系列指令,然后由JVM执行。 从给定文件的【部分内容】可以提炼出以下知识点: 1. JVM指令类型:JVM指令可以分为...
【狂神说JVM探究】是一份集合了多种格式的学习资料,主要涵盖了Java虚拟机(JVM)的基础知识。这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键...
**小菜鸟系列-JVM体系结构** Java虚拟机(JVM)是Java平台的核心组成部分,它为Java程序提供了跨平台的运行环境。理解JVM的体系结构对于优化代码性能、排查故障以及深入理解Java编程至关重要。在本文中,我们将探讨...
2. 字节码执行引擎:JVM通过解释器和即时编译器(JIT)来执行字节码,解释器用于快速启动,JIT则在运行时优化代码性能。 3. 内存模型:JVM内存分为堆、栈、方法区、本地方法栈、程序计数器等几部分。其中,堆是对象...
例如,理解JIT(Just-In-Time)编译器的工作原理,可以知道何时Java代码会被编译为本地机器码,从而提升运行效率。 ### 总结 Java虚拟机作为Java技术的核心,其运行机制和内存管理对于Java开发者至关重要。理解JVM...