< prev index next >

src/java.base/share/classes/sun/nio/fs/NativeBuffers.java

Print this page




  90     static void releaseNativeBuffer(NativeBuffer buffer) {
  91         // create cache if it doesn't exist
  92         NativeBuffer[] buffers = threadLocal.get();
  93         if (buffers == null) {
  94             buffers = new NativeBuffer[TEMP_BUF_POOL_SIZE];
  95             buffers[0] = buffer;
  96             threadLocal.set(buffers);
  97             return;
  98         }
  99         // Put it in an empty slot if such exists
 100         for (int i=0; i<TEMP_BUF_POOL_SIZE; i++) {
 101             if (buffers[i] == null) {
 102                 buffers[i] = buffer;
 103                 return;
 104             }
 105         }
 106         // Otherwise replace a smaller one in the cache if such exists
 107         for (int i=0; i<TEMP_BUF_POOL_SIZE; i++) {
 108             NativeBuffer existing = buffers[i];
 109             if (existing.size() < buffer.size()) {
 110                 existing.cleaner().clean();
 111                 buffers[i] = buffer;
 112                 return;
 113             }
 114         }
 115 
 116         // free it
 117         buffer.cleaner().clean();
 118     }
 119 
 120     /**
 121      * Copies a byte array and zero terminator into a given native buffer.
 122      */
 123     static void copyCStringToNativeBuffer(byte[] cstr, NativeBuffer buffer) {
 124         long offset = Unsafe.ARRAY_BYTE_BASE_OFFSET;
 125         long len = cstr.length;
 126         assert buffer.size() >= (len + 1);
 127         unsafe.copyMemory(cstr, offset, null, buffer.address(), len);
 128         unsafe.putByte(buffer.address() + len, (byte)0);
 129     }
 130 
 131     /**
 132      * Copies a byte array and zero terminator into a native buffer, returning
 133      * the buffer.
 134      */
 135     static NativeBuffer asNativeBuffer(byte[] cstr) {
 136         NativeBuffer buffer = getNativeBuffer(cstr.length+1);
 137         copyCStringToNativeBuffer(cstr, buffer);


  90     static void releaseNativeBuffer(NativeBuffer buffer) {
  91         // create cache if it doesn't exist
  92         NativeBuffer[] buffers = threadLocal.get();
  93         if (buffers == null) {
  94             buffers = new NativeBuffer[TEMP_BUF_POOL_SIZE];
  95             buffers[0] = buffer;
  96             threadLocal.set(buffers);
  97             return;
  98         }
  99         // Put it in an empty slot if such exists
 100         for (int i=0; i<TEMP_BUF_POOL_SIZE; i++) {
 101             if (buffers[i] == null) {
 102                 buffers[i] = buffer;
 103                 return;
 104             }
 105         }
 106         // Otherwise replace a smaller one in the cache if such exists
 107         for (int i=0; i<TEMP_BUF_POOL_SIZE; i++) {
 108             NativeBuffer existing = buffers[i];
 109             if (existing.size() < buffer.size()) {
 110                 existing.free();
 111                 buffers[i] = buffer;
 112                 return;
 113             }
 114         }
 115 
 116         // free it
 117         buffer.free();
 118     }
 119 
 120     /**
 121      * Copies a byte array and zero terminator into a given native buffer.
 122      */
 123     static void copyCStringToNativeBuffer(byte[] cstr, NativeBuffer buffer) {
 124         long offset = Unsafe.ARRAY_BYTE_BASE_OFFSET;
 125         long len = cstr.length;
 126         assert buffer.size() >= (len + 1);
 127         unsafe.copyMemory(cstr, offset, null, buffer.address(), len);
 128         unsafe.putByte(buffer.address() + len, (byte)0);
 129     }
 130 
 131     /**
 132      * Copies a byte array and zero terminator into a native buffer, returning
 133      * the buffer.
 134      */
 135     static NativeBuffer asNativeBuffer(byte[] cstr) {
 136         NativeBuffer buffer = getNativeBuffer(cstr.length+1);
 137         copyCStringToNativeBuffer(cstr, buffer);
< prev index next >