jdk/src/share/classes/java/nio/Direct-X-Buffer.java.template
changeset 7025 6e002f9a2899
parent 6902 3352f8839320
child 7668 d4a77089c587
equal deleted inserted replaced
7024:25bd21af28bf 7025:6e002f9a2899
    25 
    25 
    26 #warn This file is preprocessed before being compiled
    26 #warn This file is preprocessed before being compiled
    27 
    27 
    28 package java.nio;
    28 package java.nio;
    29 
    29 
       
    30 import java.io.FileDescriptor;
    30 import sun.misc.Cleaner;
    31 import sun.misc.Cleaner;
    31 import sun.misc.Unsafe;
    32 import sun.misc.Unsafe;
    32 import sun.misc.VM;
    33 import sun.misc.VM;
    33 import sun.nio.ch.DirectBuffer;
    34 import sun.nio.ch.DirectBuffer;
    34 
    35 
   112 
   113 
   113     // Primary constructor
   114     // Primary constructor
   114     //
   115     //
   115     Direct$Type$Buffer$RW$(int cap) {                   // package-private
   116     Direct$Type$Buffer$RW$(int cap) {                   // package-private
   116 #if[rw]
   117 #if[rw]
   117         super(-1, 0, cap, cap, false);
   118         super(-1, 0, cap, cap);
   118         boolean pa = VM.isDirectMemoryPageAligned();
   119         boolean pa = VM.isDirectMemoryPageAligned();
   119         int ps = Bits.pageSize();
   120         int ps = Bits.pageSize();
   120         long size = Math.max(1L, (long)cap + (pa ? ps : 0));
   121         long size = Math.max(1L, (long)cap + (pa ? ps : 0));
   121         Bits.reserveMemory(size, cap);
   122         Bits.reserveMemory(size, cap);
   122 
   123 
   143 #if[rw]
   144 #if[rw]
   144 
   145 
   145     // Invoked only by JNI: NewDirectByteBuffer(void*, long)
   146     // Invoked only by JNI: NewDirectByteBuffer(void*, long)
   146     //
   147     //
   147     private Direct$Type$Buffer(long addr, int cap) {
   148     private Direct$Type$Buffer(long addr, int cap) {
   148         super(-1, 0, cap, cap, false);
   149         super(-1, 0, cap, cap);
   149         address = addr;
   150         address = addr;
   150         cleaner = null;
   151         cleaner = null;
   151     }
   152     }
   152 
   153 
   153 #end[rw]
   154 #end[rw]
   154 
   155 
   155     // For memory-mapped buffers -- invoked by FileChannelImpl via reflection
   156     // For memory-mapped buffers -- invoked by FileChannelImpl via reflection
   156     //
   157     //
   157     protected Direct$Type$Buffer$RW$(int cap, long addr, Runnable unmapper) {
   158     protected Direct$Type$Buffer$RW$(int cap, long addr,
   158 #if[rw]
   159                                      FileDescriptor fd,
   159         super(-1, 0, cap, cap, true);
   160                                      Runnable unmapper)
       
   161     {
       
   162 #if[rw]
       
   163         super(-1, 0, cap, cap, fd);
   160         address = addr;
   164         address = addr;
   161         viewedBuffer = null;
   165         viewedBuffer = null;
   162         cleaner = Cleaner.create(this, unmapper);
   166         cleaner = Cleaner.create(this, unmapper);
   163 #else[rw]
   167 #else[rw]
   164         super(cap, addr, unmapper);
   168         super(cap, addr, fd, unmapper);
   165 #end[rw]
   169 #end[rw]
   166     }
   170     }
   167 
   171 
   168 #end[byte]
   172 #end[byte]
   169 
   173