当前位置: 首页 > news >正文

从JVM方面解释java传递问题

前言:

Java传递问题,网上解释的比较多,大多是从代码和传递的规范的层次来解释。前段时间,自己也一直在思考这个问题,大部分的解释让我很难印象深刻,经常忘,刚好看过一点jvm方面的书,思考了一阵,觉得从jvm方面的这个解释更能让我印象深刻,废话不多说,直接上干货。

传递方式:

1.值传递:

  • 在传值调用中,实际参数先被求值,然后其值通过复制,被传递给被调函数的形式参数。因为形式参数拿到的只是一个"局部拷贝",所以如果在被调函数中改变了形式参数的值,并不会改变实际参数的值。

2.引用传递:

  • 在传引用调用中,传递给函数的是它的实际参数的隐式引用而不是实参的拷贝。因为传递的是引用,所以,如果在被调函数中改变了形式参数的值,改变对于调用者来说是可见的。

结论:

Java是值传递。

原因:

Java虚拟机栈中的结构是栈帧,栈帧中存放着局部变量表( 局部变量表(Local Variables Table)是一组变量值的存储空间,用于存放方法参数和方法内部定义 的局部变量。 (局部变量表存放了编译期可知的各种Java虚拟机基本数据类型(boolean、byte、char、short、int、 float、long、double)、对象引用reference类型,它并不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或者其他与此对象相关的位置)和returnAddress 类型(指向了一条字节码指令的地址)。 ),里面的单位是变量槽。在基本数据类型时,存放的值,在引用数据类型时,存放的是内存地址。所以在传递时,实际赋值的都是变量槽中内容。

reference类型表示对一个对象实例的引用,《Java虚拟机规范》既没有说明它的长度,也没有明确指出这种引用应有怎样的结构。但是一般来说,虚拟机实现至少都应当能通过这个引用做到两件事情,一是从根据引用直接或间接地查找到对象在Java堆中的数据存放的起始地址或索引,二是根据引用直接或间接地查找到对象所属数据类型在方法区中的存储的类型信息,否则将无法实现《Java语言规范》中定义的语法约定。第8种returnAddress类型目前已经很少见了,它是为字节 码指令jsr、jsr_w和ret服务的,指向了一条字节码指令的地址,某些很古老的Java虚拟机曾经使用这几条指令来实现异常处理时的跳转,但现在也已经全部改为采用异常表来代替了。

上面一部分引用的是《深入理解Java虚拟机:JVM高级特性与最佳实践》一书中的部分内容,以及自己所思考的结果,有兴趣的可以自己查阅。

相关文章:

从JVM方面解释java传递问题

前言: Java传递问题,网上解释的比较多,大多是从代码和传递的规范的层次来解释。前段时间,自己也一直在思考这个问题,大部分的解释让我很难印象深刻,经常忘,刚好看过一点jvm方面的书&#xff0c…...

Oracle查询用户所有表的语句

下面为您介绍的语句用于实现Oracle查询用户所有表,如果您对oracle查询方面感兴趣的话,不妨一看。 -- 查询所有用户的表,视图等 select * from all_tab_comments -- 查询本用户的表,视图等 select * from user_tab_comments --查询所有用户的表的列…...

Python轮廓追踪【OpenCV形态学操作】

文章目录 概要代码运行结果 概要 一些理论知识 OpenCV形态学操作理论1 OpenCV形态学操作理论2 OpenCV轮廓操作|轮廓类似详解 代码 代码如下,可以直接运行 import cv2 as cv# 定义结构元素 kernel cv.getStructuringElement(cv.MORPH_RECT, (3, 3)) # print kern…...

安全狗安装

安装waf 关闭apache程序及httpd.exe进程; 运行cmd,cd进入apache/bin文件夹目录, 执行httpd.exe -k install -n apache2.4.39; 启动apache,启动phpstudy 安全狗安装服务名称填写apache2.4.39; 安装安全狗之后就会提示报错 可以设备黑白名单...

HTTP发起请求与收到响应的大致过程

