转自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.为什么不静态编译那?
为什么字节码在装载到虚拟机之前就编译成本地代码那?
动态编译器也在许多方面比静态编译器优越。静态编译器通常很难准确预知程序运行过程中究竟什么部分最需要优化。
函数调用都是很浪费系统时间的,因为有许多进栈出栈操作。因此有一种优化办法,就是把原来的函数调用,通过编译器的编译,改成非函数调用,把函数代码直接嵌到调用出,变成顺序执行。
面向对象的语言支持多态,静态编译无效确定程序调用哪个方法,因为多态是在程序运行中确定调用哪个方法。
相关推荐
【标题】"jdk-8.0.302.8-hotspot" 是Oracle公司发布的Java Development Kit(JDK)的一个版本,它包含了Java运行时环境(JRE)和用于开发Java应用程序的工具。这个特定的版本是8u302,意味着它是Java 8的更新302版,...
【标题】"hotspot-8.rar" 涉及的核心知识点是HotSpot虚拟机和JVM(Java Virtual Machine)的学习,这是一款由Oracle公司开发的Java虚拟机实现,广泛应用于Java程序的运行与优化。HotSpot是Java平台的重要组成部分,...
本书深入浅出地讲解了 HotSpot 虚拟机的工作原理,将隐藏在它内部的本质内容逐一呈现在读者面前,包 括 OpenJDK 与 HotSpot 项目、编译和调试 HotSpot 的方法、HotSpot 内核结构、Launcher、OOP-Klass 对象表 示系统...
OpenJDK Hotspot源码是Java开发者深入理解Java虚拟机(JVM)工作原理的关键资源。Hotspot JVM是Oracle公司开发的开源Java虚拟机实现,它以高效的性能优化著称,包括即时编译(JIT)和动态优化。在深入探讨Hotspot...
HotSpot关联规则算法不仅适用于离散型数据,也能够处理连续型数据,这在很多实际场景中非常有用。 在Java环境下实现HotSpot关联规则,通常会涉及到几个关键步骤和概念: 1. 数据预处理:首先,我们需要对原始数据...
Hotspot源码是Java开发中的重要参考资料,它揭示了Java虚拟机(JVM)的工作原理。Oracle JDK中的Hotspot JVM是Java程序运行的核心,负责字节码解释、编译优化以及垃圾回收等关键任务。Hotspot源码的分析有助于开发者...
包括OpenJDK与HotSpot项目、编译和调试HotSpot的方法、HotSpot内核结构、Launcher、OOP-Klass对象表示系统、链接、运行时数据区、方法区、常量池和常量池Cache、Perf Data、Crash分析方法、转储分析方法、垃圾收集器...
### 性能工程师指南:玩转OpenJDK HotSpot垃圾收集器 #### 一、性能工程概述 在软件开发过程中,性能工程是一个重要的环节,它不仅涵盖了对软件性能的需求定义与测试计划制定,还包括了软件的开发、实施及后续的...
《深入剖析Hotspot源代码》 Hotspot是Java虚拟机(JVM)的一种实现,由Oracle公司主导开发,是Java平台的核心组成部分。它以其高效、动态优化的能力在Java社区中享有盛誉。Hotspot源代码的分析对于理解JVM的工作...
### CentOS 6.5 实现 Hotspot 功能详解 #### 一、背景介绍与目标设定 随着移动设备的普及和互联网应用的广泛需求,热点(Hotspot)功能变得越来越重要。本文将详细介绍如何在CentOS 6.5系统上利用Intel无线网卡实现...
HotSpot正是目前世界上java虚拟机的最好的实现。 HotSpot的基础代码是许多人辛勤劳动的结晶,这个过程迄今已持续了超过10年的时间(当然时间长并不意味着一定好,一半一半吧)。所以到现在为止,他的体积是很大的。...
《深入解析JDK7:基于C++的底层源码与HotSpot虚拟机剖析》 在IT领域,Java作为一门广泛使用的编程语言,其性能优化和内部机制一直是开发者关注的焦点。JDK7作为Java发展历程中的一个重要版本,引入了许多创新特性,...
性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt性能工程师指南:玩转OpenJDK HotSpot垃圾收集器.ppt性能...
HotSpot运行时系统是Java虚拟机(JVM)的一个实现,专注于提供高性能的Java应用程序执行环境。本节将深入探讨其关键子系统和概念。 首先,我们关注的是**命令行参数处理**。Java HotSpot虚拟机接受多种命令行选项和...
《HotSpot中的偏见锁》 在Java编程语言中,多线程是实现并发执行的重要手段,而锁机制则是确保线程安全的关键组件。HotSpot虚拟机作为Java平台的主流虚拟机之一,提供了多种锁优化策略,其中之一就是“偏见锁”...
本文将深入探讨JDK10的底层实现,特别是C++源码以及HotSpot虚拟机的源码,帮助开发者更好地理解和优化Java应用程序。 首先,让我们了解JDK10的关键特性: 1. **局部变量类型推断(Local-Variable Type Inference,...
"Create WiFi Hotspot.bat" 文件是一个批处理脚本,用于帮助用户在Windows操作系统上快速创建一个无线网络热点。这个脚本通常包含了通过命令行界面(CMD)调用的相关命令,以便将用户的有线或无线网络适配器转换为...
"hllvm.HotSpot 解释器是怎样执行bytecode 的" HotSpot 解释器是 Java 虚拟机(JVM)中的一部分,它负责执行 Java 字节码(bytecode)。在本文中,我们将深入探讨 HotSpot 解释器如何执行 bytecode 的过程。 首先...