[Java 基础]sun.misc.Unsafe

使用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/

上一篇:7.1 C++模板基本概念及语法 《C++模板与标准模板库》


下一篇:微信公众平台消息接口PHP版开发教程