什么是HotSpot
链接:http://ylround.blog.163.com/blog/static/28669029200792481644637/
没错,Java是解释语言,但并不意味着它一定被解释执行。早期的虚拟机确实一条一条指令解释执行,但人们发现这样效率太低, 不满足各种要求,因此出现了许多其它虚拟机,如JIT的虚拟机。HotSpot也是类似一种虚拟机,自从SUN买下后,已经把它放入JRE 1.3以及后续版本中。
采用HotSpot的Java虚拟机,已经很难说Java是被虚拟机解释执行了,原因是HotSpot实际上是把Java的bytecode编译成Native code, 然后运行。
实际上在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译和Profiling。HotSpot对bytecode的编译,不是在程序运行前预先编译的, 而是在程序运行过程中,动态编译(compile during run-time),英文称Dynamic compilation。其实Just In Time也就是这个意思。
HotSpot是如何动态编译Javad的bytecode呢?它采用的是一种smart的办法。 HotSpot里有一个运行监视器,即Profile Monitor(不知国内如何翻译Profile), 专门监视程序运行中,哪一部分运用频度大, 哪些对性能影响至关重要。
当然Profile Monitor有一些算法,这些算法未必十全十美,但大体是能较好获得相关信息的。对于那些对程序运行效率影响交大的代码,称为热点,即hot spot,HotSpot会把这些部门动态地编译成机器码,Native code,同时也对机器码进行优化(类似C编译器的一些优化),从而而提高运行效率。 而那些较少运行的Code,HotSpot虚拟机就不再浪费时间把它们编译。
总体来看,Java bytecode是以解释方式被load到虚拟机的。但虚拟机的分析器根据一段运行,获知对程序效率影响最大的部分,然后通过动态编译,同时进行优化,编译成机器码,然后为接下来的运行加速。总的来说,HotSpot对bytecode有三层处理:不编译,编译,编译并优化。至于程序哪部分不编译,哪部分编译,哪部分做何种优化,则由Profile Monitor决定。
那么为什么Java采用动态编译器而不是象C++这样采用静态编译器呢?虚拟机提供的跨平台运行条件固然是一方面,动态编译器也在许多方面比静态编译器优越。Profiling就是一个例子。静态编译器通常很难准确预知程序运行过程中究竟什么部分最需要优化。静态编译器虽然可以把Java全部编译成Native Code,但却做不到动态编译器那样的优化。
另一个典型的例子,叫做Method inlining。我们知道无论是在C还是在Java里,函数调用都是很浪费系统时间的,因为有许多进栈出栈操作。因此有一种优化办法,就是把原来的函数调用,通过编译器的编译,改成非函数调用,把函数代码直接嵌到调用出,变成顺序执行。但这一方法在Java/C++这样的面向对象的语言的编译器中,较难很好实现。那些静态编译器,通常可以把private,static等函数进行Method inlining,但由于这些面向对象的语言支持函数重载,支持动态联编(不知道是不是这样
翻译,Overridden, dynamic binding),因此静态编译器并不知道究竟应该把函数的哪个实现给inline了。
HotSpot的动态编译,由于有对函数调用的监视,因此可以准确地知道一些环境下,那些被重载和动态识别的函数可以如何被inline到调用者那里去,因此实际上对于一些Server应用来说,可以大幅度提高效率。
HotSpot实际上有两个版本,一个是Server版,一个是Client版。但它们的结构和本质都是一样的,只是有些地方优化不一样。 了解了这些,就知道,有时候Java的程序甚至能比C程序运行还快。
分享到:
相关推荐
《HotSpot实战》这本书深入探讨了Java开发中的关键组件——HotSpot虚拟机。HotSpot是Oracle JDK和OpenJDK中的默认Java虚拟机,它在Java应用程序的运行时性能优化方面扮演着重要角色。以下是该书可能涵盖的一些核心...
《深入解析Hotspot JVM源码》 Hotspot JVM,全称Hotspot Virtual Machine,是Java开发工具包(JDK)中的关键组成部分,负责运行Java应用程序。它由Oracle公司开发,以其出色的性能优化和动态编译能力而闻名。...
《OpenJDK中的JVM Hotspot实现源码解析》 在Java世界中,JVM(Java Virtual Machine)是运行Java程序的关键组件,它负责将字节码解释执行或即时编译为机器码,使得Java具备跨平台的能力。Hotspot是Oracle JDK和...
深入解析hotspot实战!内容比较翔实、精辟,值得收藏!
本书深入浅出地讲解了 HotSpot 虚拟机的工作原理,将隐藏在它内部的本质内容逐一呈现在读者面前,包 括 OpenJDK 与 HotSpot 项目、编译和调试 HotSpot 的方法、HotSpot 内核结构、Launcher、OOP-Klass 对象表 示系统...
【标题】"hotspot-8.rar" 涉及的核心知识点是HotSpot虚拟机和JVM(Java Virtual Machine)的学习,这是一款由Oracle公司开发的Java虚拟机实现,广泛应用于Java程序的运行与优化。HotSpot是Java平台的重要组成部分,...
《深入剖析JDK8 Hotspot源码》 Hotspot是Oracle JDK中的一个关键组件,它是一款高效的Java虚拟机(JVM)。JDK8u-hotspot源码提供了对Hotspot内部工作原理的深入了解,这对于Java开发者优化性能、调试问题以及理解...
HotSpot实战
### Hotspot与Wattch:综合能量与温度模拟设计概念 #### Hotspot 概述 Hotspot 是一种用于模拟电力能量以及温度感知的综合设计理念。它主要应用于集成电路(IC)和电子系统的设计过程中,帮助工程师预测和分析在...
根据提供的文件信息,“HotSpot实战[完整版][带书签].pdf”这本书主要围绕HotSpot虚拟机进行深入探讨,HotSpot作为Java虚拟机的一种实现,是当前最广泛使用的JVM之一,尤其在企业级应用中占据重要地位。下面将根据...
### Java HotSpot 性能引擎架构相关知识点 #### 一、引言与概览 **Java HotSpot 虚拟机**是 Sun 公司针对 Java 平台设计的一款高性能虚拟机,它作为 Java SE 平台的核心组件,为商业关键型应用提供了强大的支持。...
OpenJDK Hotspot源码是Java开发者深入理解Java虚拟机(JVM)工作原理的关键资源。Hotspot JVM是Oracle公司开发的开源Java虚拟机实现,它以高效的性能优化著称,包括即时编译(JIT)和动态优化。在深入探讨Hotspot...
总的来说,JDK 1.8是一个具有里程碑意义的版本,它的特性如Lambda表达式、Stream API、日期和时间API的改进以及HotSpot虚拟机的优化,都极大地推动了Java语言的发展,提升了开发者的生产力。对于Java开发者来说,...
《HotSpot实战》一书深入探讨了Java Virtual Machine (JVM) 的一个重要实现——HotSpot。HotSpot是Oracle公司开发的高性能JVM,它在Java应用程序的运行时提供了一个优化的平台。本书针对HotSpot JVM的内部工作原理、...
Hotspot源码是Java开发中的重要参考资料,它揭示了Java虚拟机(JVM)的工作原理。Oracle JDK中的Hotspot JVM是Java程序运行的核心,负责字节码解释、编译优化以及垃圾回收等关键任务。Hotspot源码的分析有助于开发者...
HotSpot关联规则算法不仅适用于离散型数据,也能够处理连续型数据,这在很多实际场景中非常有用。 在Java环境下实现HotSpot关联规则,通常会涉及到几个关键步骤和概念: 1. 数据预处理:首先,我们需要对原始数据...
### CentOS 6.5 实现 Hotspot 功能详解 #### 一、背景介绍与目标设定 随着移动设备的普及和互联网应用的广泛需求,热点(Hotspot)功能变得越来越重要。本文将详细介绍如何在CentOS 6.5系统上利用Intel无线网卡实现...
【标题】"hotspot1.7.rar" 是一个包含了Hotspot虚拟机源代码的压缩文件,版本号可能指的是Java 7。Hotspot是Oracle公司开发的一款高性能的Java虚拟机(JVM),它广泛应用于Java应用程序的运行环境中。Hotspot的名字...