简单解析java方法在调用在内存中的执行过程
作者:SSS4362 发布时间:2022-04-12 15:46:26
标签:java,方法,调用,内存,执行,过程
一.前提
1.栈的内存原理图
2.JVM是怎么运行方法的???
1.在运行阶段的时候,classLoader类加载器会把class文件中方法对应的代码片段放入内存区中的方法区中,以便于下次调用方法时,还能使用该方法。
2.JVM在运行过程中,会把方法里面的代码块按照方法调用的先后顺序压栈入内存中的栈空间,按照方法里语句的执行顺序(从上到下,从里到外)去进行弹栈与运行操作
二.调用(执行)过程
1.方法调用时的规则
方法首次调用时,会通过类加载器将方法的对应的代码块加载到内存中方法区
每次调用方法时相当于一次压栈过程,当方法里面的语句全部执行完毕,就会把该方法进行弹栈操作(若不弹栈的话,到某个时候必会产生堆栈溢出异常)
2.示例代码
public class Practice {
public static void main(String[] args) {
System.out.println("main 开始");
show1();
System.out.println("main 结束");
}
public static void show1(){
System.out.println("show1 开始");
show2();
System.out.println("show1 结束");
}
public static void show2(){
System.out.println("show2 开始");
System.out.println("show2 结束");
}
}
3.整个程序的方法调用的过程图
3.1 JVM会自动调用main方法,因此main方法首先压栈,然后依次执行main方法里面的语句
3.2 当遇到show1()方法时,会把show1()方法压栈,并去执行show1方法里面的语句
3.3 执行show1方法里面的语句时,当执行到show2()时,show1方法暂停,然后对show2方法压栈,然后执行show2方法的内容
3.4 当执行完show2方法里面的内容时,会对show2方法进行弹栈,返回至show1方法中调用show2方法的位置,若没有对返回值有赋值操作,就会去执行后面的语句
3.5 执行完show1方法后会对show1方法进行弹栈,返回show1方法调用处的位置,然后去执行show1方法调用处以及后面的语句
4.示例代码运行截图
来源:https://blog.csdn.net/SSS4362/article/details/125653426
0
投稿
猜你喜欢
- 基本概念:类加载的过程大致分为三个阶段1、加载阶段:本阶段主要把class的二进制代码加载进入JVM,并且进行常量池(类名,方法名,字段名)
- 0.前言HashMap简述:HashMap 基于哈希表的 Map 接口实现,是以 key-value 存储形式存在,即主要用来存放键值对。H
- 1. SpEL 回顾经过上篇文章的学习,小伙伴们已经知道了,在 Spring Security 中,@PreAuthorize、@PostA
- 平时用到的库仓库名地址备注mavenCentralhttps://repo1.maven.org/maven2/
- MediaQuery通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当前设备的信息,用法如下:
- 本文实例总结了Android开发中Toast显示消息的方法。分享给大家供大家参考,具体如下:Android中提供一种简单的Toast消息提示
- 引言java中的Math.random()是一个在[0,1)范围等概率返回double数值类型的算法,基于此函数,我们来延申一些随机概率算法
- 公司的老项目要改造多租户,于是进入了大坑,本文写点遇到的坑以及解决方案,每次遇到问题在网上搜了好久,记录下来,防止以后忘掉。(一).方案网上
- springboot + docker + jenkins自动化部署项目,jenkins、mysql、redis都是docker运行的,并且
- 前言开发传统Java WEB工程时,我们可以使用JSP页面模板语言,但是在SpringBoot中已经不推荐使用了。SpringBoot支持如
- 创建类第一步新建一个java类QSV,构造函数传入需要解析的文件名称。public class QSV {private RandomAcc
- @ConfigurationProperties加载外部配置@ConfigurationProperties可以将外部配置文件(比如appl
- 在项目里,我需要做一个Spring Boot结合Thymeleaf前端模版,结合JPA实现分页的演示效果。做的时候发现有些问题,也查了现有网
- spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现
- 什么是JMMJMM全称Java Memory Model, 中文翻译Java内存模型,一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问
- package dao;import java.sql.*;public class BaseDao { //oracle//&n
- using System; using System.Collections.Generic; using System.Text; usi
- 分类1.简单工厂模式2.工厂方法模式3.抽象工厂模式案例需求根据蛋糕的不同口味,分别创建苹果味和香蕉味的蛋糕实例方案一:简单工厂模式定义蛋糕
- 用了MyBatis的同行,应该见过foreach,它一般是这样用的:<select id="foreachTest"
- mybatis多个区间处理如图:要实现车辆数不同区间查询条件思路a.前端传数组,数组里面放"1-5"String类型值