您的位置:首页 > Web前端

[Java 基础]sun.misc.Unsafe

2016-05-31 22:10 316 查看
使用Unsafe可以干一些好事。

Unsafe对象初始化

如果你的代码属于trusted的,可以直接使用下面的方式:

public static Unsafe getUnsafe() {
Class cc = sun.reflect.Reflection.getCallerClass(2);
if (cc.getClassLoader() != null)
throw new SecurityException("Unsafe");
return theUnsafe;
}

要使你的代码trusted,需要使用bootclasspath

java -Xbootclasspath:/usr/jdk1.7.0/jre/lib/rt.jar:. com.mishadoff.magic.UnsafeClient

但是这样显然是不爽的。

所幸可以用反射的方式获取:

Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);

有意思的用法

跳过初始化构造函数

内存修改

取得对象大小

直接浅复制

隐藏密码

多继承

动态增加类

Exception免检验

加速序列化

超大字符串

提高并发性能

参考

http://mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: