Java(七) 句柄

2023-10-27

    在学习什么是句柄之前我们先学习虚拟机的对对象的访问方式

一、句柄访问方式:

使用句柄访问对象,会在堆中开辟一块内存作为句柄池,句柄中储存了对象实例数据(属性值结构体)的内存地址,访问类型数据的内存地址(类信息,方法类型信息),

对象实例数据一般也在heap中开辟,类型数据一般储存在方法区中。使用句柄访问的好处是句柄中储存的是稳定的对象地址,当对象被移动时候,只需要更新句柄中的对象实例部分的值即可,句柄本身不用被移动修改。
句柄方式访问
二、指针访问方式:
直接指针访问方式指reference中直接储存对象在heap中的内存地址,但对应的类型数据访问地址需要在实例中存储,使用直接指针的好处相对于句柄来讲,少了一次指针定位时间的开销,缺点是,当对象被移动时(如进行GC后的内存重新排列),对象的引用(reference)也需要同步更新。
指针访问方式
注意:sun公司的hotspot虚拟机使用的是第二种方式,在频繁的对象访问过程中,由于节省一次指针定位开销,积少成多后的性能提升影响非常可观。
以上学习于ruiqingliang 图来自于信念_

什么是句柄

    句柄(Handle)来标示应用程序中不同的对象和同类中不同的实例
    注意:句柄有人认为是指针、或者引用

下面就是一个简单的句柄(不怎么形象)

    class demo{
        @Test
        public void test(){
            String s;//句柄
            String s1=new String();句柄=实例对象
            s1 = "a";//通过句柄操作对象
            System.out.println(s1);
            System.out.println(s1.hashCode());
        }
    }

句柄最简单的例子就是,把句柄看作一个遥控器(鼠标),而对象看作电视机(电脑),你可以通过遥控器的发出的频率来控制电视显示的节目(通过鼠标控制电脑的软件,来达到自己的自定义界面)
可以把String s;看成创建句柄(遥控器),而 new String() 看成对象(电视)而中间的‘=’号,你可以看成连接介质
以上学习与行者24岁The灬Answer
方法运行解析

区分什么是指针/引用/句柄

1.指针是对象在内存中的地址;
2.引用是对象的别名,其实质就是功能受限但是安全性更高的指针;
3.句柄是指针的指针,句柄实际上是一个数据,是一个Long (整长型)的数据。句柄是一个标识符,是拿来标识对象或者项目的。

以上学习于jxiao_11

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java(七) 句柄 的相关文章

