java程序执行过程

 

Java User

java是JVM,执行java后就准备好了代码区,静态区,栈区,堆区。

执行User时现在代码区找看有没有User.class,如果没有就在环境里找classpath环境变量,classpath里面有很多路径,逐一在每个路径下找该User.class字节码(在硬盘上找),如果没找到就报类没找到的错误,

如果找到了就把字节码加到代码区,同时生成反射类(反射类可以了解到该类的信息)。

   字节码加载的过程中要对字节码进行扫描(三层安全扫描),看是否有非法的数据代码,但是java代码不可能有非法的数据代码,要是有就根本加载不到JVM里面来,在扫描的过程中就会发现该字节码里面定义了什么。只要发现static,不管方法还是属性,只要前面有static,就把该方法或属性加载到静态区(即把代码存到静态区里),

加载到静态区后分配内存。

只要进块(‘{’),就要在内存里开辟一块栈桢,遇到(‘}’)就出栈。

 

简单的说就是:

       代码区存放类;

       静态区存放静态的属性和静态的方法,直接分配内存;

       栈区存放变量;

       堆区在实例化类后即new该类后,存放该类的构造函数,非静态方法;

猜你喜欢

转载自blog.csdn.net/zxl1148377834/article/details/84193548