[Java 基础]sun.misc.Unsafe
2016-05-31 22:10
316 查看
使用Unsafe可以干一些好事。
要使你的代码trusted,需要使用bootclasspath
但是这样显然是不爽的。
所幸可以用反射的方式获取:
内存修改
取得对象大小
直接浅复制
隐藏密码
多继承
动态增加类
Exception免检验
加速序列化
超大字符串
提高并发性能
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/相关文章推荐
- HTML表单验证和事件
- Angularjs 2.0 学习备忘
- js中动态生成json. 将两层嵌套的json发送给servlet,并在servlet将两层嵌套的json取出
- JavaScript DOM对象,控制html元素
- NSFetchedResultsController_查询结果控制器
- JavaScript
- 【web前端】input使用小结
- 使用cJSON创建JSON字符串
- iOS开发之旅--ReactiveCocoa使用小结
- 《剑指offer》——从尾到头打印链表
- Caffe Ubuntu 下的调试
- bootStrap实习原理
- JSTL
- JavaScript(二)
- JavaScript(一)
- jQuery中get与eq的区别
- CSS3 边框
- [置顶] 【caffe-Windows】caffe+VS2013+Windows+GPU配置+cifar使用
- JSP常用指令
- Web前端学习第十五天·fighting_JavaScript(DOM编程艺术3-4章)