【JVM学习笔记1】JVM与Java体系结构
JVM与Java体系结构
一、JVM的重要性
- 面试,大厂必备;
- 中高级程序员的必备:项目管理、调优的需要;
- 极客精神:垃圾回收算法、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体系结构相关推荐
- java jvm学习笔记二(类装载器的体系结构)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱, ...
- java之jvm学习笔记十三(jvm基本结构)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完 ...
- JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-命令行方式
性能优化的步骤 第1步(发现问题):性能监控 一种以非强行或者入侵方式收集或查看应用运营性能数据的活动. 监控通常是指一种在生产.质量评估或者开发环境下实施的带有预防或主动性的活动. 当应用相关干系人 ...
- JVM学习笔记(二)------Java代码编译和执行的整个过程
Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: ● Java ...
- jvm学习笔记(3)——java对象的内存分配和对象的回收(GC)
引言: 之前的文章已经提过,java对象实例是存放在堆上的,至于是在伊甸区.存活区还是老年区,这些都是从对象回收(GC)角度来进行的逻辑划分.所以我们先说对象的回收(GC),然后再依据GC的策略来说明 ...
- jvm学习笔记(1)——java虚拟机内存区域
一.java内存区域: 1.程序计数器(线程私有): 内存中较小的内存空间,可以当做当前线程所执行字节码的行号指示器.如分支.循环.跳转.异常处理.线程恢复都需要依赖这个计数器完成. 2.java虚拟 ...
- jvm学习笔记(2)——java对象的内存布局
一.内存布局: 一个java对象在内存中可分为3个区域:对象头(Header).实例数据(Instance Data).对齐填充(Padding). 对象头(两部分): 对象自身运行时的数据.如哈希码 ...
- JVM 学习笔记 1. JVM 运行模型
目录 JVM 启动流程 JVM 基本结构 内存模型 虚拟机的运行方式 1. JVM 启动流程 如下图所示: 2. JVM 基本结构 两幅经典的模型图: 其中: PC寄存器:每个线程都拥有一个PC寄存器 ...
- JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-GUI方式-Visual VM-JProfiler-Arthas
00-谈GUI工具前的补充 补充1:内存泄漏 内存泄漏的理解与分类 何为内存泄漏( memory leak) 可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一个对象是否还被引用.那么对于这 ...
- 【JVM学习笔记】内存回收与内存回收算法 就哪些地方需要回收、什么时候回收、如何回收三个问题进行分析和说明
目录 一.相关名词解释 垃圾收集常用名词 二.哪些地方需要回收 本地方法栈.虚拟机栈.程序计数器 方法区 Java堆 三.什么时候回收 1. 内存能否被回收 内存中的引用类型 引用计数算法 可达性分析 ...
最新文章
- 一个效率更高的全半角字符串截取函数
- [INSHack2018]Crypt0r part 1
- Image and video pencil sketch with OpenCV 3.X and CUDA
- oracle trace文件解读
- demo4 debug - create class instance - component works as type
- centos 环境变量配置
- python中is和 的区别_Python中is和==的区别
- AngularJS:模型
- 微信小程序之换肤的功能
- x86基础之数与数据类型
- postgresql 数据库的备份和还原
- GSEA分析详细步骤
- 盘点:12个超炫数据可视化工具
- Java进阶之路对标阿里P6(8)——分布式理论及框架设计Netty
- 评副高考计算机英语能加分吗,19类人员评副高以下职称时不用再考外语
- Spark stand a lone 模式
- Guava学习之Joiner
- 几款我比较满意的在线脑图工具
- win7 IE11浏览器怎么降至IE8?
- 个人项目 小跟班——蓝牙小车控制(UI篇)
热门文章
- java二叉树详解_二叉树详解
- 通达信开发接口定义静态方法
- STM32F4(用SysTick实现Delay函数)
- python贪吃蛇代码课程设计_c语言课程设计之贪吃蛇代码及思路 c语言课程设计报告之贪吃蛇...
- java中printf%4d_c语言编程问题: printf(%4d,a[i][j]);里面的数字4是起什么作用的?
- 通俗理解HMM(隐马尔可夫模型)
- JAVA设计模式(14) —行为型模板方法模式(Template Method)
- nodeValue、firstChild和lastChild属性
- 什么?你正在学web自动化测试?那这些Selenium的基本操作你了解过嘛?
- 协方差的意义和计算公式 .