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

Java虚拟机学习 - 对象访问

 

Java虚拟机学习 - 对象访问

分类: JVM   9280人阅读  评论(17)  收藏  举报

对象访问会涉及到Java栈、Java堆、方法区这三个内存区域。

如下面这句代码:

[java]  view plain copy print ?
  1. Object objectRef = new Object();  

       假设这句代码出现在方法体中,"Object objectRef” 这部分将会反映到Java栈的本地变量中,作为一个reference类型数据出现。而“new Object()”这部分将会反映到Java堆中,形成一块存储Object类型所有实例数据值的结构化内存,根据具体类型以及虚拟机实现的对象内存布局的不同,这块内存的长度是不固定。另外,在java堆中还必须包括能查找到此对象类型数据(如对象类型、父类、实现的接口、方法等)的地址信息,这些数据类型存储在方法区中。

      reference类型在java虚拟机规范里面只规定了一个指向对象的引用地址,并没有定义这个引用应该通过那种方式去定位,访问到java堆中的对象位置,因此不同的虚拟机实现的访问方式可能不同,主流的方式有两种:使用句柄和直接指针。

             

             句柄访问方式:java堆中将划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息。

指针访问方式:reference变量中直接存储的就是对象的地址,而java堆对象一部分存储了对象实例数据,另外一部分存储了对象类型数据。


这两种访问对象的方式各有优势,使用句柄访问方式最大好处就是reference中存储的是稳定的句柄地址,在对象移动时只需要改变句柄中的实例数据指针,而reference不需要改变。使用指针访问方式最大好处就是速度快,它节省了一次指针定位的时间开销,就虚拟机而言,它使用的是第二种方式(直接指针访问)。

本文原文链接:http://blog.csdn.net/java2000_wl/article/details/8015105 转载请注明出处!


来源: <http://blog.csdn.net/java2000_wl/article/details/8015105>
 


来自为知笔记(Wiz)


转载于:https://www.cnblogs.com/renhq/p/4670797.html

相关文章:

  • 20款Notepad++插件下载和介绍
  • ios协议
  • UIComponent的生命周期(life cycle)
  • spring(一)IOC AOP
  • 深入分析Flex [Bindable] 以及使用方法
  • indy10 学习2
  • 一个网页设计需求方眼中的网页设计
  • 正则表达式入门以及记录
  • 谈谈网页设计师的成长之路
  • 07.常用的SQL语句
  • 初步接触html心得
  • AS3所有类的接口实现一览表
  • 分页查询中绑定变量
  • Oracle11g字符集AL32UTF8修改为ZHS16GBK详解
  • 我参加了“2010年度十大杰出IT博客”大赛,请朋友们支持!
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • co.js - 让异步代码同步化
  • co模块的前端实现
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • gulp 教程
  • jquery ajax学习笔记
  • Linux各目录及每个目录的详细介绍
  • Sass 快速入门教程
  • spring学习第二天
  • Swift 中的尾递归和蹦床
  • vue-router的history模式发布配置
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 二维平面内的碰撞检测【一】
  • 翻译:Hystrix - How To Use
  • 关于springcloud Gateway中的限流
  • 经典排序算法及其 Java 实现
  • 实现简单的正则表达式引擎
  • 微信开放平台全网发布【失败】的几点排查方法
  • 我感觉这是史上最牛的防sql注入方法类
  • 用Visual Studio开发以太坊智能合约
  • 怎么将电脑中的声音录制成WAV格式
  • 7行Python代码的人脸识别
  • Linux权限管理(week1_day5)--技术流ken
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #每日一题合集#牛客JZ23-JZ33
  • (C#)一个最简单的链表类
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Note)C++中的继承方式
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (九)c52学习之旅-定时器
  • (六)Hibernate的二级缓存
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)linux文件内容查看
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案