`
Turandot
  • 浏览: 53519 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Java 对象访问

阅读更多

                                                                   Java对象访问

 

     如果在方法中出现如下这句代码:Object obj = newObject();那Object obj这个引用变量会存放在java栈的本地变量表中,作为一个reference类型数据,它指向了一个对象的引用,即指向堆中对象起始地址的引用指针或一个代表对象的句柄,不同的虚拟机有不同的实现,而new Object()会在java堆中分配一块内存,用于存放Object类型的实例数据值,这块内存的大小是不固定的。此外,在java堆中还包含了能查找到此对象类型数据(对象类型、父类[当然Object没有父类]、实现的接口、方法等,这些类型数据存储在方法区中)的地址信息,即指向方法区的一个指针。reference类型指向了一个对象的引用,而不同的虚拟机在确定这个的具体位置时,有不同的实现,主流的有两种方式:

 

1、句柄访问方式:java堆中将会划分出一块内存来作为句柄池,reference中存放的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据的地址信息,如下图所示:


 

 

2、直接指针访问方式:reference中直接存放的就是对象的地址,如下图所示:

 

  

  

句柄访问方式的优点是reference中存放的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是很普遍的)时只会改变句柄中的实例数据指针,而reference本身不需要被修改。

         直接指针访问方式的优点是速度快,它节省了一次指针定位的时间开销,由于对象的访问在java中非常频繁,因此这类开销的执行成本也很高。Sun的HotSpot使用的就是这种对象访问方式。

1
1
分享到:
评论

相关推荐

    java 对象 内存 大小

    当我们谈论“Java对象内存大小”时,我们通常指的是一个Java对象在内存中占据的空间,包括对象头、实例字段以及可能的对齐填充。这个知识点对于开发高效缓存系统尤其重要,因为缓存需要精确管理内存来最大化存储效率...

    Java面向对象程序设计

    Java面向对象程序设计是编程领域中的重要主题,尤其在企业级应用开发中占据主导地位。本教程涵盖了这一关键概念,旨在帮助学习者深入理解和掌握Java的面向对象特性。以下是相关知识点的详细说明: 1. **面向对象...

    flex访问java对象

    根据给定的信息,本文将详细解释如何通过Flex访问Java对象,并提供一个具体示例来帮助理解整个过程。本文主要分为以下几个部分:环境搭建、Java类编写、配置文件编写、Flex应用编写以及最终运行效果。 ### 一、环境...

    jni对象获取,使用jni从c++里获取Java对象

    这个指针提供了许多函数,用于操作Java对象、调用Java方法和访问Java字段。 4. **获取Java对象** 要从C++中获取Java对象,首先需要有该对象的局部引用(Local Reference)。可以通过`JNIEnv`的`GetObjectClass()`...

    JAVA对象模块.rar

    Java对象模块是Java编程中的核心概念,它代表了程序中的数据和行为的组合。在Java中,对象是类的实例,而类则是对象的蓝图。理解这一模块的关键在于掌握类、对象、属性和方法等基本概念。 1. 类(Class): 类是...

    Java中对象与引用

    ### Java中对象与引用 在Java编程中,深入理解对象与引用的概念对于掌握面向对象编程至关重要。本文将从以下几个方面详细解析对象与引用的基本概念及其相互间的关系。 #### 一、对象与引用的基础概念 **对象**: ...

    java对象的 生命周期

    ### Java对象的生命周期详解 Java对象的生命周期是一个关键概念,涉及到对象从创建到销毁的整个过程。理解这一过程对于高效地编写和管理Java程序至关重要。 #### 创建对象的方式 对象的创建是生命周期的起点,...

    JAVA类与对象及数组习题

    JAVA类与对象及数组习题 JAVA类和对象及数组是JAVA编程语言的基础概念。下面是关于JAVA类和对象及数组的习题,涵盖了构造方法、继承、多重继承、变量声明、数组初始化等方面的知识点。 1. 构造方法的调用方式: ...

    Java面向对象程序设计耿祥义版课件

    Java面向对象程序设计是编程领域中的核心概念,尤其在企业级应用开发中占据了主导地位。耿祥义版的课程着重讲解了这一主题,通过PPT和源码的形式,旨在帮助学习者深入理解并掌握Java的面向对象特性。下面将详细阐述...

    JAVA对象所占内存大小计算例子

    本文将深入探讨如何计算Java对象所占内存,并通过提供的代码示例进行详细解析。 首先,我们需要理解Java对象内存占用的基本原理。每个Java对象都由三部分组成:对象头(Object Header)、实例数据(Instance Data)...

    Java面向对象程序设计课后答案全解

    Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)原则,为开发者提供了构建复杂软件系统的方法。本资源包含了该课程所有章节的课后习题答案,帮助学习者深入理解Java语言的面向对象...

    用java访问domino对象

    访问 Domino 对象使用 Java 本文主要介绍了使用 Java 访问 Domino 对象的基本编程方法。Domino 对象包括数据库、视图、文档等,可以通过 Java 程序来访问和操作。 首先,需要了解 Java 对 Domino 对象的访问是通过...

    Java面向对象应用程序开发

    Java面向对象应用程序开发是软件开发领域中的核心主题,尤其对于初学者和专业开发者而言,理解并掌握这一技术至关重要。Java语言以其强大的面向对象特性、跨平台兼容性以及丰富的类库,成为了开发各种类型应用程序的...

    Java面向对象程序设计+源代码+课后习题答案)

    Java通过访问修饰符(如public, private, protected)实现封装,以保护数据的安全性。 3. 继承:继承允许一个类(子类)从另一个类(父类)继承特性,减少代码重复,提高代码复用。Java中的继承使用`extends`关键字...

    java实例化对象的过程

    在Java编程语言中,实例化对象是创建类的实例,使其具有特定状态和行为的过程。这个过程涉及到几个关键步骤,让我们深入探讨一下。 首先,我们需要一个类,它是创建对象的蓝图。在Java中,我们使用`class`关键字来...

    java 子类对象赋值给父类对象的使用

    通过以上讨论,我们可以看到,Java中子类对象赋值给父类对象是一种强大且灵活的设计模式,它允许我们在代码中使用抽象的父类引用,从而简化编程,增加代码的通用性和可维护性。在实际项目中,合理利用这一特性,能够...

    Java面向对象编程练习题.pdf

    这展示了 Java 中类的成员变量的使用和访问。 知识点: * 类的成员变量 * 构造方法 * Scanner 对象的使用 * 条件语句的使用 练习题 02: 类的成员变量和方法 本练习题展示了 Java 中类的成员变量和方法的概念。...

    java课件面向对象

    在Java面向对象编程中,理解抽象、封装和类的设计是构建清晰、可维护和可扩展程序的基础。本文将详细探讨这些概念以及它们在Java语言中的实现。 首先,抽象是从具体的实例中提炼出共性,形成一般化概念的过程。在...

    Java反射机制,通过对象访问调用类的私有成员或方法

    Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这一机制的核心在于,Java程序可以获取到关于任何类的内部信息,包括类名、属性、方法、构造器等,并能在运行时...

Global site tag (gtag.js) - Google Analytics