JVM从零开始:Java重要概念与JVM(二)

原文地址:www.sudo.ren/article/81?…前端

Java的体系结构主要由Java编程语言、字节码、Java API 和Java虚拟机相关技术组成。 1.Java语言编写程序; 2.前端编译器(javac)将Java源码编译为字节码文件(*.class); 3.JVM将字节码装载进其内部,而后解释/编译为对应平台上的机器指令。java

Java语言:Java大约定义51个关键字。

Java继承了C语言的语法结构,改编了C++的对象模型。而且Java舍弃了C和C++中不少不安全的语法特性。好比:linux

  • 废弃指针操做;
  • 自动内存管理;
  • 数组边界检查;
  • 类型转换检查;
  • 线程安全机制;
  • 物理环境访问限制。

字节码:

Java源码的编译结果不是本地机器指令,而是字节码,这就很好的解决了程序的安全性,跨平台移植性等问题。咱们能够将编译后的字节码部署到其余装有jre环境下,一样能够正常运行,这就是咱们常常说的“一次编译,到处运行”编程

JavaAPI:

API即为应用程序编程接口,是一些预约义的接口,提供应用程序与开发人员给予软件或硬件的以访问一组例程的能力,而又无需访问源码或理解内部工做机制细节。其中包含了Java的基础类库集合,提供了一套访问主机系统资源的标准方法。windows

Java虚拟机:

JVM是由一组规范所定义出的抽象计算机。负责将字节码装载到其内部,解释/编译为对应平台上的机器指令。咱们接下来要学习的就是HotSpot VM,它是目前市面上高性能虚拟机之一。HotSpot具有热点探测功能,能将一个被频繁嗲用的方法或方法体中有效循环次数较多的代码块标记为“热点代码”,而后经过内嵌的双重JIT(Just In Time Compiler)编译器将字节码直接编译为本地机器指令。HotSpot中编译器和解释器并存,依赖热点探测功能肯定字节码指令经过解释运行,仍是编译运行。数组

编译器/解释器在虚拟机的运行:

虚拟机启动,解释器便开始发挥做用,没必要等编译器所有编译完成再执行,这样能够节省不少编译时间。根据热点探测功能,编译器会将有价值的字节码编译为本地机器指令,以换取更高的程序执行效率。缓存

HotSpot中内嵌2个JIT编译器:

系统与物理硬件自动选择哪一种编译器,开发人员也可手动显示调用编译策略。默认状况下开启分层编译策略,由C1和C2编译器相互协调共同完成编译工做。安全

  • Client Compiler(C1):对字节码进行简单可靠的优化,已达到更快的编译速度;
  • Server Compiler(C2):启动一些编译耗时更长的优化,以获取更好的编译质量;

彻底解释/彻底编译

开发人员能够手动调用HotSpot VM使用彻底编译,仍是彻底解释。jvm

  • 彻底解释:编译器将中止全部的工做,字节码将彻底依赖解释器逐渐解释执行;
  • 彻底编译:解释器仍然会在编译器没法进行的特殊状况下接入执行。

Java技术特性:

  • Java语言无关性:JVM能运行java语言以及其余编程语言编写的应用程序。Java语言自己自己不支持其余语言特性,但JVM支持(只要知足并包含jvm的内部指令集、符号以及其余辅助信息,就是一个有效的字节码文件,能被JVM装载运行)
  • Fork/Join 实现多核并行:(java5之后,java.util.concurrent包下)任务拆分到最小,而后每一个单独被计算运行。(如:Hadoop Map/Reduce)
  • Java7新特性:switch(支持String,二进制),try-with-resources自动管理资源,泛型推断运算符,全新的文件系统NIO2.0、Fork/Join
  • 32位机最大支持4GB内存:Java堆区内存最大分配(windows 1.5G,linux 2~3G)
  • JDK1.6 update14开始:提供指针压缩功能,经过对齐补白等操做将64位指针压缩位32位,改善CPU缓存使用率,提高64位JVM性能将。update14~update22之间,可经过"-XX:+UseCompressedOops" 显示开启指针压缩,update23以后,默认开启。

OpenJDK/Oracle JDK:

  • OpenJDK:
    1.HotSpot用C++,少许C和汇编编写,其余内容都用Java(如基类库);
    2.是Sun/Oracle JDK的开源版本(2009年发行第一个版本);
    3.与Oracle JDK7相比,少许代码采用其余技术替代。
  • Oracle JDK:
    1.HotSpot用C++,少许C和汇编 编写,其余内容都用Java(如基类库);
    2.适合我的开发,不能商用。
  • 市面基于OpenJDK定制的JVM:
    TaoBao JVM:在某一业务方面性能强,但没法通用,严重依赖CPU类型:Intel CPU,编译手段采用IntelC、CPP
    Complier,提高GC性能,使用crc32指令实现JVM intrinsic 下降JNI(jav本地接口)的调用开销。
相关文章
相关标签/搜索