java虚拟机规范 51cto_java虚拟机

最近学习java虚拟机做了一些整理,会陆续发完。

Java虚拟机

一、概念:当我们谈到java虚拟机的时候,有可能指下面3个方面:

1):抽象java虚拟机的规范。

2):一个java虚拟机具体的实现。------实现是指:实现需要有接口,用类实现接口,并实现接口所有方法。就是说先有一个接口,然后写一个类实现接口中的所定义的方法。

3):一个运行中的java虚拟机实例。

而我们经常说的大多数是第三种。也就是一个正在运行的java虚拟机实例。

java虚拟机之所以被称为“虚拟”的,就是因为它仅仅是有一个规范定义的抽象计算机。因此,运行某个java程序,首先需要一个符合该规范的具体实现。

当运行一个java程序的同时,也就在运行一个java虚拟机实例。每个java程序都运行于某个具体的java虚拟机实现的实例上。它是java编译器和os平台之间的虚拟处理器。负责与操作系统之间的交互

二、java虚拟机生命周期:

Java虚拟机的产生和消亡是伴随java程序的运行和停止。也就是说当java程序运行的时候,相应的java虚拟机也就诞生了,反正消亡。其具体的实现是通过调用内部main方法来实现。

6d4633352ff23c3b04708cb6d37bdba4.png

三:jvm执行java程序的顺序是什么呢?

大致如下:

Java(源代码)——>class(字节码)——>类加载器——>字节码校验器——>硬件

具体过程: 1、加载class文件

2、管理分配内存

3、执行垃圾回收

四、Java虚拟机的体系结构:

8bbd51361c09266efc852d536ce909f7.png

组成部分:一系列的子系统、内存区域、数据类型和使用指南。这些构成java虚拟机的内部结构。这些组成结构实现了外部行为(java虚拟机与OS之间的实现)和实现内部行为(java虚拟机的内部之间的实现)。

类加载器子系统(class loader  subsystem)作用:每个java虚拟机都由类加载器子系统(class  loader subsystem)。负责加载程序中类型(类和接口)。

执行引擎(execution  engine):负责执行被加载类中的包含的指令。每个java虚拟机都有一个执行引擎(execution engine)。

内存区域:程序的执行需要一定的内存空间。如字节码、被加载的其他额外信息、程序中的对象、方法参数、返回值、本地变量、处理中间变量等等。Java虚拟机将这些的信息统统保存在数据区中(data areas)。虽然每个java虚拟机的实现中都包含数据区,但是java虚拟机规范对数据区的规定却非常的抽象。许多结构上的细节部分都留给了java虚拟机实现者的发挥。不同 的java虚拟机实现上的内存结构千差万别。一部分实现可能占用很多内存,而其他一下可能只占用很少的内存。一些实现可能会使用虚拟内存。

Data  areas:数据区中的一部分是整个程序的共有的,有其他部分被单独的线程控制。每个虚拟机都包含方法去(method area)和堆(heap),他们被整个程序的共享的。

8e041cca7d331d7759f8a7f2e74fbcc3.png

方法区(method area):当java虚拟机加载并解析一个类后,将从类文件中解析出来信息保存在方法区中(method area)。

堆(heap):程序执行时的创建的对象保存在堆中。

5255e0930bae64121c881e4ccc7df552.png

其他的内存区域:

PC寄存器概念:又叫指令计数器。中央处理机中的一种寄存器,用来保存计算机的执行程序的指令地址。

作用:保存线程执行的下一条指令。这其中包括是否调用本地方法情况:

当不调用本地方法的时候:PC寄存器保存线程执行下一条指令。

当线程调用本地方法的时候,pc寄存器不保存线程的下一条执行指令。

Javastacks(java 堆栈)作用:保存一个线程的调用方法的状态,包括本地变量、调用方法的参数、返回值、处理的中间变量。调用本地方法的时的状态保存在本地方法堆栈中(native method stacks),也可能在寄存器中。

Javastacks是由java堆栈块组成。而堆栈块包含java方法调用的状态。

e7538de6ca86ef6e81617483957e6c27.png

