当前位置:首页 > 虚拟机 > 正文

java虚拟机工作流程


一、简述java语言的执行过程1、java编译生成的字节码在所有操作系统中都是相同的,因此具有以下特点:
writeable,runanywhere含义:只编码一次,随处运行。2.不同的操作系统有不同的Java虚拟机。虚拟机将Java字节码转换成适当的操作系统指令以保证正常运行。系统支持所有硬件平台,您可以放心使用。4.解释器位于Java虚拟机中,编译器位于JDK或JRE中。虚拟机通常称为Java运行时环境。其他应用软件的安装方法与您相同。JDK包括JRE
和库文件,例如编译器、帮助文档生成器和系统APIjar。


二、java程序运行的五个步骤

程序从源文件的创建到程序的执行要经历两个主要阶段:1.源文件被编译器编译成字节码(ByteCode)。2、字节码由Java虚拟机解释执行。。由于Java程序必须由JVM编译、解释和执行,因此Java被称为“半解释型”语言。

第1步(编译):创建源文件后,程序将首先编译成.class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译过,编译器会先编译依赖的类,然后再引用它。否则,将直接引用。这有点像make。如果Java编译器在指定目录下找不到该类所依赖的类的.class文件或.java源文件,编译器会报“cantfindsymbol”错误。

编译后的字节码文件格式主要分为两部分:常量池和方法字节码。常量池记录了代码中出现的所有标记(类名、成员变量名等)和符号引用(方法引用、成员变量引用等);方法字节码存储了类中每个方法的字节码。

第二阶段(执行):执行Java类的过程大致可以分为两个过程:1.加载类2.执行类。需要注意的是,只有当程序第一次主动使用某个类时,JVM才会加载该类。即JVM一开始不会将程序的所有类加载到内存中,而是只在需要使用时才加载它们,并且只加载一次。

2.下面是运行该程序的详细步骤:

编译Java程序并获得文件后,在命令行中输入javaMain。系统会启动一个jvm进程。jvm进程从类路径中找到一个名为的二进制文件,并将Main类信息加载到运行时数据区的方法区中。这个过程称为加载Main类。。

然后JVM找到Main的main函数入口,开始执行main函数。

主函数的第一条命令是AnimalAnimal=newAnimal("Puppy");它允许JVM创建一个Animal对象,但目前方法区中没有有关Animal类的信息。,为了让JVM立即加载Animal类,将Animal类的类型信息放置在方法区中。

加载Animal类后,JVM做的第一件事就是在堆区为一个新的Animal实例分配内存,然后调用构造函数来初始化Animal实例。方法区(包含方法表,Java动态绑定的底层实现)中指向Animal类的类型信息的引用。

当使用ame()时,JVM根据animal引用找到Animal对象,然后根据所持有的引用在area方法中定位Animal类的类型信息方法表。通过Animal对象,并获取printName()函数的字节码地址。

开始执行printName()函数。