java程序运行过程
代码从编译到运行有两大步骤:1.原文件(代码)有eclipse编译成字节码(byteCode) 2.字节码传入java虚拟机 解释运行。
*************************
关于虚拟机的知识还不太了解。下面写出我所知道的浅薄见解。jre、jvm、jdk区别
Java虚拟机是在电脑系统中又搞了一个虚拟系统,即JVM(java virturail machine)。代码会在这里面运行测试,具体的运行方式我还不知道。
*****************************
编译详解: 源码文件经过编译后会分成两部分,一部分为常量池,一部分为方法字节码。
常量池和字节码均放在方法区中。
常量池记录的是类名,成员变量名,方法引等。 方法字节码记录了各个方法的字节码。 常量池是放在方法区中的
运行详解: java中的类不是一运行就将所有的类加载,而是运行到哪就加载哪。且只加载一次!
//MainApp.java
public class MainApp {
public static void main(String[] args) {
Animal animal = new Animal("Puppy");
animal.printName();
}
}
//Animal.java
public class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public void printName() {
System.out.println("Animal ["+name+"]");
}
}
以上面的代码为例,详细解释如何运行。 点击运行后,会先将代码编译成AppMain.class 文件,然后会在系统中启动一个jvm进程,jvm找到这个.class文件将MainApp(注意不是Animal类,因为还没有遇到)的类信息(常量池,方法字节码)加载到方法区内。 之后执行main函数 第一句刚好是 Animal animal = new Animal("Puppy"); 则就会找到Animal类,并把他的类信息放到方法区中(什么常量啥的)。 加载完毕后,虚拟机会在堆中为animal实例分配内存,并调用构造函数初始化animal实例,这个实例会持有指向方法区的Aimal类的类型信息。 之后是执行animal.printName()这个函数, jvm会根据animal引用(位于栈)所指向的位置找到Animal对象,然后定位到Animal实例所指向的方法区,里面有方法表。
此部分只是大多源自于:链接

浙公网安备 33010602011771号