随机推荐

  • NAR神经网络预测

    1 该脚本用来做NAR神经网络预测 x 54167 55196 56300 57482 58796 60266 61465 62828 64653 65994 67207 66207 65859 67295 69172 70499 7253
  • C++学习笔记(一)(20120208 C++ Primer)

    C 语言中定义了几种基本类型 字符型 整型 浮点型 布尔型 字符类型有两种 char 和wchar t char类型通常是单个机器字节 byte wchar t类型常用于扩展字符集比如汉字和日语 这些字符集中的一些字符不能用单个char表示
  • 【C++】红黑树

    目录 引言 为啥设计红黑树 1 红黑树的特点 1 1相关概念 1 2插入的结点的颜色 2 红黑树的设计 2 1 结点设计 2 2基本框架 3 红黑树插入 3 1插入的介绍 3 2插入调整 情况一 情况2 情况3 4 查找实现 Find 5
  • 以太坊私有链-创世区块

    以下内容是学习笔记 原版视频在b站的 撸帝说 1 在docker上安装以太坊私有链 2 启动 3 进入以太坊容器 4 初始化创世区块 5 开启服务 6 创建以太坊账户 7 查看账户余额 8 再创建一个账户 来实现交易 9 转账 10 查看交
  • html转xml python_xml转换(Python)_xml

    前些天用python处理xml的转换的一个小程序 用来把xml xsl转换成html 用的libxml2 所以还要先安装了libxml2模块才能使用 coding mbcs usr bin python import libxml2 lib
  • 单元测试中的驱动程序和桩程序理解

    单元测试中的驱动程序和桩程序理解 运行被测单元 为了隔离单元 根据被测单元的接口 开发相应的驱动程序和桩程序 两者有什么区别呢 驱动程序 Driver 也称驱动模块 用于模拟被测模块的上级模块 能够调用被测模块 驱模块接受测试数据 调用被测
  • js实现颜色选择器

    前言 纯js就可以实现颜色选择器 不用安装很多的插件 和配置 也不必要有jquery才能使用 只是js文件就可以了 目录 实现原理 如果要获取当前的颜色 可以获取结论的背景 或者再返回的函数里面直接写赋值 实现步骤 1 引入封装js文件 c
  • CheckStyle报错的常见问题及解决方式

    CheckStyle报错的常见问题及解决方式 声明 本文摘自百度文库 希望这篇文章提到的规范能对大家编程起到好的效果 此文不定期更新 将推出更加详尽的编程规范 1 提示 Type is missing a javadoc commentCl
  • vue v-model.number 和 type=“number“详解

    1 v model number详解 当两个input都输入非数字时 v model number和v model的值都不会转为Number类型 当两个input都输入数字时 v model number的值会转为Number类型 v mo
  • 1.Ajax基础——XMLHttpRequest、Get/Post、封装Ajax

    1 XMLHttpRequest Ajax技术核心是XMLHttpRequest对象 简称XHR 背景 在XHR出现之前 Ajax式通信必须借助hack手段来实现 大多数是使用隐藏的框架和内嵌的框架
  • 【Linux系统之虚拟化实战】PVE下KVM虚拟机的嵌套安装方法

    Linux系统之虚拟化实战 PVE下KVM虚拟机的嵌套安装方法 一 检查本地系统环境 1 环境规划 2 检查PVE宿主机系统版本 3 检查PVE虚拟机系统版本 二 开启PVE宿主机虚拟化 1 检查PVE主机嵌套虚拟化是否开启 2 PVE主机
  • vue 将public文件下的图片引入.vue文件内

    data return publicPath process env BASE URL div 11 div
  • vue实现打印功能

    vue实现打印功能 安装npm i vue print nb 在main js中引入并注册 打印 import Print from plugins print 注册 Vue use Print 3 公共的js方法 我写在plugins里面
  • python输出100以内的素数

    可以使用以下代码来输出100以内的素数 for num in range 2 101 for i in range 2 num if num i 0 break else print num 这段代码使用了一个双重循环 外层循环遍历从2到1
  • 数字信号处理 --- 周期信号的三角函数表示 一(三角函数的性质和三角波的合成)

    三角函数的性质 一系列三角函数谐波 harmonic sinusoids 是傅里叶分析的基石 我们可以用这些不同频率的谐波构建各种各样的信号 波形 谐波 harmonics 现在我们选择一个频率为f0的任意频率 arbitrary freq
  • 杂谈:更新PowerShell 7.0.0后如何激活Anaconda环境?

    Preface 日前微软更新Powershell Core的版本至7 0 0 带来了很多新的特性 也带来了很多不同之处 例如启用了新的安装位置 去掉了Core的名称以及启用了新的可执行文件名称 将powershell exe修改为pwsh
  • 网络模型——OSI模型与TCP/IP模型

    文章目录 一 OSI七层模型 二 TCP IP协议 五层体系 三 OSI 参考模型与 TCP IP 参考模型的区别 四 TCP IP 五层协议的通信方式 OSI模型与TCP IP模型 对比如下 一 OSI七层模型 各层功能 应用层 应用层位
  • nginx(三十六)健康检查

    一 ngx http upstream module 官方自带 server 1 该指令用于 指定后端服务器 的名称和 optional 参数 2 服务器的名称可以是一个 域名 一个 ip地址 端口号或 unix socket upstre
  • 中间表示- 三地址码

    使用三地址码的编译器结构 三地址码的基本思想 1 给每个中间变量和计算结果命名 没有复合表达式 2 只有最基本的控制流 没有各种控制结构 if do while for等等 只有goto call等 3 所以三地址码可以看成是抽象的指令集
  • Java(七) 句柄

    在学习什么是句柄之前我们先学习虚拟机的对对象的访问方式 一 句柄访问方式 使用句柄访问对象 会在堆中开辟一块内存作为句柄池 句柄中储存了对象实例数据 属性值结构体 的内存地址 访问类型数据的内存地址 类信息 方法类型信息 对象实例数据一般也