认识JVM

搞懂了JVM的一些优化手段,更加知道什么样的代码会被优化

1、什么是JVM

JVM就是java虚拟机,他是java运行的载体

Java和JVM

计算机只识别0和1。
Java是⾼级语⾔。⾼级语⾔编写的程序要想被计算机执⾏,需要变成⼆进制形式的本地机器码。能直接变成机器码的语义是C++,它的缺点是不同操作系统, 需要准备多份。Java需要先变成Java字节码(class⽂件)。然后再变成机器码。
JVM可以实现Java的⼀次编译,到处运⾏
这个就是区别于类似于C语⾔的⽅式

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

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

JDK、JRE和JVM

OracleJDK和OpenJDK

查看JDK版本:java -version
(1)如果是Sun/Oracle JDK显示为:

[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, mixedmode)

说明:
    Java HotSpot™ 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 )

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的基础上编写实现的,比如IBMJ9, AzulZulu,Azul Zing和Oracle JDK.几乎现有的所有JDK都派生自OpenJDK,它们之间不同的是许可证:
    OpenJDK根据许可证GPL v2发布; .
    Oracle JDK根据Oracle二进制代码许可协议获得许可。

Oracle JDK的来历

Oracle JDK之前被称为SUNJDK,这是在2009年Oracle收购SUN公司之前,收购后被命名为Oracle JDK。
    实际上,Oracle JDK是基于OpenJDK源代码构建的,因此Oracle JDK和OpenJDK之间没有重大的技术差异。
    Oracle的项目发布经理Joe Darcy在OSCON 2011.上对两者关系的介绍也证实了OpenJDK 7和Oracle JDK 7在程序上是非常接近的
两者共用了大量相同的代码(如下图)
注意:图中提示了两者共同代码的占比要远高于图形上看到的比例,所以我们编译的OpenJDK基本.上可以认为性能、功能和执行
逻辑上都和官方的Oracle JDK是一致的.

Oracle JDK与OpenJDK的区别

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

JVM和Hotspot

JVM是《JVM虚拟机规范》中提出来的规范。
Hotspot;是使用JVM规范的商用产品,除此之外还有Oracle JRockit、IBM的J9也是JVM产品
JRockit是Oracle的JVM, 从Java SE 7开始,HotSpot和JRockit合 并为一个JVM。

如何学习JVM
这是一张架构图,同时也是我们的学习路径

程序执行方式主要有三种:静态编译执行、动态编译执行和动态解释执行。
注意:此处所说的编译指的是编译成可让操作系统直接执行的机器码。

【JVM】你好--JVM相关推荐

  1. JVM之JVM内存区域与内存分配(转载)

    2019独角兽企业重金招聘Python工程师标准>>> 先来看看JVM运行时候的内存区域 大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区),He ...

  2. 小师妹学JVM之:JVM的架构和执行过程

    文章目录 简介 JVM是一种标准 java程序的执行顺序 JVM的架构 类加载系统 运行时数据区域 执行引擎 总结 简介 JVM也叫Java Virtual Machine,它是java程序运行的基础 ...

  3. JVM笔记(JVM内存+垃圾回收器)详解

    一:java代码的执行流程(引出JVM) 首先由程序员编写成.java文件 然后由javac(java编辑器)将.java文件编译成.class文件 .class文件可以在不同平台/操作系统上的JVM ...

  4. 深入理解JVM之JVM内存区域与内存分配

    在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处: http://www.cnblogs. ...

  5. 【JVM】JVM系列

    [JVM]JVM系列 [JVM]Java虚拟机简介 [JVM]JVM类加载机制 [JVM]JVM内存区域 [JVM]JVM垃圾回收机制 [JVM]JVM执行引擎 [JVM]JVM沙箱机制 [JVM]G ...

  6. 【JVM】JVM内存模型(详细)

    目录 一.JVM概述 1.jvm简介 2.jvm作用 3.jvm的内存模型 二.类加载器 1.类加载器的作用 2.加载器的类型 3.双亲委派机制的运行过程 4.双亲委派机制优缺点 5.为什么要破坏双亲 ...

  7. JVM(七) - Jvm内存模型

    一.Jvm介绍 1.JVM内存模型图: JVM = 类加载器(classloader) + 运行时数据区域(runtime data area) + 执行引擎(execution engine) 类加 ...

  8. JVM系列:jvm基本结构

    http://mp.weixin.qq.com/s/ReM763jIyPs2P0RuhWNeNQ 知识点1:什么是Java虚拟机(你以为你知道,如果你看我下面的例子,你会发现你其实不知道) 第一步:先 ...

  9. JVM - 认识JVM规范

    目录 重识JVM JVM规范作用及其核心 JVM 整体组成 理解ClassFile结构 ASM开发 重识JVM JVM概述 JVM: Java Virtual Machine,也就是Java虚拟机 所 ...

  10. 一篇文章掌握整个JVM,JVM超详细解析!!!

    JVM 先想想一些问题 1 我们开发人员编写的Java代码是怎么让电脑认识的 2 为什么说java是跨平台语言 3 Jdk和Jre和JVM的区别 4 为什么要学习JVM 深入学习JVM 1 JVM运行 ...

最新文章

  1. HDU 1847 Good Luck in CET-4 Everybody!
  2. nyoj1047欧几里得
  3. [MATLAB学习笔记]Rng函数
  4. 关于判断函数凸或凹以及最优化的问题
  5. 云原生的本质_CloudNative
  6. 微信小程序 环形进度条_微信小程序:实时圆形进度条实现
  7. REX-Ray 了解
  8. VMware“该虚拟机似乎正在使用中”问题
  9. 数字化定量分析_数字化定量分析
  10. 21个免费学习编程的网站
  11. 无盘Linux详解:硬盘启动Knoppix的前前后后
  12. ios 系统状态栏样式修改_iOS 导航栏颜色和状态栏颜色修改
  13. ol3 加载天地图服务
  14. TIKTOK视频:搬运视频技巧的这几点你知道吗?
  15. # Python第一节课
  16. 隐含狄利克雷分布(Latent Dirichlet Allocation)
  17. steam登不上显示连接服务器错误,steam登陆网络连接错误代码的解决办法
  18. QQ春节红包活动如何应对10亿级流量?看看大佬的复盘总结
  19. linux安装python3.7的步骤_在Linux上安装Python3.7.1
  20. java static void_今天终于搞懂了:为什么 Java 的 main 方法必须是 public static void?...

热门文章

  1. 程序员常用不常见很难得的地址大全转
  2. 算法日记(四)之回文字符串
  3. 2021-2027全球与中国半导体激光电源市场现状及未来发展趋势
  4. 计算机组成原理——输入输出设备(Input Output Equip-ment)
  5. Linux System Administration
  6. [P4V]Perforce常用命令总结
  7. 2020CCPC长春站后记
  8. SQL 中的 NULL 你真的懂了吗?【数据库|SQL】
  9. 微信开发手机在线调试
  10. HCIP---GRE