程序从源文件的创建到程序的执行要经历两个主要阶段: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()函数。
上一篇:hyperv虚拟机导出
下一篇:java虚拟机指的是什么