一、JVM通识

学习JVM的目的

  • 面试重灾区,我们必须搞懂它。
  • 生产过程中,肯定会面临JVM调优相关问题,需要也必须搞懂它。
  • 打基础,想搞懂我们java赖以生存的环境长什么样子,提升对Java知识点的理解。

1.1 程序的执行方式

主要有三种:静态编译执行、动态编译执行和动态解释执行。

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

静态编译执行:C,C++
动态解释执行(看一行翻译一行执行):JVM
动态编译执行(运行中进行编译):JVM

JVM即采用了动态解释又采用了动态编译执行。

1.2. 为什么使用JVM

看下面这个图:

可以看到JVM帮我们屏蔽了操作系统。

C语言是直接编译成机器码,但是编译机器码时需要知道目标操作系统,windows操作系统编译之后的机器码是无法在linux系统上执行

即C语言多次运行不同的操作系统需要多次编译,而java一次编译到处运行,依赖jvm虚拟机,由它屏蔽操作系统的差异

1.3 字节码和机器码的区别

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

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

1.4 JDK、JRE与JVM的关系

JDK包含了JRE,JRE是java程序的运行环境。

JDK:java开发工具包,既包含了JRE,也包含一些编译器等开发工具,例如javac、javap命令
JRE:java程序运行环境
JVM:属于JRE中

1.5 OracleJDK和OpenJDK

1.5.1 查看JDK的版本

通过java -version我们可以查看jdk版本

(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™ 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)

1.5.2 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二进制代码许可协议获得许可。

1.5.3 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是一致的.

1.5.4 Oracle JDK与OpenJDK的区别

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

1.6 JVM和Hotspot的关系

  • JVM是《JVM虚拟机规范》中提出来的规范。
  • Hotspot是使用JVM规范的商用产品,除此之外还有Oracle JRockit、IBM的J9也是JVM产品

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

1.7 JVM和Java的关系

jvm只认识class文件,但不是只有java文件可以编译成class文件!

1.8 JVM的运行模式

JVM有两种运行模式:Server模式与Client模式

两种模式的区别在于:

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

客户端程序用client模式即可

二、JVM架构

JVM架构分为四部分

  • class文件
  • 类加载子系统
  • 运行时数据区
  • 执行引擎

未来也会按照四部分依次讲解。

JVM原理(一)JVM通识、JVM架构相关推荐

  1. 【JVM原理探索,Java组件化架构实践

    for循环和while循环这两条循环语句也是使用类似的方式来实现的,不同的是它们通常还包含一条goto指令,来达到循环的目的. do-while循环不需要任何goto指令因为他们的条件分支位于字节码的 ...

  2. Java工程师必备:JVM原理、内存模型、调优、垃圾回收机制、面试题

    在如今这个时间和知识都是碎片化的时代,C站根据C1-C4认证的成长路径,进行知识细化整理,形成系统化的知识图谱. 通过调研一线互联网大厂的招聘JD,小编对标C站能力认证要求,为大家整理了系列技术干货合 ...

  3. JVM原理、调优、GC

    转自:https://www.jianshu.com/p/63fe09fe1a60 jvm原理 Java虚拟机是整个java平台的基石,是java技术实现硬件无关和操作系统无关的关键环节,是java语 ...

  4. 一文告诉你,为什么要研究JVM原理

    举一个例子,一个车间流水线工人知道怎么把汽车的每一个零部件放在什么位置,从而能够把一个完整的汽车拼装起来,并且能跑起来,但是汽车坏了装配工人不会修啊,不要紧,有专门的维修技术人员!所以就诞生了汽车维修 ...

  5. 面试必问之JVM原理

    1:什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...

  6. jvm原理、启动时间、与编译器操作系统关系

    一.JDK,JRE,JVM区别与联系 JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime ...

  7. Java的jvm原理和常识

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机 ...

  8. 面试必问之JVM原理 1

    1:什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...

  9. Java 虚拟机(JVM)原理介绍

    Java 虚拟机[JVM]原理介绍 1.概述 2.Java类的加载原理机制 2.1 .Java类的加载过程 2.2 .Class loader (类加载器) 2.2.1 类的生命周期 2.2.1.1 ...

最新文章

  1. 上海考研计算机专业院校排名,2018考研:计算机专业全球院校排名公布,上海交通大学竟排第一?...
  2. if xxx.strip()函数的使用
  3. 不同的jar里边相同的包名类名怎么区别导入
  4. Java 的插件框架 PF4J
  5. Beyond Compare注册码
  6. linux 特殊shell变量
  7. 内核中的UDP socket流程(1)
  8. yum安装指定(特定)版本(旧版本)软件包的方法
  9. IoC 之 2.2 IoC 容器基本原理(贰)
  10. 【优化算法】Tent混沌映射的粒子群算法【含Matlab源码 940期】
  11. PMP考试只刷题能否通过呢?
  12. 博凌科技携手中企动力用互联网思维卖乐器
  13. Processing基本函数整理
  14. 光删除微信聊天记录是没用的!通过这招,才能完全清空!
  15. 连续函数的运算与初等函数的连续性——“高等数学”
  16. 【机器学习笔记14】softmax多分类模型【下篇】从零开始自己实现softmax多分类器(含具体代码与示例数据集)
  17. 中国GDG Google I/O之行所见:带回国际创新风采,做中国开发者连接世界的桥梁
  18. win10 sdk各种版本下载地址
  19. (c语言)求一元二次方程的根
  20. 谷粒商城六商品服务三级分类

热门文章

  1. Java压力测试工具--Apache JMeter的安装与使用
  2. Ubuntu9.04--qt4.5透明效果
  3. 有哪些可以直接PS图片的在线工具呀
  4. 入门级显示器推荐,千元以内真的香!
  5. 【c++常见错误01】error C2662: ‘const xxx‘: cannot convert ‘this‘ pointer from ‘xxx‘ to ‘xxx‘
  6. java的四种输入方法,你会几种?
  7. Win10开机按F8进不了安全模式没反应 Win10开机按F8怎么无法进入安全模式
  8. python 内存分析工具_python内存监控工具memory_profiler和guppy的用法详解
  9. 通过OTG接口进入Android系统,Android4.0.3 USB OTG底层插入上报过程分析(1)
  10. Deb包安装如何解决依赖问题