java虚拟机运行过程_详细理解Java虚拟机的运行过程

基本概述:

Java虚拟机简称JVM,是JRE中的一部分,也是Java程序运行的最关键的部分。完整的Java运行流程大致包括编译.java文件形成.class文件,然后根据.class文件的内容进行一系列的步骤使整个程序运行起来。其中将.java文件编译为.class文件由Java编译器完成,而由.class文件进而完成整个运行过程则主要是由JVM来完成的。由于所有的编译链接过程都由JRE来完成,所以Java具有良好的平台可移植性,不依赖具体的操作系统。

具体结构及功能:

1、Class Loader:

该子系统主要负责以下三种工作。

一、读取(Loading):Class Loader会首先读取由Java编译器传入的.class文件,然后生成相对应的二进制数据并将其存入方法区,这其中生成的数据主要包括类名、紧邻的父类、各种修饰符、变量和方法的信息。在这之后,JVM会自动给这个类创建一个类型为Class的对象并存入堆中,这个对象可以被程序员调用,从而得到这个类中的相关信息(也就是上面所讲的存入方法区的那些信息)。需要注意的是,一个类只会具有一个Class对象,也就是说,就算有无穷个该类的不同对象,在堆中也只会有一个对应的Class对象。

二、链接(Linking):在读取之后,Class Loader会对.class文件进行正确性验证,看看该类是否被正确定义,同时是否被正确编译。如果验证成功,那么JVM就会为类中的变量分配内存,并且初始化内存为默认值。

三、初始化(Initialization):在这一阶段,所有的静态变量将被正确赋值,赋值的顺序是按照代码顺序从前往后,从父类到子类。

而对于Class Loader来说,其实也大致分为三类。第一类是Bootstrap Class Loader,我们可以理解为最基础的Class Loader,因为它只会处理那些已经被完全信任的class,也就是Java的核心类;第二类是Extension Class Loader,它会处理那些被放置在指定的扩展类文件夹中的类;第三类是Application Class Loader,它处理的是外界定义的类。至于其中的具体不同呢,在此就不展开叙述了。

2、JVM Memory:

JVM的内存区是其存放具体数据和对象的主要区域,总共由以下五部分组成。

一、方法区(Method Area):方法区中主要存取的是Class级别的数据,包括类名,父类名,方法名,变量名和静态变量等等。每一个JVM只有一块方法区,所以是一个可以被所有类和进程共享的区域。

二、堆(Heap Area):堆中存放着所有对象的信息。每一个JVM也只有一个堆,意味着堆也是被共享的。

三、栈(Stack Area):JVM会为每一个线程开辟一个栈区,而每一个栈区中又会分成许多的块(Block),每一个块都代表一个方法调用,方法中的所有本地变量都会存放在栈中相对应的块中。一旦该线程终止,那么这个栈就会被JVM销毁。所以栈区是不共享的。

四、PC计数器(PC Register):记录每一个线程当前运行到的代码地址。显然,每一个线程都会有一个对应的PC计数器,所以也是不共享的。

五、本地方法区(Native Method Area):每一个线程都会有一个本地方法区,其主要存放本地方法的相关信息。

3、Execution Engine:

运行引擎负责真正地运行.class文件,它会一行一行地读取.class中的二进制信息,然后利用JVM Memory中的数据一条一条地执行。垃圾回收器也是在这个引擎中,它可以自动检测不再可能被引用的已分配内存并将其回收。

JVM的大致运行过程到这里就告一段落了。当然,还有许许多多的细节在这里没有列出,如果有需要,查阅官方文档是最好的办法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式系统通常对于资源和执行效率有严格的约束,导致了应用于嵌入式系统中的操作系统通常都提供非常有限的编程接口和系统支持。因此对于传统的嵌入式系统开发人员来说,开发难度相对较大,开发效率也相对较低。Java的出现缓解了这一情况。由于Java的跨平台特性,大批应用程序开发人员可以脱离硬件平台,在桌面的虚拟环境中开发嵌入式应用程序。 与传统的Java虚拟机不同,YJVM(Yet another JVM)是运行在嵌入式Linux内核中的Java虚拟机。实现了解释执行Java字节码、线程管理、执行环境管理、集成Classpath核心类库等基本功能。它可以使Linux在内核层次上支持Java的字节码,从而减少了软件层次、为提高效率留下空间。另外,YJVM中还构造了Java的进程管理,为在嵌入式环境中运行Java程序提供了更安全的环境。不同于纯粹用Java来实现的操作系统的尝试,这个方案更充分利用了现有的操作系统的实践成果,在不牺牲Java跨平台特性的前提下,更有实用价值。 本文从对嵌入式操作系统的讨论入手,结合Java虚拟机的原理和研究状况阐述了YJVM的设计和实现要点,体现了YJVM相比现有的嵌入式Java解决方案和Java操作系统的优势。本文的主要研究内容及成果包括: 1、作为一种嵌入式操作系统,嵌入式Linux的基本结构和与传统嵌入式操作系统相比的特点和优势。 2、嵌入式Java的传统解决方案和Java操作系统的基本结构。以及他们对于YJVM设计的影响和异同。 3、Java虚拟机的工作原理和结构。在YJVM中Java虚拟机的结构和实现方案之间的具体映射。 4、YJVM中程序装载、解释器、进程管理、垃圾收集和对Classpath核心类库集成的具体实现要点. 5、测试方案的制定的依据和结果;测试例程的构造和选择;测试结果的分析和在此基础上提出的改进和发展方向。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值