Java中的sun.misc.Unsafe包

简介: chronicle项目:https://github.com/peter-lawrey/Java-Chronicle 这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据。 作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒。

chronicle项目:https://github.com/peter-lawrey/Java-Chronicle

这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据。

作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒。


在看chronicle的源代码,发现一个牛B的利用Unsafe来直接读写内存,从而提高效率的例子。

详细见这个类:https://github.com/peter-lawrey/Java-Chronicle/blob/master/src/main/java/vanilla/java/chronicle/impl/UnsafeExcerpt.java


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的实例。

[java]  view plain copy
  1. import java.lang.reflect.Field;  
  2. import java.util.Arrays;  
  3. import sun.misc.Unsafe;  
  4.   
  5. public class Test {  
  6.     private static int byteArrayBaseOffset;  
  7.   
  8.     public static void main(String[] args) throws SecurityException,  
  9.             NoSuchFieldException, IllegalArgumentException,  
  10.             IllegalAccessException {  
  11.         Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");  
  12.         theUnsafe.setAccessible(true);  
  13.         Unsafe UNSAFE = (Unsafe) theUnsafe.get(null);  
  14.         System.out.println(UNSAFE);  
  15.   
  16.         byte[] data = new byte[10];  
  17.         System.out.println(Arrays.toString(data));  
  18.         byteArrayBaseOffset = UNSAFE.arrayBaseOffset(byte[].class);  
  19.   
  20.         System.out.println(byteArrayBaseOffset);  
  21.         UNSAFE.putByte(data, byteArrayBaseOffset, (byte1);  
  22.         UNSAFE.putByte(data, byteArrayBaseOffset + 5, (byte5);  
  23.         System.out.println(Arrays.toString(data));  
  24.     }  
  25. }  
若转载请注明出处!若有疑问,请回复交流!
目录
相关文章
|
20天前
|
存储 安全 Java
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)
33 0
|
Oracle Java 关系型数据库
|
Oracle Java 关系型数据库
|
9天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
10天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
22 3
|
11天前
|
Java
Java 并发编程:深入理解线程池
【4月更文挑战第8天】本文将深入探讨 Java 中的线程池技术,包括其工作原理、优势以及如何使用。线程池是 Java 并发编程的重要工具,它可以有效地管理和控制线程的执行,提高系统性能。通过本文的学习,读者将对线程池有更深入的理解,并能在实际开发中灵活运用。
|
9天前
|
算法 Java 开发者
Java中的多线程编程:概念、实现与性能优化
【4月更文挑战第9天】在Java编程中,多线程是一种强大的工具,它允许开发者创建并发执行的程序,提高系统的响应性和吞吐量。本文将深入探讨Java多线程的核心概念,包括线程的生命周期、线程同步机制以及线程池的使用。接着,我们将展示如何通过继承Thread类和实现Runnable接口来创建线程,并讨论各自的优缺点。此外,文章还将介绍高级主题,如死锁的预防、避免和检测,以及如何使用并发集合和原子变量来提高多线程程序的性能和安全性。最后,我们将提供一些实用的性能优化技巧,帮助开发者编写出更高效、更稳定的多线程应用程序。
|
7天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
12天前
|
Java
Java并发编程:深入理解线程池
【4月更文挑战第7天】在现代软件开发中,多线程编程已经成为一种不可或缺的技术。为了提高程序性能和资源利用率,Java提供了线程池这一强大工具。本文将深入探讨Java线程池的原理、使用方法以及如何根据实际需求定制线程池,帮助读者更好地理解和应用线程池技术。
15 0