深入理解JVM原理2—背景和常识

1 程序的执行方式

程序的执行方式主要有三种:

  • 静态编译执行
  • 动态编译执行
  • 动态解释执行

注意:此处所说的编译指的是编译成可让操作系统直接执行的机器码

2 JVM有什么作用

出现JVM一个最主要的原因就是为了跨平台,所以JVM的主要作用是让我们的应用能够跨平台运行,做到一次编译,到处运行,下图展示了是如何通过JVM实现扩平台的:
image.png

根据上图,不同的平台,不同的操作系统有其对应的JVM,各个平台的JVM负责解释同一份java字节码文件,就实现了跨平台。

3 字节码和机器码的区别

  • 机器码
    是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。

  • 字节码
    是一种中间状态(中间码)的二进制代码(文件),需要直译器转译后才能生成机器码。

4 JDK、JRE与JVM的关系

JDK,JRE,JVM之间的关系很简单,就是包含与被包含的关系,可以简单的用下图表示:
image.png

5 OracleJDK和OpenJDK的关系

首先我们看下怎么查询JDK的基本信息以及他属于哪一种JDK呢?

java -version

(1)如果是SUN/OracleJDK, 显示信息为:

[root@localhost ~]# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

说明:
Java HotSpot(TM) 64-Bit Server VM表明, 此JDK的JVM是Oracle的64位HotSpot虚拟机, 运行在Server模式下(虚拟机有Server和Client两种运行模式).Java(TM) SE Runtime Environment (build 1.8.0_162-b12)是Java运行时环境(即JRE)的版本信息

(2)如果OpenJDK, 显示信息为:

[root@localhost ~]# java -version
openjdk version "1.8.0_144"OpenJDK Runtime Environment (build 1.8.0_144-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)

5.1 什么是Open JDK

百度百科上关于OpenJDK的说明:
Sun发布的OpenJDK是一款只能运行在i386和AMD-64机器上的软件。

Java由SUN公司(Sun Microsystems, 发起于美国斯坦福大学, SUN是Stanford University Network的缩写)发明, 2006年SUN公司将Java开源, 此时的JDK即为OpenJDK.

也就是说, OpenJDK是Java SE的开源实现, 它由SUN和Java社区提供支持, 2009年Oracle收购了Sun公司, 自此Java的维护方之一的SUN也变成了Oracle .大多数JDK都是在OpenJDK的基础上编写实现的, 比如IBM J9, Azul Zulu, Azul Zing和Oracle JDK. 几乎现有的所有JDK都派生自OpenJDK, 它们之间不同的是许可证:

  • OpenJDK根据许可证GPL v2发布;
  • Oracle JDK根据Oracle二进制代码许可协议获得许可

5.2 什么是Oracle JDK

Oracle JDK之前被称为SUN JDK, 这是在2009年Oracle收购SUN公司之前, 收购后被命名为Oracle JDK.实际上, Oracle JDK是基于OpenJDK源代码构建的, 因此Oracle JDK和OpenJDK之间没有重大的技术差异.

Oracle的项目发布经理Joe Darcy在OSCON 2011 上对两者关系的介绍也证实了OpenJDK 7和Oracle JDK 7在程序上是非常接近的, 两者共用了大量相同的代码(如下图), 注意: 图中提示了两者共同代码的占比要远高于图形上看到的比例, 所以我们编译的OpenJDK基本上可以认为性能、功能和执行逻辑上都和官方的Oracle JDK是一致的.
image.png

Oracle JDK 与 Open JDK的区别:

  • OpenJDK使用的是开源免费的FreeType, 可以按照GPL v2许可证使用.GPL V2允许在商业上使用;
  • Oracle JDK则采用JRL(Java Research License, Java研究授权协议) 放出.JRL只允许个人研究使用, 要获得Oracle JDK的商业许可证, 需要联系Oracle的销售人员进行购买

6 JVM和Java的关系

image.png

JVM有两种运行模式ServerClient。两种模式的区别在于

  • Client模式启动速度较快,Server模式启动较慢;
  • 但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多。

这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。

7 整个JVM的架构

image.png

https://www.cnblogs.com/yichunguo/p/11849922.html
https://blog.csdn.net/qq_44543508/article/details/102983363

jvm 
更新时间:2020-10-28 09:27:48

本文由 清水河恶霸 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:http://ql.magic-seven.top/2020/09/16/深入理解jvm原理和思想2背景和常识.html
最后更新:2020-10-28 09:27:48

评论

Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×