`
whoisjackychen
  • 浏览: 12285 次
文章分类
社区版块
存档分类
最新评论

[转]Hotspot是什么?

 
阅读更多

 

转自http://xiaomogui.iteye.com/blog/857821

 

1. HotSpot历史

    SUN的JDK版本从1.3.1开始运用HotSpot虚拟机, 2006年底开源,主要使用C++实现,JNI接口部分用C实现。
    HotSpot是较新的Java虚拟机,用来代替JIT(Just in Time),可以大大提高Java运行的性能。 
    Java原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢。而HotSpot将常用的部分代码编译为本地(原生,native)代码,这样显着提高了性能。 
    HotSpot JVM 参数可以分为规则参数(standard options)和非规则参数(non-standard options)。 
    规则参数相对稳定,在JDK未来的版本里不会有太大的改动。 
    非规则参数则有因升级JDK而改动的可能。

    规则和非规则参数这里不做介绍了,网上资料很多。

 

2.HotSpot基础知识

    HotSpot包括一个解释器和两个编译器(client 和 server,二选一的),解释与编译混合执行模式,默认启动解释执行。

    编译器:java源代码被编译器编译成class文件(字节码),java字节码在运行时可以被动态编译(JIT)成本地代码(前提是解释与编译混合执行模式且虚拟机不是刚启动时)。

    解释器: 解释器用来解释class文件(字节码),java是解释语言(书上这么说的)。

    server启动慢,占用内存多,执行效率高,适用于服务器端应用;

    client启动快,占用内存小,执行效率没有server快,默认情况下不进行动态编译,适用于桌面应用程序。

    由-XX:+RewriteFrequentPairs参数控制  client模式默认关闭,server模式默认开启

    在jre安装目录下的lib/i386/jvm.cfg 文件下。

   

   java -version

   Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)

   mixed mode 解释与编译 混合的执行模式 默认使用这种模式

 

   java -Xint -version

   Java HotSpot(TM) Client VM (build 14.3-b01, interpreted mode, sharing)

   interpreted  纯解释模式 禁用JIT编译

 

   java -Xcomp -version

   Java HotSpot(TM) Client VM (build 14.3-b01, compiled mode, sharing)

   compiled  纯编译模式(如果方法无法编译,则回退到解释模式执行无法编译的方法)

   

3.动态编译

      动态编译(compile during run-time),英文称Dynamic compilation;Just In Time也是这个意思。

      HotSpot对bytecode的编译不是在程序运行前编译的,而是在程序运行过程中编译的。
      HotSpot里运行着一个监视器(Profile Monitor),用来监视程序的运行状况。

      java字节码(class文件)是以解释的方式被加载到虚拟机中(默认启动时解释执行)。 程序运行过程中,那一部分运用频率大,那些对程序的性能影响重要。对程序运行效率影响大的代码,称为热点(hotspot),HotSpot会把这些热点动态地编译成机器码(native code),同时对机器码进行优化,从而提高运行效率。对那些较少运行的代码,HotSpot就不会把他们编译。

      HotSpot对字节码有三层处理:不编译(字节码加载到虚拟机中时的状态。也就是当虚拟机执行的时候再编译),编译(把字节码编译成本地代码。虚拟机执行的时候已经编译好了,不要再编译了),编译并优化(不但把字节码编译成本地代码,而且还进行了优化)。

       至于那些程序那些不编译,那些编译,那些优化,则是由监视器(Profile Monitor)决定。

 

4.为什么不静态编译那?

    为什么字节码在装载到虚拟机之前就编译成本地代码那? 

    动态编译器也在许多方面比静态编译器优越。静态编译器通常很难准确预知程序运行过程中究竟什么部分最需要优化。

    函数调用都是很浪费系统时间的,因为有许多进栈出栈操作。因此有一种优化办法,就是把原来的函数调用,通过编译器的编译,改成非函数调用,把函数代码直接嵌到调用出,变成顺序执行。

    面向对象的语言支持多态,静态编译无效确定程序调用哪个方法,因为多态是在程序运行中确定调用哪个方法。

分享到:
评论

相关推荐

    HotSpot实战高清版本

    本书深入浅出地讲解了 HotSpot 虚拟机的工作原理,将隐藏在它内部的本质内容逐一呈现在读者面前,包 括 OpenJDK 与 HotSpot 项目、编译和调试 HotSpot 的方法、HotSpot 内核结构、Launcher、OOP-Klass 对象表 示系统...

    HotSpot实战

    包括OpenJDK与HotSpot项目、编译和调试HotSpot的方法、HotSpot内核结构、Launcher、OOP-Klass对象表示系统、链接、运行时数据区、方法区、常量池和常量池Cache、Perf Data、Crash分析方法、转储分析方法、垃圾收集器...

    Hotspot VM源码

    HotSpot正是目前世界上java虚拟机的最好的实现。 HotSpot的基础代码是许多人辛勤劳动的结晶,这个过程迄今已持续了超过10年的时间(当然时间长并不意味着一定好,一半一半吧)。所以到现在为止,他的体积是很大的。...

    性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt

    性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt性能...

    性能工程师指南:玩转OpenJDK HotSpot垃圾收集器

    Performance Engineering Performance Requirements & Test Plan & Development Performance Analysis

    性能工程师指南:玩转OpenJDK HotSpot垃圾收集器(83页).pdf

    性能工程师指南:玩转OpenJDK HotSpot垃圾收集器(83页).pdf

    hotspot-app:适用于iOS和Android的Helium热点应用

    新的Hotspot应用程序会有什么期望简化版我们听说,现有的应用程序可能会让人不知所措,并造成不必要的压力和“滚动末尾”。 为了解决这个问题,新应用将优先使用综合摘要而不是原始活动供稿,以帮助用户更好地了解...

    Tabs HotSpot-crx插件

    如何使用:1)按Alt + F2)键入您记得从您想要转到的标题或标题的标题或URL的字母3)使用键盘上/向下箭头或鼠标选择从搜索结果中的选项卡,然后按Enter键额外的功能:alt + shift + f - 允许立即切换回您从中移动的...

    hotspot-online

    01.采集数据使用的goruntine默认每10分钟更新一次数据(可通过环境变量HOTSPOT_TIMER_DURATION设置时间,单位分钟。) 使用http模块发送请求获得网页数据, 使用github.com/PuerkitoBio/goquery包html并github....

    java面试题

    65. 什么是java序列化,如何实现java序列化? 48 65.1. java序列化、反序列化 48 65.2. 对象的序列化主要有两种用途: 48 65.3. 对象序列化包括如下步骤: 49 65.4. 对象反序列化的步骤如下: 49 66. 反射机制 49 ...

    yarrow:[yarrow]基于JVMCI的HotSpot VM优化编译器

    我打算为HotSpot VM写一个优化的JIT编译器。 多亏了 JVMCI,我可以使用-XX:+EnableJVMCI -XX:+UseJVMCICompiler -Djvmci.Compiler=yarrow选项在运行时轻松地将编译器插入JVM。 由于JVMCI是一项实验性功能,因此仅将...

    Connectify

    如果以上不能输入,先转到下面的网络设定,然后操作。 3.点Stop Hostspot完成,(以后每次开电脑就会自动开动热点),开启后,点Stop Hotspot可以停止分享。 三、网络设定: 控制面板\网络和 Internet\网络和共享中心...

    Raize Components 6.0 BUG PATCH

    哈哈,有人说了,这算什么问题……这的确是个小小的问题,也许你根本用不上TRzSizePanel组件,也许你用TRzSizePanel组件时HotSpotVisible值设为false,但如果你一旦用到HotSpot,没箭头是真的不爽…… Align值为...

    java源码uml-UML-Parser:将Java源代码转换为UML图的解析器

    HotSpot(TM)64位服务器VM(内部版本25.74b02,混合模式) 2.工具 ● Eclipse IDE:用于编写,编译和测试项目代码。 可以在创建,编译和调试的所有阶段使用Eclipse IDE方便地测试可执行jar文件。 ● Apache Maven:...

    Virtual Router Plus Windows Wifi Hotspot:将任何Windows 7或更高版本的计算机变成Wifi热点-开源

    Virtual Router Plus基于Virtual Router项目,可使用无线托管网络技术将任何Windows 7或更高版本的计算机转换为Wifi热点。

    async-profiler:具有AsyncGetCallTrace + perf_events的Java采样CPU和HEAP分析器

    它具有特定于HotSpot的API,以收集堆栈跟踪并跟踪内存分配。 探查器可与基于HotSpot JVM的OpenJDK,Oracle JDK和其他Java运行时一起使用。 async-profiler可以跟踪以下类型的事件: CPU周期 硬件和软件性能计数器...

    大方法的执行性能与调优过程小记

    例如,把文章所附DEMO的play()方法的内容分别重复拷贝1、2、4、8、16、32次并依次运行,在我的机器(Hotspot_1.6u22/Windows)上得到的play()的执行消耗时间分别是28.43、54.72、106.28、214.41、419.30、1476.40...

    Gtools光学网点设计教程

    GtoolsLGP光学网点设计教程,详细讲解了软件安装、网点分布规则、光学均齐设计、hotspot改善等技术操作问题

    MetaDraw试用版:一款图片浏览、编辑和转换的控件

    对您的应用程序来说,它看起来就像一个标准的picturebox,并对图元文件提供特别的支持,图元文件适合于图形对象的移动和编辑,包括为超图形/热点(HyperGraphic/HotSpot)应用程序中的个别图像做标记的图形格式。...

Global site tag (gtag.js) - Google Analytics