文档章节

对象访问

叶知秋
 叶知秋
发布于 2014/06/11 21:10
字数 705
阅读 25
收藏 0
点赞 1
评论 0

对象访问在Java语言中无处不在,是最普通的程序行为,单即使是最简单的访问,也会涉及到Java虚拟机栈、Java堆、方法区这三个最重要的内存区域之间的关联关系。如下代码:

Object obj = new Object();

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

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

  • 使用句柄:Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息。如下图:

 

  • 直接指针:Java堆对象的布局需要考虑如何放置访问类型数据的相关信息,reference中直接存储的就是对象的地址。如下图:

  

    这两种对象的访问方式各有优势,使用句柄访问方式的最大好处就是reference中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要被修改。
    使用直接指针访问方式的最大好处就是速度更快,它节省了一次指针定位的时间开销,由于对象的访问在Java中非常频繁,因此这类开销积少成多后也是一项非常可观的执行成本。就虚拟机Sun HotSpot而言,它是使用第二种方式进行对象访问的,但从整个软件开发的范围来看,各种语言和框架使用句柄来访问的情况也十分常见。

© 著作权归作者所有

共有 人打赏支持
叶知秋
粉丝 24
博文 78
码字总数 103570
作品 0
浦东
程序员
复习 类的属性总结 类的方法总结

1.类的属性总结 脚本练习: 2.打印各种类的属性 (1)访问类的公有属性 执行结果: (2)访问类的私有属性 执行结果: 不建议使用这种方式访问类的私有属性,只是为了测试。 (3)访问对象的公...

ln286577399 ⋅ 2017/12/04 ⋅ 0

PHP的static与Java的static的对比

在Java中类的静态变量/静态方法又称之为类变量 /类方法,它们存在于内存栈中,只有一份,可以通过类和对象直接访问 public class MyStatic { public static String className = "MyStatic";...

big_cat ⋅ 2015/09/30 ⋅ 2

page request session application 范围

在JSP页面中的对象,包括用户创建的对象(例如,JavaBean对象)和JSP的隐含对象,都有一个范围属性。范围定义了在什么时间内, 在哪一个JSP页面中可以访问这些对象。例如,session对象在会话...

itfanr ⋅ 2014/11/21 ⋅ 0

文件和目录的访问控制(3) 访问规则

文件和目录的访问控制(3) 访问规则 访问规则有两种类型:“允许”(allow)和“拒绝”(deny)。可以通过检查规则的AccessControlType属性来确定相应规则的类型。按照约定,拒绝规则总是优先...

zting科技 ⋅ 2017/01/11 ⋅ 0

Struts中的Value Stack Contents 和Stack Context

上次说到再JSP页面使用进行<s:debug>进行调试;可以看见Value Stack Contents 和Stack Context,它们到底代表什么含义呢? 一、获取Value Stack Content 在Action中可以通过ActionContext获取...

小伟_乌牛 ⋅ 01/10 ⋅ 0

jvm对象访问

jvm对象访问方式: 对象访问可分为间接(句柄)访问和直接访问。 间接(句柄)访问: 句柄访问方式优势:当java虚拟机GC移动堆对象时,并不需要修改reference,只需修改句柄对象的实例数据指针。...

ihaolin ⋅ 2014/03/28 ⋅ 0

设计模式学习笔记之-代理模式

代理模式中,客户不会直接调用目标对象而是通过一个代码对象,客户调用代理对象代理对象去调用目标对象,起到对象与对象间的隔离作用。有时候我么不想直接访问目标对象,有时候我们不能直接访...

申文波 ⋅ 03/05 ⋅ 0

ThreadLocal类优化并发

防止任务在共享资源上产生冲突的第二种方式是根除对变量的共享。 就是在一个线程里面存在的,是线程安全的 概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,比...

之渊 ⋅ 2016/11/04 ⋅ 0

WINDOWS内核对象

内核对象的基本理解 内核对象,就是由操作系统内核创建、管理的对象,比如信号量、互斥量、文件等,我们在使用这些内核对象时,这能通过句柄去访问。 1. 内核对象的创建:用户通过系统提供的...

西昆仑 ⋅ 2012/10/02 ⋅ 0

哪个对象才是锁?

我们都知道当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。这些基础也许大家都知道,但是很多人还是搞不清哪个对象才是锁?如果你能正确回答以下问题,那么...

LCZ777 ⋅ 2014/05/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根...

xiaomin0322 ⋅ 26分钟前 ⋅ 0

WampServer默认web服务器根目录位置

安装WampServer之后的web服务器根目录默认位置在WampServer安装目录下的www:

临江仙卜算子 ⋅ 27分钟前 ⋅ 0

Redux的一些手法记录

Redux Redux的基本概念见另一篇文。 这里记录一下Redux在项目中的实际操作的手法。 actions 首先定义action.js,actions的type,可以另起一个action-type.js文件。 action-type.js用来存...

LinearLaw ⋅ 28分钟前 ⋅ 0

android 手势检测(左右滑动、上下滑动)

GestureDetector类可以让我们快速的处理手势事件,如点击,滑动等。 使用GestureDetector分三步: 1. 定义GestureDetector类 2. 初始化手势类,同时设置手势监听 3. 将touch事件交给gesture...

王先森oO ⋅ 42分钟前 ⋅ 0

java 方法的执行时间监控 设置超时(Future 接口)

java 方法的执行时间监控 设置超时(Future 接口) import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor......

青峰Jun19er ⋅ 47分钟前 ⋅ 0

一名开源小白的Apache成长自述

今天收到了来自Apache Vote我成为Serviceomb项目Committer的邮件,代表自己的贡献得到了充分的肯定;除了感谢团队的给力支持,我更希望将自己的成长经历——如何践行Apache Way的心得介绍给大...

微服务框架 ⋅ 49分钟前 ⋅ 0

vim介绍、颜色显示和移动光标、一般模式下复制、剪切和粘贴

1.vim 是 vi 的升级版 vim 是带有颜色显示的 mini安装的系统,一般都不带有vim [root@aminglinux-128 ~]# yum install -y vim-enhanced已加载插件:fastestmirror, langpacksLoading mir...

oschina130111 ⋅ 49分钟前 ⋅ 0

Deepin 操作系统四面楚歌

作为国内做的最好的 Linux 发行版,源自 Debian sid 的 Deepin 目前正面临重重困境,新版本不断延期,开发人员离职,bug 长期得不到修复,和 Debian/Ubuntu 的兼容性问题也面临越来越严重的挑...

六库科技 ⋅ 50分钟前 ⋅ 0

MyBatis之动态sql

我们需要知道的是,使用mybatis重点是对sql的灵活解析和处理。在原先的UserMappser.xml中,我们这样查询表中满足条件的记录 : 123 <select id="findUserList" parameterType="userQuery...

瑟青豆 ⋅ 50分钟前 ⋅ 0

这届俄罗斯世界杯的冷门那么多怎么办?

最纯粹的世界杯,最神奇的大冷门。 德国0比1被墨西哥摩擦了。 日本历史性的赢了哥伦比亚。 C罗也挑平了西班牙。 梅西被冰岛狮吼吼愣神了。 就连11次进世界杯4强的巴西也被瑞士逼平了。 天台已...

开源中国众包平台 ⋅ 51分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部