可以《《透视 HTTP 协议》Windows 10 搭建最小实验环境》搭建环境,之后才能进行下边的操作。 1.鼠标左键点击两下www目录下的start.bat批处理文件。 2.打开Wireshark,然后选择Adapter for loopback traffic capture。 3.然后把tcp.port 80 || udp.…...

c++继承的小细节

子类不会继承父类的构造函数,但是会调用父类无参数的构造函数。调用父类构造方法,可以在子类的构造函数后加冒号和要调用的构造方法。子类转化为父类,或者父类转换为子类后,虚函数列表也被转换。...

【分享】7-Zip压缩包的密码可以取消吗?

7-Zip压缩包设置了“密码保护”,后面又不想要了,可以取消吗? 首先,我们要分两种情况来看,是记得密码,但不想每次打开压缩包都要输入密码,所以想取消密码,还是把密码忘记了所以想取消…...

learning rate

这里写目录标题 learning rate单一固定(one-size-fits-all)的学习率Model训练到驻点很困难(学习率太大不能收敛,学习率太小收敛太慢) 如何客制化学习率?- 引入参数σσ常见的计算方式 - Root mean square&a…...

小型气象站数据采集网关准确监测雨量和风速

随着科技的发展,人们对天气信息的需求也愈发增加。天气是每个人生活中不可或缺的一部分,了解准确的天气信息有助于我们做出合理的决策和安排。在小型气象站数据采集中,一个关键的环节是监测雨量和风速。而小型气象站数据采集网关的出现&#…...

C++常见容器实现原理

引言 如果有一天!你骄傲离去!(抱歉搞错了)如果有一天,你在简历上写下了这段话: 那么你不得不在面试前实现一下STL常见的容器了。C的常用容器有:vector、string、deque、stack、queue、list、se…...

Mysql数据库 5.SQL语言聚合函数 语言日期-字符串函数

一、聚合函数 SQL中提供了一些可以对查询的记录的列进行计算的函数——聚合函数 1.count() 统计函数,统计满足条件的指定字符的值的个数 统计表中rebirth_mood个数 select count(列名) from 表名; #统计表中rebirth_namelcl的个数 select …...

使用Linux JumpServer 堡垒机进行远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…...

postgresql14管理(五)-tablespace

基本概念 表空间tablespace在postgresql中,表示数据库对象(比如表或索引)的存放目录。当表被访问时,系统通过表空间定位到对应数据文件所在的位置。 优势: 1、如果数据库集群所在的初始磁盘分区或磁盘卷的空间不足&a…...

Echarts-3D柱状图

通过Echarts的echarts.graphic.extendShape实现真正的3D柱状图 思路就是通过调整顶部面(CubeTop)、左侧面(CubeLeft)、右侧面(CubeRight)来决定柱状图的宽窄 建议优先调整顶部面,一般c1不需要动 // echarts-3D-bar-config.js import Vue from "vue";cons…...

vue中组件传值 引用页面与组件页面绑定参数 vue省市地区街道级联选择组件

