欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入Java對(duì)象的地址的使用分析

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

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

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

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

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

使用Unsafe的對(duì)象,只需要調(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對(duì)象的(fieldoffset)Int 屬性值,若屬性值為expect,則修改為 update ,返回true,若屬性值不為expect則不修改,返回false
boolean compareAndSwapObject(Object obj,long Fieldoffset, Object expect, Object update);
    修改 obj對(duì)象的(fieldoffset)屬性值,若屬性值為expect,則修改為 update ,返回true,若屬性值不為expect則不修改,返回false
long objectFieldOffset (Field field);
    得到 filed在對(duì)象中的偏移
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)文章

  • 使用ehcache三步搞定springboot緩存的方法示例

    使用ehcache三步搞定springboot緩存的方法示例

    本次內(nèi)容主要介紹基于Ehcache 3.0來(lái)快速實(shí)現(xiàn)Spring Boot應(yīng)用程序的數(shù)據(jù)緩存功能。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • Spring Jpa多數(shù)據(jù)源工程配置過(guò)程解析

    Spring Jpa多數(shù)據(jù)源工程配置過(guò)程解析

    這篇文章主要介紹了Spring Jpa多數(shù)據(jù)源工程配置過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java實(shí)現(xiàn)的斷點(diǎn)續(xù)傳功能的示例代碼

    Java實(shí)現(xiàn)的斷點(diǎn)續(xù)傳功能的示例代碼

    本篇文章主要介紹了Java實(shí)現(xiàn)的斷點(diǎn)續(xù)傳功能的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • JavaWeb Struts文件上傳功能實(shí)現(xiàn)詳解

    JavaWeb Struts文件上傳功能實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了JavaWeb Struts文件上傳功能實(shí)現(xiàn)過(guò)程,思路清晰,供大家參考,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行

    Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行

    這篇文章主要介紹了Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行,本文是系列文章的第一篇,需要的朋友可以參考下
    2014-12-12
  • java DelayQueue的原理淺析

    java DelayQueue的原理淺析

    在本篇文章里小編給大家整理的是一篇關(guān)于java DelayQueue的原理淺析,有興趣的朋友們可以參考學(xué)習(xí)下。
    2021-01-01
  • Java NIO.2 使用Path接口來(lái)監(jiān)聽(tīng)文件、文件夾變化

    Java NIO.2 使用Path接口來(lái)監(jiān)聽(tīng)文件、文件夾變化

    Java7對(duì)NIO進(jìn)行了大的改進(jìn),新增了許多功能,接下來(lái)通過(guò)本文給大家介紹Java NIO.2 使用Path接口來(lái)監(jiān)聽(tīng)文件、文件夾變化 ,需要的朋友可以參考下
    2019-05-05
  • Java設(shè)計(jì)模式中的裝飾者模式

    Java設(shè)計(jì)模式中的裝飾者模式

    這篇文章主要介紹了Java設(shè)計(jì)模式中的裝飾者模式,裝飾者模式即Decorator?Pattern,裝飾模式是在不必改變?cè)愇募褪褂美^承的情況下,動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能
    2022-07-07
  • springboot如何讀取自定義properties并注入到bean中

    springboot如何讀取自定義properties并注入到bean中

    這篇文章主要介紹了springboot讀取自定義properties并注入到bean中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳細(xì)Java批量獲取微信公眾號(hào)方法

    詳細(xì)Java批量獲取微信公眾號(hào)方法

    本篇文章給大家講解了用JAVA如何實(shí)現(xiàn)向爬蟲(chóng)一樣獲取微信公眾號(hào)和其基本信息等,需要你正巧需要,那跟著學(xué)習(xí)參考下吧。
    2017-12-12

最新評(píng)論