Java中的sun.misc.Unsafe包
chronicle项目:https://github.com/peter-lawrey/Java-Chronicle
这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据。
作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒。
在看chronicle的源代码,发现一个牛B的利用Unsafe来直接读写内存,从而提高效率的例子。
Unsafe包的参考:http://www.docjar.com/docs/api/sun/misc/Unsafe.html
下面这个例子演示了简单的修改一个byte[]的数据。
这个例子在eclipse里不能直接编译,要到项目的属性,Java Compiler,Errors/Warnings中Forbidden reference(access rules)中设置为warning。
另外,因为sun.misc.Unsafe包不能直接使用,所有代码里用反射的技巧得到了一个Unsafe的实例。
- import java.lang.reflect.Field;
- import java.util.Arrays;
- import sun.misc.Unsafe;
- public class Test {
- private static int byteArrayBaseOffset;
- public static void main(String[] args) throws SecurityException,
- NoSuchFieldException, IllegalArgumentException,
- IllegalAccessException {
- Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
- theUnsafe.setAccessible(true);
- Unsafe UNSAFE = (Unsafe) theUnsafe.get(null);
- System.out.println(UNSAFE);
- byte[] data = new byte[10];
- System.out.println(Arrays.toString(data));
- byteArrayBaseOffset = UNSAFE.arrayBaseOffset(byte[].class);
- System.out.println(byteArrayBaseOffset);
- UNSAFE.putByte(data, byteArrayBaseOffset, (byte) 1);
- UNSAFE.putByte(data, byteArrayBaseOffset + 5, (byte) 5);
- System.out.println(Arrays.toString(data));
- }
- }
@import url(/css/cuteeditor.css);
Java中的sun.misc.Unsafe包的更多相关文章
- Java Magic. Part 4: sun.misc.Unsafe
Java Magic. Part 4: sun.misc.Unsafe @(Base)[JDK, Unsafe, magic, 黑魔法] 转载请写明:原文地址 系列文章: -Java Magic. P ...
- java对象的内存布局(二):利用sun.misc.Unsafe获取类字段的偏移地址和读取字段的值
在上一篇文章中.我们列出了计算java对象大小的几个结论以及jol工具的使用,jol工具的源代码有兴趣的能够去看下.如今我们利用JDK中的sun.misc.Unsafe来计算下字段的偏移地址,一则验证 ...
- java.util.concurrent各组件分析 一 sun.misc.Unsafe
java.util.concurrent各组件分析 一 sun.misc.Unsafe 说到concurrent包也叫并发包,该包下主要是线程操作,方便的进行并发编程,提到并发那么锁自然是不可缺少的, ...
- sun.misc.Unsafe中一些常用方法记录
sun.misc.Unsafe中一些常用方法记录 前情摘要 sun公司提供了可以用于直接操作内存的类,这个类就是sun.misc.Unsafe.因为Java本身是不会涉及到直接操作内存的,Java A ...
- Java sun.misc.Unsafe类的学习笔记
Java未开源的Unsafe类 Unsafe类可以为我们提供高效并且线程安全方式操作变量,直接和内存数据打交道. 获取Unsafe实体的方法 private static Unsafe getUnsa ...
- Java sun.misc.unsafe类
Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的.如果你想搞破坏,可以使用Unsafe这个类.这个类是属于sun.*API中的类,并且它不是J2SE中 ...
- Java的sun.misc.Unsafe类
阅读目录 前言 Unsafe类的作用 获取Unsafe对象 Unsafe类中的API 前言 以下sun.misc.Unsafe源码和demo基于jdk1.7: 最近在看J.U.C里的源码,很多都用到了 ...
- sun.misc.Unsafe 详解
原文地址 译者:许巧辉 校对:梁海舰 Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的.但是,有一种方式可以有意的执行一些不安全.容易犯错的操作,那就是使用Unsa ...
- JDK 1.8 sun.misc.Unsafe类CAS底层实现
在java.util.concurrent包下面的很多类为了追求性能都采用了sun.misc.Unsafe类中的CAS操作,从而避免使用synchronized等加锁方式带来性能上的不足. 在sun. ...
随机推荐
- SharePoint 2013 实现多级审批工作流
上一篇介绍了安装和配置SharePoint 2013 Workflow,这一篇将用SharePoint 2013 Designer Workflow来实现一个多级审批工作流. 审批工作流介绍 这个De ...
- 删除wordpress评论表单中的网址文本框
原始效果如下 想要去掉这个链接表单,一般想到的方法就是找到 comments.php 文件中的对应表单代码删掉.但是现在只需要一段非常简单的代码就可以去除: 代码如下 复制代码 add_filter( ...
- C# 获取接口数据(xml格式)转为json格式
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...
- [转]Filter 过滤器
1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ...
- js关闭当前页面和给子页面的对象赋值
代码如下: function saveData(){ //给父页面的对象赋值 frameElement.api.opener.document.getElementById("userNam ...
- windows7使用Source insight上远程改动ubuntu共享内核源代码
因为本人阅读喜欢使用source insight.前段时间接触了linux核代码,而这份代码仅仅能放在ubuntuserver上编译.刚開始的时候是在windows上改动,完了之后再copy到serv ...
- iconv 使用方法封装
std::string iconv_exec(const std::string& in, const char* fromcode, const char* tocode) { char b ...
- eclipse自动切换到debug视图
原文出自:http://blog.csdn.net/yizhizouxiaqu/article/details/7594502 当弹出"Confir Perspective Switch&q ...
- Vivado中debug用法
Vivado和ISE相比ChipScope已经大幅改变,很多人都不习惯.在ISE中称为ChipScope而Vivado中就称为in system debug.下面就介绍Vivado中如何使用debug ...
- 文档 - STOMP Over WebSocket
http://jmesnil.net/stomp-websocket/doc/ What is STOMP? STOMP is a simple text-orientated messaging p ...