Loading...
墨滴

小九九

2021/03/30  阅读:30  主题:橙心

jvm(1)

深入理解jvm(1)

我们使用Java语言编程,但我们有没有想过编写好的程序是怎样运行起来的?我们为什么要装jdk?jvm是什么,为社么经常会听到jvm调优?带着问题,我们就可以去揭开Java虚拟机的神秘面纱,同时更能深刻理解jvm的原理。

什么是Java虚拟机

概念

JVM它是Java Virtual Machine 的缩写,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在真实的计算机上仿真模拟各种计算机功能来实现的。它包括堆、方法区、栈、本地方法栈、程序计算器等部分组成的,其中方法回收堆和方法区是共享区,也就是谁都可以使用,而栈和程序计算器、本地方法栈区是归JVM的。Java能够被称为“一次编译,到处运行”的原因就是Java屏蔽了很多的操作系统平台相关信息,使得Java只需要生成在JVM虚拟机运行的目标代码也就是所说的字节码,就可以在多种平台运行。

图解

为什么需要装JDK

JDK是java软件开发包(Java Development Kit)的简称,要想开发java程序就必须安装JDK。没有JDK的话,无法编译运行Java程序。

javac.exe,用于编译java文件,将java文件编译成class文件

java.exe,用于运行class文件,将class文件运行出结果

同时还需要JRE,即Java的运行环境。JRE中包含Java虚拟机即JVM,Java核心类库和支持文件。不过现在的JDK都帮我们集成了JRE。JDK包含编译器运行器和类库,所以想运行Java程序,必须装JDK。

现阶段比较流行的JDK是Oracle JDK和openJDK。

JVM种类

  • HotSpot VM
    现如今最主流的JVM。Oracle JDK和openJDK里都用的HotSpot VM。当大家说起“Java性能如何如何”、“Java有多少种GC”、“JVM如何调优”云云,经常默认说的就是特指HotSpot VM。可见其“主流性”。 JDK8的HotSpot VM已经是以前的HotSpot VM与JRockit VM的合并版,也就是传说中的“HotRockit”,只是产品里名字还是叫HotSpot VM。 这个合并并不是要把JRockit的部分代码插进HotSpot里,而是把前者一些有价值的功能在后者里重新实现一遍。移除PermGen、Java Flight Recorder、jcmd等都属于合并项目的一部分。

  • J9 VM
    J9是IBM开发的一个高度模块化的JVM。在许多平台上,IBM J9 VM都只能跟IBM产品一起使用。这不是技术限制,而是许可证限制。市场定位与HotSpot接近,服务器端、桌面应用、嵌入式等多用途VM广泛用于IBM的各种Java产品。2017年左右,IBM发布了开源J9VM,命名为openJ9,交给Eclipse基金会管理,也称为Eclipse OpenJ9。J9 VM的性能水平大致跟HotSpot VM是一个档次的。有时HotSpot快些,有时J9快些。不过J9 VM有一些HotSpot VM在JDK8还不支持的功能,最显著的一个就是J9支持AOT编译和更强大的class data sharing。

  • JRockit
    JRockit以前Java SE的主流JVM中还有JRockit,跟HotSpot与J9一起并称三大主流JVM。这三家的性能水平基本都在一个水平上,竞争很激烈。自从Oracle把BEA和Sun都收购了之后,Java SE JVM只能二选一,JRockit就炮灰了。JRockit最后发布的大版本是R28,只到JDK6;原本在开发中的R29及JDK7的对应功能都没来得及完成项目就被终止了。

  • Taobao JVM
    AliJVM团队发布。阿里,国内使用Java最强大的公司,覆盖云计算、金融、物流、电商等众多领域,需要解决高并发、高可用、分布式的复合问题。有大量的开源产品。基于OpenJDK开发了自己的定制版本AlibabaJDK,简称AJDK。是整个阿里Java体系的基石。基于OpenJDK Hotspot VM发布的国内第一个优化、深度定制且开源的高性能服务器版Java虚拟机。

  • Graal VM
    2018年4月,Oracle Labs公开了GraalvM,号称 “Run Programs Faster Anywhere”,勃勃野心。与1995年java的”write once,run anywhere"遥相呼应。GraalVM在HotSpot VM基础上增强而成的跨语言全栈虚拟机,可以作为“任何语言”的运行平台使用。语言包括:Java、Scala、Groovy、Kotlin;C、C++、Javascript、Ruby、Python、R等。支持不同语言中混用对方的接口和对象,支持这些语言使用已经编写好的本地库文件。
    工作原理是将这些语言的源代码或源代码编译后的中间格式,通过解释器转换为能被Graal VM接受的中间表示。Graal VM提供Truffle工具集快速构建面向一种新语言的解释器。在运行时还能进行即时编译优化,获得比原生编译器更优秀的执行效率。
    GraalVM其实更像一个编译器库,有很多不同的用法。其中一种叫作提前编译(ahead-of-time),它可以编译成本地的可执行镜像,而不是在运行时进行just-in-time(JIT)编译。 如果说HotSpot有一天真的被取代,Graalvm希望最大。但是Java的软件生态没有丝毫变化。

小九九

2021/03/30  阅读:30  主题:橙心

作者介绍

小九九