java中打印变量地址

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

在java中打印变量的地址

这个代码是在startoverflow上看到的,跟大家分享一下。

importsun.misc.Unsafe;importjava.lang.reflect.Field;importjava.util.Arrays;importjava.util.Collections;publicclassOrderOfObjectsAfterGCMain {staticfinalUnsafe unsafe =getUnsafe();staticfinalbooleanis64bit =true;//auto detect if possible.publicstaticvoidmain(String... args) {

Double[] ascending=newDouble[16];for(inti=0;i<ascending.length;i++)

ascending[i]= (double) i;

Double[] descending=newDouble[16];for(inti=descending.length-1; i>=0; i--)

descending[i]= (double) i;

Double[] shuffled=newDouble[16];for(inti=0;i<shuffled.length;i++)

shuffled[i]= (double) i;

Collections.shuffle(Arrays.asList(shuffled));

System.out.PRintln("Before GC");

printAddresses("ascending", ascending);

printAddresses("descending", descending);

printAddresses("shuffled", shuffled);

System.gc();

System.out.println("\nAfter GC");

printAddresses("ascending", ascending);

printAddresses("descending", descending);

printAddresses("shuffled", shuffled);

System.gc();

System.out.println("\nAfter GC 2");

printAddresses("ascending", ascending);

printAddresses("descending", descending);

printAddresses("shuffled", shuffled);

}publicstaticvoidprintAddresses(String label, Object... objects) {

System.out.print(label+ ": 0x");longlast = 0;intoffset =unsafe.arrayBaSEOffset(objects.getClass());intscale =unsafe.arrayIndexScale(objects.getClass());switch(scale) {case4:longfactor = is64bit ? 8 : 1;finallongi1 = (unsafe.getInt(objects, offset) & 0xFFFFFFFFL) *factor;

System.out.print(Long.toHexString(i1));

last=i1;for(inti = 1; i < objects.length; i++) {finallongi2 = (unsafe.getInt(objects, offset + i * 4) & 0xFFFFFFFFL) *factor;if(i2 >last)

System.out.print(", +" + Long.toHexString(i2 -last));elseSystem.out.print(", -" + Long.toHexString( last -i2));

last=i2;

}

break;case8:thrownewAssertionError("Not supported");

}

System.out.println();

}privatestaticUnsafe getUnsafe() {try{

Field theUnsafe= Unsafe.class.getDeclaredField("theUnsafe");

theUnsafe.setaccessible(true);return(Unsafe) theUnsafe.get(null);

}catch(Exception e) {thrownewAssertionError(e);

}

}

}

设置因为导入import sun.misc.Unsafe;引起的错误

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航