深入解析java虚拟机

2016-02-19 08:56 7 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的深入解析java虚拟机教程,一起来看看吧!超容易上手~

【 tulaoshi.com - 编程语言 】

java虚拟机是什么

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

“java虚拟机”可能指以下三种东西:
1)、抽象规范;
2)、一个具体的实现;
3)、一个运行中的虚拟机实例;

java虚拟机生命周期

启动
当启动一个java程序时,一个虚拟机实例诞生。
虚拟机实例通过调用某个初始类的public static void main(String[] args)方法来运行一个java程序。
任何拥有这样一个main方法的类都可以作为java程序运行的起点,所以必须要告诉虚拟机初始类的名称,整个程序将从它的main方法开始运行。

消亡
初始类的main方法作为程序初始线程的起点,任何其他线程都是由初始线程启动。
java虚拟机内部有两种线程:守护线程和非守护线程。
守护线程,通常是虚拟机使用的线程,如执行垃圾收集。java程序也可以把创建的线程标记为守护线程。
非守护线程,java中的初始线程,就是开始于main方法的线程是非守护线程。
只要程序中有非守护线程在运行,那么java程序也在继续运行(虚拟机仍然存活),当程序中所有的非守护线程都终止时,虚拟机实例自动退出。
程序本身也可以通过Runtime类或System类的exit()方法退出。

java虚拟机体系结构

类装载子系统
1)、负责查找并装载类型,分成装载、连接和初始化,在java类型生命周期中有详细说明;
2)、有两种类装载器:启动类装载器和用户自定义类装载器;
用户自定义类装载器必须派生自java.lang.ClassLoader类。

运行时数据区

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

方法区
被装载类型的信息存储在方法区中,详细如下:
基本信息
1)、类型的全限定名;
2)、类型的直接超类的全限定名;
3)、类型是类类型还是接口类型;
4)、类型的访问修饰符;
5)、直接超接口的全限定名;

其他信息
1)、类型的常量池;
2)、字段信息;
3)、方法信息;
4)、除了常量以为的所有静态变量;
5)、一个到ClassLoader类的引用;
6)、一个到Class类的引用;


1)、运行时创建的所有类实例和数组都放在堆中;
2)、一个java虚拟机实例只存在一个堆空间,因此虚拟机中的所有线程都共享这个堆;
3)、一个java程序独占一个java虚拟机实例,因此每个java程序都有他自己的堆空间;

java栈

1)、每启动一个新线程时,java虚拟机都会为他分配一个java栈;
2)、java栈以帧为单位保存线程的运行状态;
3)、java虚拟机对java栈只执行两种操作:压栈和出栈;
4)、压栈:每当线程调用一个java方法时,虚拟机都会在该线程的java栈中压入一个新帧。使用这个帧来存储参数、局部变量、中间运算结果等;
5)、出栈:当java方法通过return正常返回,或通过抛出异常中止,虚拟机都会将当前帧弹出java栈然后释放掉;
6)、栈数据是线程私有的,所以不需要考虑多线程情况下栈数据的访问同步问题;

栈帧
1)、栈帧由三部分组成:局部变量区、操作数区和栈数据区;

PC寄存器
1)、对于运行中的java程序,每个线程都有自己的pc寄存器;
2)、线程启动时创建;
3)、当线程执行某个java方法时,PC寄存器的内容总是下一条将被执行指令的地址。

本地方法栈
1)、任何本地方法接口都会使用本地方法栈;

执行引擎
1)、执行引擎是java虚拟机实现的核心;
2)、“执行引擎”可以有三种理解:
  a)、一个是抽象的规范;
      b)、一个是具体的实现;
      c)、一个是正在运行的实例;
3)、执行引擎的行为使用指令集来定义。对于每条指令,规范都规定了执行该指令时应该处理什么,如果处理不做规定;
待细化。。。

来源:https://www.tulaoshi.com/n/20160219/1588899.html

延伸阅读
标签: 服务器
在VMware虚拟机中DiskGenius对虚拟机磁盘进行压缩 使用虚拟机的用户是否感觉到您的虚拟磁盘文件越来越大,都快把宝贵的磁盘空间(宿主机物理硬盘)占满了呢? 有人会想到,我直接启动虚拟机,然后把里面没用的数据删除了,不就行了吗?实际测试发现,这样删除后,存放在物理硬盘上的虚拟磁盘文件的大小并没有减小。虚拟机磁盘文件只会慢...
标签: 服务器
VMware虚拟机安装图解 更新了一下 VMware虚拟机. 也重新编写了安装批处理程序,和卸载程序. 测试后觉得还不错,遂发上来了. 简单说明一下: Xp下测试完全没问题. 沐珑还特意在虚拟机中安装了个Windows7测试一下. (由于xp和Windows7用户路径不同,安装程序会自动识别系统版本,并配置路径.) 运行 "安装.bat&qu...
标签: 服务器
hyper-v虚拟机转换成vmware虚拟机的方法 Hyper-V 是 Microsoft 在 Windows Server 2008 中包含的基于系统管理程序的虚拟化平台。与 Virtual Server 2005 R2(在 Windows Server 2003 操作系统上运行的托管技术)不同,Hyper-V 直接在系统硬件上运行。Hyper-V 可以在 Windows Server 2008 的完全安装上运行,也可以在最小的服务器核心安装...
环境,三台虚拟机系统,debian,centos,rhel。基于ipvsadm的负载均衡,采用DR方式,rhel做lvs的director,其余两台是real。负载均衡的服务是web。 实现如下: 所需的软件:os(废话),ipvsadm,及其相关库文件(默认安装即可) ipvsadm下载地址:ipvsadm下载 采用源码包的安装形式安装。 安装要点: 1、ipvsadm需要os的内核源路径...
标签: 服务器
如何连接虚拟机的系统   演示环境 Windows 7 是我电脑使用本机 VMware8.0安装了Linux CentOS 6.2 X32 我先来讲讲我的网络情况,目前我使用的IP地址是192.168.1.99、子网掩码是255.255.255.0、网关是192.168.1.1。而我希望我电脑本机能远程虚拟机的操作系统CentOS,把它弄成同一个网段的。 好,前提下VM里面的Cent...

经验教程

838

收藏

27
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部