在做后台的时候需要用到地区级联选择器 然后就自己封装了一个 其中 组件页面中 export default {props: { //使用value接收引用页面的绑定值value: [String]},watch: {value: {handler(val) {//val 以及 this.value 都可以获取到引用页面的绑定值},deep: true,immediate: tr…...

componentDidMount只执行一次的解决方法

一、前言 最近写react antd前端项目,需要页面加载时调用下查询列表的接口。 于是在componentDidMount方法里这样写了: componentDidMount() {const {dispatch,MyJS: { queryPara },} this.props;//这个调用接口查询列表dispatch({ type: MyJS/fetch, …...

React之diff原理

一、是什么 跟Vue一致,React通过引入Virtual DOM的概念,极大地避免无效的Dom操作,使我们的页面的构建效率提到了极大的提升 而diff算法就是更高效地通过对比新旧Virtual DOM来找出真正的Dom变化之处 传统diff算法通过循环递归对节点进行依…...

ElasticSearch中关于Nasted嵌套查询的介绍:生动案例,通俗易懂,彻底吸收

题注:随着对ES接触的越来越深入,发现此前了解的ES知识点有点单薄,特此寻来ES知识点汇总成的一个思维导图,全面了解自己掌握了哪些,未掌握哪些。此外,作者斌并没有足够的精力学习ES全部的知识点,…...

系列二、Spring的优缺点是什么

一、Spring的优缺点是什么 1.1、优点 集中管理对象,降低对象和对象之间的耦合性,方便维护对象;在不修改代码的情况下可以对业务代码进行增强,减少重复代码,提高开发效率,方便维护;提高开发效率…...

ESP32网络开发实例-HTTP-GET请求

HTTP-GET请求 文章目录 HTTP-GET请求1、HTTP GET请求2、软件准备3、硬件准备4、代码实现4.1 向OpenWeatherMap请求天气数据4.2 ThingSpeak 中的 ESP32 HTTP GET(更新值)在本文中,我们将介绍如使用ESP32向 ThingSpeak 和 openweathermap.org 等常用 API 发出 HTTP GET 请求。…...

PHP:json_encode和json_decode用法

json_encode 函数用于将 PHP 数据结构转换为 JSON 字符串。json_decode 函数用于将 JSON 字符串转换为 PHP 数据结构。 // 将 PHP 数据结构转换为 JSON 字符串 $data ["name" > "John","age" > 25,"city" > "New York&…...

Kafka-Java二:Spring配置kafka消息发送端的缓冲区

一、涉及到的组件概念 1.1、缓冲区 1.2、本地线程 1.3.本地线程消息推送策略 二、各组件的解释参见代码注释 // 配置消息的缓冲区/** 设置消息发送者端的缓冲区大小,如果设置了缓冲区,消息会先发送到缓冲区,可以提供发送性能* 默认大小是32…...

【ArcGIS模型构建器】05:批量为多个矢量数据添加相同的字段

本文实现借助arcgis模型构建器,实现批量为多个土地利用矢量数据添加相同的字段,例如DLMC,DLTB等。 文章目录 问题分析模型构建问题分析 有多个土地利用数据矢量图层,每个图层中有很多个图斑,现在需要给每个图层添加一个或者多个字段,如DLCM,DLBM等。 属性表如下所示: …...

坤坤的悲伤生活

描述 坤坤,这几个月来都非常悲伤,因为自己事发了,有一些问题找上了门,这个时候,有个人进献了一个阿拉丁神灯,有个灯神能够解决掉这个问题,但是有前提,必须回答出它的问题&#xff0c…...

职业技术认证:《研发效能(DevOps)工程师》——开启职业发展新篇章

在互联网行业中,资质认证可以证明在该领域内的专业能力和知识水平。各种技术水平认证也是层出不穷,而考取具有公信力和权威性的认证是从业者的首选。同时,随着国内企业技术实力的提升和国家对于自主可控的重视程度不断提高,国产证…...

gin 框架出现runtime error: index out of range [0] with length 0

之前是这样的: category : c.Request.Form["type"][0] 加上这一句就变成了 fmt.Println(c.Request.FormFile("type")) category : c.Request.Form["type"][0]...

【高阶数据结构】B树

目录 1.B树 2.B树和B树的不同 3.B*树 B树较于哈希红黑树的优势:外查找:读取磁盘数据 ; B树的高度更低,对磁盘的进行I/O操作的次数更少(磁盘的性能比内存差得多); 1.B树 1.1.B树的概念&am…...

Android-Framework 应用间跳转时,提供 Android Broadcast 通知

一、环境 高通865 Android 10 二、情景 应用跳转时,通过广播发送源app的包名和目标app的包名 三、代码实现 frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java -132,6 132,14 import java.io.PrintWriter;import java.text.DateFormat;imp…...

【Javascript】函数返回值的作用

目录 返回值 中断函数 只能写在函数体里面 返回值 function a(){var b3;return b3? 4:5;} console.log(a()); 创建一个函数,给b赋值3, return b3? 4:5; 判断b是不是等于3,如果是就返回4, 如果不是就返回5 中断函数…...

蓝桥杯 Java k倍区间

前缀和的一个神奇算法,这道题暴力是遍历前缀和的差,也就是遍历所有区间和看他是不是能不能正好除尽k 这道题的技巧是将所有前缀和和k求余 按照求余的结果放在一个数组中 那么余数为0的前缀和a一定满足要求([0,a]) 余数相同的两两…...