一、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. 在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)
  2. tf卡低级格式化_华为授权雷克沙nCARD评测:用了这么多年TF卡,该换换了
  3. 【推荐】最全的积分墙基础知识大全:积分墙渠道运营那些事儿
  4. 大学计算机基础 课程的说课,大学计算机基础资料说课稿.ppt
  5. SQL的3个主要组成
  6. 关于linux防火墙
  7. ZeroC ICE的远程调用框架 ASM与defaultServant,ServantLocator
  8. C语言课设:图书管理系统
  9. 大学生计算机基础第一章试题,2017年大学生计算机基础试题及答案
  10. 基于Java gui的超市管理系统
  11. Windows中USB大容量存储设备无法启动
  12. IT之软件公司组织架构
  13. php include require m.jb51.net,phpmyadmin下载、安装、配置教程
  14. 小程序swiper 自定义样式修改
  15. Nachos指南(一)
  16. java编程企业思想_未央区企业级java编程思想
  17. Centos7.1安装CUDA7.0
  18. 相机内参和相机外参和标定
  19. This application has requested the Runtime to terminate it in an unusual way Please contact the....
  20. 高等数学18讲(19版)7.17

热门文章

  1. 餐饮业数字化转型升级的必要性
  2. 链接href的多重使用
  3. 01背包问题java_01背包问题—Java代码
  4. Android-- 解决移动魔百盒CM201-2监听不到home键
  5. C语言/C++中字符串中英文字母大写转化成小写详细内容
  6. gbdt原文_GBDT多分类示例
  7. 如何查看java项目的路径_java如何获取项目路径?
  8. Python 文件的序列化和反序列化
  9. 写一篇作为软件测试工程师的年度总结,从以下方面进行描述:本年度的工作概况、个人主要存在的问题及解决措施、收获与心得体会、给团队的建议、下一年的目标与规划。...
  10. EasyDarwin 手机直播