Java方法调用的过程是怎样的?

article/2025/10/8 15:35:17

写在前面

本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定Java虚拟机

解答

方法(Java中称为方法,其他语言一般称为函数)调用主要是通过栈来存储相关的数据,系统就方法调用者和方法如何使用栈做了约定,返回值可以简单认为是通过一个专门的返回值存储器来存储的。

补充

举例说明

上面的描述可能有点抽象,我们通过一个具体的例子来说明方法执行的过程:

public class Sum{public static int sum(int a, int b){int c = a * b;return c;}public static void main(String[] args){int d = Sum.sum(1, 2);System.out.println(d);}
}

当程序在 main 方法调用 Sum.sum 之前,栈的情况大概如图所示。

调用Sum.sum之前的栈示意图

在 main 方法调用 Sum.sum 时,首先将参数 1 和 2 入栈,然后将返回地址(也就是调用方法结束后要执行的指令地址)入栈,
接着跳转到 sum 函数,在 sum 函数内部,需要为局部变量 c 分配一个空间,而参数变量 a 和 b 则直接对应于入栈的数据 1 和 2,在返回之前,返回值保存到了专门的返回值存储器中。

在调用 return 后,程序会跳转到栈中保存的返回地址,即 main 的一条指令地址,而 sum 函数相关的数据会出栈,从而又变回上图中的样子。

main 的下一条指令是根据方法返回值给变量 d 赋值,返回值从专门的返回值存储器中获得。

在Sum.sum内部,准备返回之前的栈示意图

程序执行的基本原理

CPU有一个指令指示器,指向下一条要执行的指令,要么顺序执行,要么进行跳转(条件跳转或无条件跳转)。

具体到Java程序来说就是,程序从 main 方法开始顺序执行,方法调用可以看作一个无条件跳转,跳转到对应方法的指令处开始执行,
碰到 return 语句或者方法结尾的时候,再执行一次无条件跳转, 跳转回调用方,执行调用方法后的下一条指令。

上述流程存在下面的问题

  1. 参数如何传递?
  2. 方法如何知道返回到什么地方?
  3. 方法结果如何传给调用方?

解决思路

使用内存存放这些数据,方法调用方和方法自己就如何存放和使用这些数据达成一个一致的协议或约定。

这个约定就是

操作数栈 VS 寄存器

详情请见我的另一篇博客——JVM为什么采用面向操作数栈而不是寄存器的架构?


http://chatgpt.dhexx.cn/article/alPbNhe2.shtml

相关文章

在java中方法的三种调用方式

在java中方法的调用有三种方式: 先写主代码: public static int sum (int a,iny b){System.out.println("有结果显示");int result ab;return result; }1.单独调用:方法名(参数); sum(10,15);2…

惠普z840工作站linux,全模块战神 惠普旗舰级Z840工作站评测

【IT168 评测】对于设计师来说,无论是动漫设计还是工程制图,一款运行流畅、性能强大、安静稳定的工作站都是必要的选择。作为工作站市场的领军者,惠普早在多年前就进军工作站领域,并凭借Z800这样的高端产品树立了全新的形象。近日,我们收到了来自惠普送测的全新一代Z840工…

NVIDIA GPU显卡介绍

