Java虚拟机(一):JVM体系结构
一、JVM概述
Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统
Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”
Java虚拟机不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技术使同一种应用可以运行在不同的平台上。Java平台可分为两部分,即Java虚拟机(Java Virtual Machine)和Java API类库
目前JVM已经支持多语言字节码文件,如Kotlin、Groovy、JRuby、Jython、Scala等
二、JVM在计算机所处的位置
JVM是运行在操作系统之上,没有直接和硬件进行交互
-
三、JVM的不同实现
- SUN Classic
- Exact VM:开始具备现代JVM特性
- HotSpot VM:具备热点代码探测技术,目前在大规模使用的JVM
- BEA JRockit:(BEA已被Oracle收购)专注于服务端应用,世界最快的JVM之一
- IBM J9
- Taobao JVM:目前阿里淘宝、天猫均使用Taobao JVM替换Oracle官方JVM
- Graal VM: Oracle 2018年4月公开,口号 Run Programs Faster Anywhere.最可能替代HotSpot的产品
四、JVM体系结构
1.Java代码运行流程:Java程序
--> 字节码文件
--> 类装载子系统化身为反射类Class
--> 运行时数据区
-->执行引擎
--> 操作系统
2.方法区
和堆区
是所有线程共享内存的区域而Java栈
、本地方法栈
和程序计数器
是运行是线程私有的内存区域
五、JVM采用的架构
由于跨平台的特性,JVM采用基于栈的指令集架构,无需硬件支持,更好实现跨平台特性
与JVM采用架构相对的另一指令集架构:基于寄存器的指令集架构
下图为基于栈与寄存器指令集架构各自特点
-
六、JVM声明周期
1.启动
通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的
2.执行
- 一个运行中的java虚拟机有着一个清晰的任务:执行Java程序
- 程序开始执行的时候他才运行,程序结束时他就停止
- 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程
3.结束
- 程序正常执行结束
- 程序异常或错误而异常终止
- 操作系统错误导致终止
- 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
- 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
蒙牛:云上养牛记
2019年是蒙牛创业20周年,这家成立于内蒙古的公司是全球增长最快的乳企,2018年蒙牛乳业实现收入689.77亿元,同比增长14.66%。随着业务的迅速发展,蒙牛也和其他国际领先的乳业公司一样,面临着商品销售费用迅速增加、利润摊薄等问题。如何通过改善内部运营效率、降低经销成本,是蒙牛目前面临的重要挑战之一。 数字化转型困惑一:奶牛今天状态好不好? 你可能不知道,其实牛也有情绪好坏。奶牛的健康状况、情绪好坏,会直接影响到产奶量和产奶品质。 目前蒙牛有100万头牛,将近800个牧场。以前大多数传统牧场主要依靠人工经验来管理。现在,蒙牛和阿里巴巴合作在奶牛养殖的许多环节进行了数字化,阿里云还正在帮助蒙牛旗下牧场的奶牛逐步连接上物联网,从饲养到产奶,对奶牛及牧场运营实现数字化监控,逐步提高牛奶质量产量,提升牧场运营效益。 在牧场里,每头牛的脖子上都挂着智能脖环。安装在特定区域的物联网网关通过这些智能脖环监测奶牛每日活动量、产奶信息、每日反刍次数等实时数据。比如监测奶牛一天走多少步,走少了可能是生病了,这头牛就需要被隔离,它的奶暂时不能用了;如果走得特别多、特别快,那意味着奶牛可能发情了,需要...
- 下一篇
SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可灰度)
作者 | 白寂 阿里云开发工程师 导读:前三篇文章我们介绍了应用的开发和部署,那么在应用成功上云后,我就要面对应用的管理话题了,这一篇我们来看看如何做线上发布,并且是可灰度的。 相关文章推荐: 《SpringCloud 应用在 Kubernetes 上的最佳实践 —— 开发篇》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)》 前言 在新版本上线时,无论是从产品稳定性还是用户对新版本的接受程度上考虑,直接将老应用升级到新版本应用都有很大风险的。我们一般的做法是,保证新老版本同时在线,并且先将少部分流量切换到新版本应用上,同时在此期间对新版本的应用请求进行观察。在确认新版本没有问题后,再逐步将更大比例的流量切换到新版本上。这个过程的核心是可以对流量的流入转发规则进行配置,EDAS 的金丝雀发布能力,提供了多个版本同时在线的能力,并且提供了灵活的配置规则来给不同的版本进行流量分配。 部署在 EDAS Kubernetes 集群中的 Spring Cl...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7安装Docker,走上虚拟化容器引擎之路