Java虚拟机不使用寄存器保存中间结果,而是用java堆栈中存放中间结果。

好处:使java虚拟机的指令更紧凑,也更容易在一个没寄存器的设备上实现java虚拟机。

e147c005dac2ddcfa159808ac6753ed7.png

数据类型(data types):每个java虚拟机中使用的数据都有确定的数据类型。

数据类型和操作都在java虚拟机规范中严格定义的。其中数据类型包括原始数据类型和引用数据类型。

引用类型依赖于实际对象,但不是对象本身。

原始数据类型不依赖任何东西,他们就是本身表示的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ipv6+ssh+java_IPv6的本地联网地址计算方法详解

IPv6的世界里,如果DHCP6和SLACC这两位大佬都为没有为可怜的网卡分配IP地址,也没有人为网卡设置静态的IP地址,系统就会为网卡计算一个IPv6的网址来。这样的网址只能在本地使用,不得路由,所以,被称为“link-l…

java互斥锁的实现原理_java-深入分析synchronized原理

互斥锁互斥锁futex,全拼fast userspace mutexes,直翻为快速用户空间互斥器,它是我们上层应用实现锁的最常用方法。futex是一块所有进程都可以访问的内存,是通过cpu的原子操作修改内存中的值来尝试获取琐,如果没有竞争&…

京东开普勒php接口,IOS菜鸟初学第十五篇:接入京东开普勒sdk,呼起京东app打开任意京东的链接-Go语言中文社区...

我之前写了一篇关于接入京东联盟sdk的文章,但是最近,由于这个原因,如下图导致需要重新集成京东的sdk,但是由于某种原因,因为android和ios端不统一,android接入的是京东开普勒的SDK,这次为了统一…

oracle安装过程掉电,Oracle数据库掉电后ORA-01172磁盘坏块解决方法