一、参考资料 NVCC学习笔记 NVIDIA GPU 架构演进 Nvidia GPU架构 - Cuda Core,SM,SP等等傻傻分不清? 请问英伟达GPU的tensor core和cuda core是什么区别? CUDA 专栏 二、相关概念 2.1 dGPU dGPU(discrete GPU&…

GPU结构设计初探

GPU结构设计 1. 框架设计 GPU 即 graphics process unit,图形处理单元,其主要功能在于图形渲染和合成,擅长于浮点运算和三角形生成填充处理; 本部分主要回答:GPU如何实现让自己擅长于图形渲染和合成操作&#xff1f…

大型三维GIS图形工作站

随着GIS应用的深入,人们越来越多地要求从真三维空间来处理问题。在应用要求较为强烈的部门如采矿、地质、石油等领域已率先发展专用的具有部分功能的三维GIS。所以大型三维GIS图形工作站应运而生。 UltraLAB H360/H370系列是一款配备intel第7代高频处理器&#xff0…

怎样配置更完美的图形工作站

现在网上太多计算机“专业人士”,推出各种图形工作站选购方案,似乎采购一台理想的图形工作站,是一件轻松简单事情。客户方面:资金充裕,买个高端的,资金比较紧,买个低端的,找个大品牌…

如何搭建自己的深度学习工作站?

硬件设备,是任何一名深度学习er不可或缺的核心装备。普通玩家都是标准设备,高端玩家都是自己动手搭建合适自己的GPU 工作站甚至GPU集群. 可是,各种主板、CPU、GPU、内存条、外设,那么多品牌种类型号参数,到底该怎么选?…

工作站 桌面 服务器,图形工作站也虚拟化,立即让你的工作站也可以远程访问

在虚拟化的今天,几乎所有的计算机资源都可以虚拟化,如CPU,内存,存储,网络,IO等等,但是我们很少听到图形卡的虚拟化,也就是我们今天提到的GPU虚拟化。 为什么需要GPU?相信不需要说太多…

GPU

一、GPU简介 1.GPU是什么: GPU是图形处理器(Graphics Processing Unit),计算机显卡的处理器. 2.GPU产生背景: 在GPU出世之前,处理2D、3D图像都依赖于CPU,这样会使”日理万机“的CPU更加劳累不…

GPU服务器Ubuntu环境配置教程及各种踩坑

博主的GPU服务器快要过期了,为了让其发挥更多的光和热,博主打算将系统重装,来分别感受下不同系统下的GPU服务器。哈哈哈 博主为了快速运行项目,在购买服务器时选择的是Pytorch 1.9.1 Ubuntu 18.04 ,该系统下会帮我们安…

图灵深度学习工作站介绍

Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一。虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生“自我”的意识。是的,在人类和大…

GPU是什么?有多大的用处?

想必大家最近都听说了GPU的断供的事件,但很多人却不知道GPU是什么?有多大的用处?下面就一起来了解一下吧。 GPU简介: GPU是Graphics Processing Unit的简写,是现代显卡中非常重要的一个部分,其中文名为图…

ShareStation工作站虚拟化,实现工作站共享使用

今年以来,由于挖矿导致显卡涨价,不少玩家成了等等党。公司需要给新报到设计师配置图形工作站,采购成本也暴涨。就拿以前不到3000的RTX3060TI为例,现在市场价格要7000-8000。但是工作不能耽误,等不起啊。经过对比测试&a…

NVIDIA-GPU 驱动程序安装

下面以GeForce RTX 2080TI GPU为例,基于ubuntu18.04进行驱动程序的安装。 1. 下载驱动程序 驱动程序下载链接:官方驱动 | NVIDIA 根据GPU型号,在如下下拉列表中进行选择,然后点击搜索按钮: 2. 安装驱动程序 1&…

工作站压力测试软件,胜任多种工作负载 联想P500工作站评测

【IT168 评测】对于设计师来说,无论是动漫设计还是工程制图,一款运行流畅、性能强大、安静稳定的工作站都是必要的选择。作为工作站市场的领军者,联想不久前推出了全新一代ThinkStation P系列工作站家族,颠覆以往命名,启用以“P”开头的全新命名规则,包括从入门级到旗舰级…

Sharestation 工作站GPU虚拟化,实现共享GPU办公

一 背景分析 今年以来,由于挖矿导致显卡涨价,不少玩家成了等等党。公司需要给新报到设计师配置图形工作站,采购成本也暴涨。就拿以前不到3000的RTX3060TI为例,现在市场价格要7000-8000。但是工作不能耽误,等不起啊。经…

移动工作站Windows10系统深度学习GPU环境搭建:CUDA+cuDNN+Pytorch

文章目录 前言一、查看CUDA版本二、CUDA、cuDNN1.CUDA10.2下载与安装2.cuDNN下载与安装 三、Pytorch安装 前言 CUDA(ComputeUnified Device Architecture)是NVIDIA推出通用并行计算架构,使GPU能够解决复杂的计算问题。 NVIDIA cuDNN是用于深度神经网络的GPU加速库。…

工作站 显卡 测试软件,CineBench R15测试:考验CPU+GPU_工作站移动工作站-中关村在线...

CineBench R15测试:考验CPUGPU能力 CineBench使用的是针对电影电视行业开发的Cinema 4D特效软件引擎,是很有说服力的一套CPU和显卡测试系统。考虑到惠普ZBook Studio G3搭配的是Windows 10 Pro 64操作系统,所以我们也选择了支持64位操作系统的…

在GPU工作站/服务器上运行代码及常用操作

服务器连接 本人所在的实验室服务器是安装了Ubuntu系统的台式机 首先,服务器是支持ssh远程连接的。在你的PC上,打开命令行,即可输入指令连接。(windows平台可以使用Xshell) 输入命令: ssh UserNameServ…

教程:个人深度学习工作站配置指南

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 来源丨https://zhuanlan.zhihu.com/p/336429888 导读 本文记录了组装深度学习工作站过程中的超详细操作流程&#xf…