Java中对象的访问

15人阅读 评论(0) 收藏 举报
分类:

1、举例:实例化一个对象

1、对象的创建


补充:

  • 指针碰撞:指针向空闲空间移动和对象内存大小相等的距离



  • 空闲列表:从空闲列表里面选择一个足够大的空间分配给对象


  • 对象创建的线程安全性:当使用指针碰撞进行对象内存分配的时候,如果给对象A分配了内存,指针还没来得及修改,又为对象B分配了内存。

方案一:对分配内存空间操作进行同步处理:采用CAS配上失败重试的方式保证更新操作的原子性

方案二:为每个线程在Java堆中预先分配一个本地线程分配缓冲区TLAB,使得不同的线程分配在不同的空间执行。哪个线程需要分配,就在对应的TLAB执行。

2、对象的内存布局


补充:

  • 运行时数据:32bit/64bit,俗称“mark word”,用于存储哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等
  • 类型指针:对象指向类元数据的指针,用于确定对象属于哪个类的实例
  • 数组长度:针对对象为数组类型
  • 实例数据:存储顺序根据虚拟机分配策略参数和字段在Java源码中的定义顺序。父类定义的变量出现在子类之前。如果compactFields为true,那么子类的较窄的变量可以插在父类的缝隙中。
  • 对齐填充:对象的大小为8字节的整数倍

3、Java虚拟机栈访问Java堆中的对象

  • 句柄访问:从Java堆分出一部分内存区域作为句柄池,一部分作为实例池。用于存放对象实例数据指针和对象类型数据指针。Java虚拟机栈中的reference类型的本地变量存储的是句柄的地址
  • 优点:对象移动只会改变对象实例数据的指针。不会改变Java虚拟机栈中的reference类型变量的值


  • 直接指针访问:Java虚拟机栈中的reference类型的引用类型的变量存储的是对象的地址
  • 优点:快速高效,减少中间一次句柄地址指针定位开销



查看评论

java对象的访问

java对象的访问我们都知道一般访问和操作对象都是通过引用来操作和访问对象。目前对象的访问方式有句柄和直接指针:1、如果使用句柄访问的话,那么java堆中将会划分出一块内存作为句柄池,referenc...
  • LZH984294471
  • LZH984294471
  • 2016-06-24 16:15:07
  • 476

用java访问domino对象

  • 2010年04月26日 16:20
  • 137KB
  • 下载

java对象的访问定位方式

java对象在访问的时候,我们需要通过java虚拟机栈的reference类型的数据去操作具体的对象。由于reference类型在java虚拟机规范中只规定了一个对象的引用,并没有定义这个这个引用应该...
  • u010069220
  • u010069220
  • 2015-07-10 16:17:34
  • 1166

flex访问java对象

  • 2010年04月16日 17:55
  • 2KB
  • 下载

【深入理解JVM】:Java对象的创建、内存布局、访问定位

对象的创建一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查、对象分配内存、并发处理、内存空间初始化、对象设置、执行ini方法等。主要流程如...
  • u011080472
  • u011080472
  • 2016-05-05 12:06:47
  • 6044

Java对象与JVM(三) Java对象在Java虚拟机中的引用访问方式

在前面两篇文章中了解到Java对象实例是如何在HotSpot虚拟机的Java堆中创建的,以及创建后的内存布局是怎样的。下面详细了解在Java堆中的Java对象是如何访问定位的:先来了解referenc...
  • tjiyu
  • tjiyu
  • 2016-12-29 21:14:55
  • 2608

java-类与对象(访问对象的属性和行为)、

对象的定义方法: 1,对象声明:类名 对象名; 2,对象创建 对象名 =  new 类名(); new作用:分配内存空间。 也可以合写为:类名 对象名 = new 类名(); package asa;...
  • qq_32823673
  • qq_32823673
  • 2017-05-22 17:51:11
  • 1356

java类私有成员在本类中可以任意访问

java类私有成员在本类中可以任意访问 参数中employee对象中的name是private的,因为在本类中,所以可以访问到。 private的访问权限是本类,不是本对象 /****...
  • shyandsy
  • shyandsy
  • 2013-03-19 00:28:23
  • 2007

[JNI]开发之旅(6)JNI函数中访问java类中对象的属性

JNI函数的实现在c/c++中实现的,如果想访问java中定义的类对象的实例域需要三个步骤: 1.通过GetObjectClass()函数获得该对象的类class,返回值是一个jclass; 2....
  • tsdfk1455
  • tsdfk1455
  • 2016-12-25 12:28:28
  • 1156

JVM中对象访问方式

1、Object Object= new Object(); 其中Object obj 这部分将会反映到java栈的本地变量表中,作为一个reference类型数据出现,而new Object这部分会...
  • u011393781
  • u011393781
  • 2016-10-11 17:42:56
  • 385
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 1851
    排名: 2万+
    文章存档