JVM与Java体系结构

一、JVM的重要性

  1. ​ 面试,大厂必备;
  2. ​ 中高级程序员的必备:项目管理、调优的需要;
  3. ​ 极客精神:垃圾回收算法、JIT、底层原理。

Java相较于C/C++自带安全检查、垃圾回收、动态内存分配,入门学习起来相对更简单一些,工作以后必然要面临很多问题,学习JVM还是很有必要的。

二、Java与JVM

  • Java,跨平台的语言:write once,run anywhere。

  • JVM,跨语言的平台:JVM只关注字节码文件,任何语言编写的程序通过编译器变成字节码文件都可以在JVM上运行。

  • Java和JVM没有必然的联系!

  • **虚拟机分两类:**系统虚拟机和程序虚拟机。系统虚拟机是对物理计算机的仿真,例如Visual Box,VMware;程序虚拟机为执行单个计算机程序而设计,例如JVM。

  • JVM整体结构简图

  • java代码执行流程

  • 指令集架构:

    • 基于栈的指令集架构:零地址指令方式分配,指令集更小,不需要硬件支持,可移植性更好,更容易跨平台。典型:JVM

    • 基于寄存器的指令集架构:依赖硬件,性能更好,指令集更大。典型:传统的PC、Android的Davlink虚拟机。

    • 指令集的大小深刻影响了执行指令的多少,就像没有学会乘法以前,55*10就是将55累加十次(也可以将10累加55次,更耗费资源),有了乘法以后,执行一次即可,时间复杂度由O(n) --> O(1)。

  • JVM的生命周期:启动、执行、退出。

  • 一些比较出名的JVM

    • 使用最多的三个JVM

      • HotSpot:属于Oracle,平时使用默认的虚拟机,英语即热点代码探测技术,编译器和解释器协同工作,面试中一般没有说明问的都是HotSpot。

      • JRockit:属于Oracle,最快的JVM,没有解释器,只有编译器,一般用在服务器上。

      • J9:属于IBM,号称最快的JVM,因为专门对IBM的硬件做了适配,所以在IBM的硬件上最快,但是不适用于其他硬件(类似苹果的IOS,针对硬件设计的系统)。

      • 可以看到,无论是什么样的架构,如果只考虑一个平台,性能都是可以做到非常高的,基于寄存器的指令集架构如是,J9也如是。但是太依赖硬件就像把鸡蛋放到一个篮子里,如果能像苹果一样天时、地利、人和也还好,但大多都会像诺基亚、柯达这样的公司,很容易压错宝。不得不说,Java的成功是源自其跨平台特性,不能做专才,做全才也不失为走向成功的一条康庄大道。

    • 一些值得了(chui)解(bi)的JVM

      • Sun Classic VM:Java 1.0的产物,世界第一款商用JVM,只有解释器,不能和JIT一同运行,HotSpot内置了该虚拟机。
      • Exact VM:Java 1.2出现,可以热点探测,可以让编译器和解释器混合工作,然而很快HotSpot出现,该虚拟机便没有用武之地。
      • KVM和CDC/CLDC HotSpot:早期用于Java ME产品线上的虚拟机,用于手机上,目前市场基本没有,仅用于老人机、功能机,早年《艾诺迪亚》等游戏就是用java开发的。

    • Azul VM:与特定硬件平台绑定、软硬件配合的专有虚拟机,人称“高性能Java虚拟机中的战斗机”。
    • Apache Harmony:IBM和Intel联合开发,但是被Sun打压,最后被放弃,但是其Java类库代码被吸纳进了Android SDK,另类的方式存活着。
    • Microsoft JVM:只能在windows下运行,被sun告了,后来gg。
    • Taobao JVM:阿里基于OpenJDK开发了自己的定制版本AlibabaJDK,是整个阿里Java体系的基石,在阿里产品上性能高,严重依赖intel的cpu。

本学习笔记基于宋老师的JVM课程。学习之路道阻且长,共勉。

