最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入Java對象的地址的使用分析

 更新時間:2013年05月04日 14:37:33   作者:  
本篇文章介紹了,Java對象的地址的使用分析。需要的朋友參考下

 在傳統(tǒng)的Java編程中,你將不再需要從內(nèi)存中處理Java對象或位置。 當(dāng)你在論壇上討論這一點(diǎn),提出的第一個問題是為什么你需要知道Java對象的地址? 它是一種有效的問題。 但以往,我們保留進(jìn)行試驗(yàn)的權(quán)利。探索未知領(lǐng)域的問題并沒有什么錯。我想出了一個使用sun公司包的實(shí)驗(yàn)。Unsafe是一個屬于sun.misc包。對你來說可能這個包有點(diǎn)陌生,看看源代碼和方法,你就可以知道我所指的是什么了。

Java的安全管理提供了足夠的隱藏來確保你并不能那么容易的擺弄內(nèi)存。作為第一步,我想到了要得到一個Java對象的內(nèi)存位置。直到探索,我也曾經(jīng)是100%的信心,這是不可能找到的位置 Java中對象的地址。

 Sun的Unsafe.java API文檔顯示我們有機(jī)會獲得地址使用方法objectFieldOffset。這個方法仿佛在說:“報(bào)告中的類存儲分配它的位置在一個特定領(lǐng)域?!?它還說,“這只是其中一個訪問器的cookie傳遞給不安全堆內(nèi)存“。 無論如何,我能夠從它的類的存儲分配存儲一個對象的內(nèi)存位置。你可以爭辯說,我們所得到的是不是一個對象的絕對物理內(nèi)存地址。但是,我們拿到了邏輯內(nèi)存地址。下面的程序?qū)⑹艿侥愕挠腥ぃ?/P>

作為第一步,我得拿到Unsafe類的一個對象。這是很困難的,因?yàn)闃?gòu)造函數(shù)是私有的。 有一個名為getUnsafe一個方法,該方法返回不安全的對象。Java安全管理要求您給源代碼特權(quán)。我用到了一點(diǎn)反射然后得到了一個實(shí)例。我知道有更好的方法來獲得實(shí)例,但我選擇了以下的方法來繞開安全管理。

使用Unsafe的對象,只需要調(diào)用objectFieldOffset和staticFieldOffset。結(jié)果就是類的內(nèi)存分配地址。

以下的實(shí)例程序可以運(yùn)行在JDK1.6上。

復(fù)制代碼 代碼如下:

import sun.misc.Unsafe;
import java.lang.reflect.Field;

public class ObjectLocation {

 private static int apple = 10;
 private int orange = 10;

 public static void main(String[] args) throws Exception {
  Unsafe unsafe = getUnsafeInstance();

  Field appleField = ObjectLocation.class.getDeclaredField("apple");
  System.out.println("Location of Apple: "
    + unsafe.staticFieldOffset(appleField));

  Field orangeField = ObjectLocation.class.getDeclaredField("orange");
  System.out.println("Location of Orange: "
    + unsafe.objectFieldOffset(orangeField));
 }

 private static Unsafe getUnsafeInstance() throws SecurityException,
   NoSuchFieldException, IllegalArgumentException,
   IllegalAccessException {
  Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe");
  theUnsafeInstance.setAccessible(true);
  return (Unsafe) theUnsafeInstance.get(Unsafe.class);
 }
}

API介紹:
boolean compareAndSwapInt(Object obj,long fieldoffset, int expect, int update);
    修改 obj對象的(fieldoffset)Int 屬性值,若屬性值為expect,則修改為 update ,返回true,若屬性值不為expect則不修改,返回false
boolean compareAndSwapObject(Object obj,long Fieldoffset, Object expect, Object update);
    修改 obj對象的(fieldoffset)屬性值,若屬性值為expect,則修改為 update ,返回true,若屬性值不為expect則不修改,返回false
long objectFieldOffset (Field field);
    得到 filed在對象中的偏移
void park(boolean flag, long time);
    使當(dāng)前線程等待
void unpark(Thread  thread)
    使當(dāng)前線程停止等待
Object getObject(Object obj,long fieldoffset);
    得到 obj 的 偏移為fieldoffset 的屬性
int getInt(Object obj,long fieldoffset);
    得到 obj 的 偏移為fieldoffset 的int屬性

相關(guān)文章

  • Java實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼

    Java實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java Ribbon負(fù)載均衡詳細(xì)講解

    Java Ribbon負(fù)載均衡詳細(xì)講解

    Ribbon其實(shí)就是一個軟負(fù)載均衡的客戶端組件,他可以和其他所需請求的客戶端結(jié)合使用,這篇文章主要介紹了Ribbon負(fù)載均衡服務(wù)調(diào)用案例代碼,需要的朋友可以參考下
    2023-01-01
  • Lucene fnm索引文件格式源碼解析

    Lucene fnm索引文件格式源碼解析

    這篇文章主要為大家介紹了Lucene fnm索引文件格式源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • spring cloud實(shí)現(xiàn)Eureka注冊中心的HA的方法

    spring cloud實(shí)現(xiàn)Eureka注冊中心的HA的方法

    本篇文章主要介紹了spring cloud實(shí)現(xiàn)Eureka注冊中心的HA的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Spring MVC全局異常實(shí)例詳解

    Spring MVC全局異常實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC全局異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • java遍歷http請求request的所有參數(shù)實(shí)現(xiàn)方法

    java遍歷http請求request的所有參數(shù)實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava遍歷http請求request的所有參數(shù)實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 淺談java object對象在heap中的結(jié)構(gòu)

    淺談java object對象在heap中的結(jié)構(gòu)

    本文主要介紹了淺談java object對象在heap中的結(jié)構(gòu),感興趣的同學(xué),可以參考下。
    2021-06-06
  • java序列化對象根據(jù)不同配置動態(tài)改變屬性名的方法

    java序列化對象根據(jù)不同配置動態(tài)改變屬性名的方法

    本文主要介紹了java序列化對象根據(jù)不同配置動態(tài)改變屬性名的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java如何做帶復(fù)選框的菜單實(shí)例代碼

    Java如何做帶復(fù)選框的菜單實(shí)例代碼

    大家好,本篇文章主要講的是Java如何做帶復(fù)選框的菜單實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • mybatis輸出SQL格式化方式

    mybatis輸出SQL格式化方式

    這篇文章主要介紹了mybatis輸出SQL格式化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

三江| 察雅县| 沅江市| 邹城市| 晋城| 历史| 荔波县| 益阳市| 中宁县| 台江县| 吉安市| 苍南县| 印江| 禄劝| 博爱县| 吴桥县| 绿春县| 华亭县| 乐平市| 连平县| 华安县| 广德县| 乌拉特前旗| 偃师市| 邹平县| 普洱| 东阳市| 三亚市| 邵武市| 南木林县| 道孚县| 宽城| 三穗县| 二手房| 大邑县| 会昌县| 滨州市| 诸城市| 左云县| 历史| 疏勒县|