学习java必不可少的环节---JVM解析(1)

一、JVM基本常识

1.程序的执行方式

  • 主要为以下三种:静态编译执行、动态编译执行、动态解释执行

2.为什么使用JVM

解释
解释
机器码
机器码
java程序
java字节码
windows Java虚拟机
Linux Java虚拟机
windows操作系统
Linux操作系统
  • 字节码和机器码的区别

    机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是比较难懂,也不好编写,一般人员接触不到
    字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码
    
  • JDK、JRE与JVM的关系
    JDK包含编译器等开发工具和JRE,JRE包含运行类库和JVM

  • OracleJDK 和 OpenJDK 的关系

查看JDK的版本

java -version

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

java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, 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_241-b07)是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)
  • OpenJDK
    (1)OpenJDK的来历
    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二进制代码许可协议获得许可.

(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和OracleJDK 7在程序上是非常接近的, 两者共用了大量相同的代码(如下图), 注意: 图中提示了两者共同代码的占比要远高于图形上看到的比例, 所以我们编译的OpenJDK基本上可以认为性能、功能和执行逻辑上都和官方的Oracle JDK是一致的.
(3)Oracle JDK与OpenJDK的区别

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

JRockit是Oracle的JVM, 从Java SE 7开始, HotSpot和JRockit合并为一个JVM.

  • JVM和Hotspot的关系是什么?

JVM是《JVM虚拟机规范》中提出来的规范
Hotspot是使用JVM规范的商用产品,除此之外还有Oracle JRockit、IBM的J9也是JVM产品
在这里插入图片描述

  • JVM的client运行模式和server运行模式的区别

JVM有两种运行模式Server与Client。
两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行
之后Server模式的程序运行速度比Client要快很多。这是因为Server模式启动的JVM采用的是重量级
的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server
启动慢,但稳定后速度比Client远远要快。

猜你喜欢

转载自blog.csdn.net/qq_44787898/article/details/109051162