【JVM学习笔记1】JVM与Java体系结构相关推荐

  1. java jvm学习笔记二(类装载器的体系结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao                  在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱, ...

  2. java之jvm学习笔记十三(jvm基本结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完 ...

  3. JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-命令行方式

    性能优化的步骤 第1步(发现问题):性能监控 一种以非强行或者入侵方式收集或查看应用运营性能数据的活动. 监控通常是指一种在生产.质量评估或者开发环境下实施的带有预防或主动性的活动. 当应用相关干系人 ...

  4. JVM学习笔记(二)------Java代码编译和执行的整个过程

    Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: ● Java ...

  5. jvm学习笔记(3)——java对象的内存分配和对象的回收(GC)

    引言: 之前的文章已经提过,java对象实例是存放在堆上的,至于是在伊甸区.存活区还是老年区,这些都是从对象回收(GC)角度来进行的逻辑划分.所以我们先说对象的回收(GC),然后再依据GC的策略来说明 ...

  6. jvm学习笔记(1)——java虚拟机内存区域

    一.java内存区域: 1.程序计数器(线程私有): 内存中较小的内存空间,可以当做当前线程所执行字节码的行号指示器.如分支.循环.跳转.异常处理.线程恢复都需要依赖这个计数器完成. 2.java虚拟 ...

  7. jvm学习笔记(2)——java对象的内存布局

    一.内存布局: 一个java对象在内存中可分为3个区域:对象头(Header).实例数据(Instance Data).对齐填充(Padding). 对象头(两部分): 对象自身运行时的数据.如哈希码 ...

  8. JVM 学习笔记 1. JVM 运行模型

    目录 JVM 启动流程 JVM 基本结构 内存模型 虚拟机的运行方式 1. JVM 启动流程 如下图所示: 2. JVM 基本结构 两幅经典的模型图: 其中: PC寄存器:每个线程都拥有一个PC寄存器 ...

  9. JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-GUI方式-Visual VM-JProfiler-Arthas

    00-谈GUI工具前的补充 补充1:内存泄漏 内存泄漏的理解与分类 何为内存泄漏( memory leak) 可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否还被引用.那么对于这 ...

  10. 【JVM学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明

    目录 一.相关名词解释 垃圾收集常用名词 二.哪些地方需要回收 本地方法栈.虚拟机栈.程序计数器 方法区 Java堆 三.什么时候回收 1. 内存能否被回收 内存中的引用类型 引用计数算法 可达性分析 ...

最新文章

  1. 一个效率更高的全半角字符串截取函数
  2. [INSHack2018]Crypt0r part 1
  3. Image and video pencil sketch with OpenCV 3.X and CUDA
  4. oracle trace文件解读
  5. demo4 debug - create class instance - component works as type
  6. centos 环境变量配置
  7. python中is和 的区别_Python中is和==的区别
  8. AngularJS:模型
  9. 微信小程序之换肤的功能
  10. x86基础之数与数据类型
  11. postgresql 数据库的备份和还原
  12. GSEA分析详细步骤
  13. 盘点:12个超炫数据可视化工具
  14. Java进阶之路对标阿里P6(8)——分布式理论及框架设计Netty
  15. 评副高考计算机英语能加分吗,19类人员评副高以下职称时不用再考外语
  16. Spark stand a lone 模式
  17. Guava学习之Joiner
  18. 几款我比较满意的在线脑图工具
  19. win7 IE11浏览器怎么降至IE8?
  20. 个人项目 小跟班——蓝牙小车控制(UI篇)

热门文章

  1. java二叉树详解_二叉树详解
  2. 通达信开发接口定义静态方法
  3. STM32F4(用SysTick实现Delay函数)
  4. python贪吃蛇代码课程设计_c语言课程设计之贪吃蛇代码及思路 c语言课程设计报告之贪吃蛇...
  5. java中printf%4d_c语言编程问题: printf(%4d,a[i][j]);里面的数字4是起什么作用的?
  6. 通俗理解HMM(隐马尔可夫模型)
  7. JAVA设计模式(14) —行为型模板方法模式(Template Method)
  8. nodeValue、firstChild和lastChild属性
  9. 什么?你正在学web自动化测试?那这些Selenium的基本操作你了解过嘛?
  10. 协方差的意义和计算公式 .