java程序执行流程

Java程序执行流程(大致描述了程序执行流程)
java程序执行流程_第1张图片
运行程序时候为程序分配三个区域:方法区(类的方法具体实现和类的成员变量声明),堆(咋地程序运行时候使用new开辟的内存空间)和栈(程序实际运行所需的空间)。
相关问题:java程序是如何运行的?是如何被JVM执行的?
首先JVM找到包含main方法的类,然后将该类加载到方法区中。此时方法区包含该类的成员变量,成员方法(包括main方法)。接着执行main方法,此时在栈开辟一片区域用于main方法的执行。进入main方法里面,第一句是声明一个对象引用变量,此时要用到一个新的类,将该类加载到方法区中,同样的类Phone在方法区的内容和之前类是一样的(类的成员变量,类的成员方法)。接着运行到new语句,执行该语句需要在堆中开辟一片区域,用于对象的存储。对象的创建根据类的声明来的,由于类可以看成是成员变量和成员方法的集合,所以堆中的对象也开辟了相应的空间用于存储成员变量和成员方法,不同的是,成员方法是指向类型,即指向方法区该类的成员函数的地址(由于使用相同类创建的对象在调用成员方法的时候都是调用相同的方法,所以没有必要为每一个对象分配方法空间)。
接着,程序运行到one.brand语句,将该语句从方法区加载到栈中,由于one是对对象的引用(地址),所以根据该引用找到了刚才在堆中分配的对象,然后访问该对象的成员变量。
接着程序运行到one.call();由于函数的执行需要在栈中进行,所以在栈中开辟一片新区域,并且将根据one找到堆中的对象,刚才提到堆中的对象里的成员函数实际是指向方法区的指针,所以执行的call()是从方法区中加载。将call()方法加载到新开辟的栈区域后程序流程跳转到该栈区域并且执行程序。当call()执行完后,分配的空间被回收。程序流程跳转到main方法中刚才离开的地方,也就是one.call()语句后并继续执行。同理,当main方法指向完后,分配的栈区域被回收。
来自某马培训
问题:
如有关于java程序详细执行的书籍请不吝赐教
相关视频连接:https://pan.baidu.com/s/1rI8RFjjK3hQrn1u-5wZk9Q

你可能感兴趣的:(java,基础)