由于服务器突然掉电,重启机器后发现数据库无法启动。数据库版本 Oracle10201,OS REDHAT 5.4数据库无归档,无备份 [oraclehuna由于服务器突然掉电,重启机器后发现数据库无法启动。数据库版本 Oracle10201,,O…

linux删除了mount目录,Linux记录-分区(df/fdisk/mount/umount/fuser)

1.查看磁盘挂载(df -TH)2.卸载umount /dev/vdb13.查杀用户进程(fuser -m -v -i -k /dev/vdb1)4.再次卸载umount /dev/vdb1,并查看挂载信息df -TH5.删除分区(fdisk /dev/vdb m d 1 d w)6.查看分区(fdisk -l,没有Start-End磁盘分区表示可用)7.添加分区(fdi…

linux中pak命令,如何在Linux系统中安装Flatpak

选择你的Linux发行版快速安装Flatpak及使用Flatpak。支持Ubuntu、Fedora、Red Hat Enterprise Linux、Deepin、Endless OS、Linux Mint、openSUSE、Arch、Debian、CentOS、Gentoo、Solus、Alpine、Mageia、Pop!_OS、elementary OS、Raspbian。以下为你逐一介绍如何在这些Linux版…

ubuntu 改linux密码忘了怎么办,Ubuntu 14.04忘记root密码的解决方法

电脑20多天没用,忘记Ubuntu 14.04 root密码了,下面是在网上找到的一个解决办法,其它的和这个也大概相同。因为其中有些缺漏,没能给我解决问题。通过分析最终问题还是解决了,现解决方案的关键点记录一下。希望能方便到其…

linux设置历史命令保留数目限制,linux下修改history命令保存条数

在linux系统下、history命令会保存多少条命令呢?曾在一本书上说,如果注销系统,那么会将所有的历史命令都定入到~/.bash_history,但只保留1000条命令(这个是由默认的shell变量所设置了的)但是为什么我们执行history命令后会出现大于1000条的历…

android 手机壁纸源码,Android工程实现换壁纸功能【附源码】

最近工作要实现换壁纸小功能,将代码做成demo发出来没有采用zip格式换肤,因为只是更换一张图片背景1.将三张图放入drawable-hdpi,我放的是480*800的2.用sharedPreference存取皮肤的id,以便于下次启动的时候根据id来选择用哪个皮肤,在onresume()里刷新皮肤3.存到sharedPreference…

android webview 加载本地,webview加载本地资源的各种尝试

1.webview 打开sd卡上的静态html文件 ,js文件既然放在assets文件夹下能找到,那能通过放在sd卡,能加载吗?答:事实证明,是没有用的。2.既然能拿到html的数据,那我们是不是重写html的script的tag的…

apple手表android手机,Apple Watch 4发布了,安卓手机用户如何选择呢?

Apple Watch 4发布了,安卓手机用户如何选择呢?2018年09月13日 17:40作者:黄页编辑:黄页分享一年一度的“科技界春晚”苹果新品发布在今天凌晨举行。苹果带来了新一代的智能手表——Apple Watch Series 4系列。作为“课代表”,科技…

android投屏到电视机,华为手机如何投屏到电视机上?按步骤,1分钟搞定手机投屏电视机...

现在,越来越多的人开始用上了华为手机,几乎人手一台。在平时学习、工作中,我也经常使用华为手机来处理、完成很多事项、任务,例如把手机投屏到电视机上。除了满足学习、工作需求,我也经常把手机投屏电视来看视频、玩游…

html语言可以干什么,JavaScript语言能做什么?

JavaScript是除了HTML和CSS之外,万维网的核心技术之一。JavaScript支持交互式web页面,是web应用程序的重要组成部分。绝大多数网站都使用它,主要的网络浏览器都有专门的JavaScript引擎来执行它。JavaScript(简称“JS”) 是一种具有函数优先的…

html获取当前二级域名,列举某域名下所有二级域名的方法总结

鬼仔注:本文为总结文,转载请注明来源( http://huaidan.org )这里介绍三种列举某域名下所有二级域名的方法,有知道其他方法的请到 http://huaidan.org/archives/1088.html 留言进行补充~谢谢。1、命令行下列举此方法好像是hoky很久以前写的&am…

html5绘制矩形动画,HTML5下绘制矩形教程

绘制矩形上一节,我们使用lineto()方法绘制一个封闭的矩形。其实,canvas的api提供了rect()方法可以绘制矩形。rect()方法是路径方法,它会把指定的矩形添加到当前路径的子路径中。它只添加路径,绘制图形还是由stroke()或fill()方法完…

html免费天气预报代码,免费自我定制天气预报代码

免费自我定制天气预报代码(2010-06-15 22:03:35)标签:昔阳天气预报一乌海天气预报一杂谈今晚蚊子又发现一个天气预报,在别人博客上看见的,昔阳天气预报一周,觉得还不错,查看了一下源代码,把怎么弄的方法告诉大家,南靖天气预报一周,其实没什么技术含量,很简单的,就是…

html5伪类触发机制,HTML5表单验证

validity属性表单元素对象具有此属性,返回值是一个ValidityState对象。ValidityState对象的名称是合成词,如有两个单词构成:(1).validity:翻译成汉语具有"验证"的意思。(2).state:翻译成汉语具有"状态&…

计算机管理中看不到本地用户,win7系统计算机管理中没有本地用户和组的解决方法...

很多小伙伴都遇到过win7系统计算机管理中没有本地用户和组的困惑吧,一些朋友看过网上零散的win7系统计算机管理中没有本地用户和组的处理方法,并没有完完全全明白win7系统计算机管理中没有本地用户和组是如何解决的,今天小编准备了简单的解决…

html编程入门指南,给萌新HTML5 入门指南

本文由葡萄城技术团队原创并首发转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。HTML5的发展改变了互联网技术趋势,前端热度依旧不减,所以对于应用开发人员前端技术也成了必…

税务大厅计算机网络安全与管理,峡江县税务局多措并举加强网络安全和保密管理...

在2019年国家网络安全宣传周期间,峡江县税务局紧紧围绕“网络安全为人民,网络安全靠人民”主题扎实开展网络安全宣传活动,多点着力,多措并举,编织网络安全保障网,加强保密教育管理,确保信息网络…