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实例所指向的方法区,里面有方法表。

 

此部分只是大多源自于:链接

 

posted @ 2020-03-06 15:40  张大帅zz  阅读(280)  评论(0)    收藏  举报