Java offheap memory

- MappedByteBuffer

public void copyFile(String filename,String srcpath,String destpath)throws IOException {
      File source = new File(srcpath+"/"+filename);
      File dest = new File(destpath+"/"+filename);
       FileChannel in = null, out = null;
       try { 
        in = new FileInputStream(source).getChannel();
        out = new FileOutputStream(dest).getChannel();
        long size = in.size();
       MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
       out.write(buf);
       in.close();
       out.close();
       source.delete();//文件複製完成後,刪除源文件
      }catch(Exception e){
       e.printStackTrace();
      } finally {
       in.close();
       out.close();
      }
 }

public static void clean(final Object buffer) throws Exception {
           AccessController.doPrivileged(new PrivilegedAction() {
               public Object run() {
               try {
                  Method getCleanerMethod = buffer.getClass().getMethod("cleaner",new Class[0]);
                  getCleanerMethod.setAccessible(true);
                  sun.misc.Cleaner cleaner =(sun.misc.Cleaner)getCleanerMethod.invoke(buffer,new Object[0]);
                  cleaner.clean();
               } catch(Exception e) {
                 e.printStackTrace();
              }
                 return null;}});
          
}

- Unsafe

 Field f = Unsafe.class.getDeclaredField("theUnsafe");
 f.setAccessible(true);
 Unsafe unsafe = (Unsafe) f.get(null);
  1. lock and CAS, like AtomicInteger uses unsafe CAS heavily
  2. array operration, arrayBaseOffset, arrayIndexScale
  3. operation on class, object and fields, objectFieldOffset(Field f), putLong, putInt, putObject
  4. special class initialization, allocateInstance (no constructor call)
  5. memory management, allocateMemory, freeMemory, copyMemory....
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章