java程序执行流程

Java程序执行流程(大致描述了程序执行流程)
在这里插入图片描述
运行程序时候为程序分配三个区域:方法区(类的方法具体实现和类的成员变量声明),堆(咋地程序运行时候使用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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值