简单解析java方法在调用在内存中的执行过程

 更新时间:2022年07月08日 16:38:44   作者:SSS4362  
这篇文章主要介绍了简单解析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.示例代码运行截图

到此这篇关于简单解析java方法在调用在内存中的执行过程 的文章就介绍到这了,更多相关java方法调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Class 解析器实现方法示例

    Java Class 解析器实现方法示例

    这篇文章主要通过对class文件的分析,介绍了Java Class 解析器实现方法示例,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • Java多线程之锁的强化学习

    Java多线程之锁的强化学习

    Java多线程的锁都是基于对象的,Java中的每一个对象都可以作为一个锁。这篇文章主要来通过一下示例为大家强化一下锁的相关知识的掌握,希望对大家有所帮助
    2023-02-02
  • SpringBoot + JPA @ManyToMany的操作要点说明

    SpringBoot + JPA @ManyToMany的操作要点说明

    这篇文章主要介绍了SpringBoot + JPA @ManyToMany的操作要点说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 选择java的理由:java之父访谈实录

    选择java的理由:java之父访谈实录

    选择java的理由:java之父访谈实录...
    2006-12-12
  • SpringCloud两种注册中心的实现

    SpringCloud两种注册中心的实现

    本文主要介绍了SpringCloud两种注册中心的实现,包括服务注册、服务拉取、负载均衡和实例权重配置等,具有一定的参考价值,感兴趣的可以了解一下
    2025-01-01
  • 5种Java中数组的拷贝方法总结分享

    5种Java中数组的拷贝方法总结分享

    这篇文章主要介绍了5种Java中数组的拷贝方法总结分享,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • java数组实现队列及环形队列实现过程解析

    java数组实现队列及环形队列实现过程解析

    这篇文章主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java超详细透彻讲解接口

    Java超详细透彻讲解接口

    接口是Java中最重要的概念之一,它可以被理解为一种特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成,本文给大家介绍Java接口,感兴趣的朋友一起看看吧
    2022-05-05
  • 5种Java经典创建型模式详解

    5种Java经典创建型模式详解

    这篇文章主要为大家详细介绍了5种Java经典创建型模式,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • idea克隆maven项目的方法步骤(图文)

    idea克隆maven项目的方法步骤(图文)

    这篇文章主要介绍了idea克隆maven项目的方法步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论