< prev index next >

src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java

Print this page
rev 58228 : 8238665: Add JFR event for direct memory statistics


  28 import java.io.FileDescriptor;
  29 import java.io.IOException;
  30 import java.io.UncheckedIOException;
  31 import java.lang.ref.Cleaner.Cleanable;
  32 import java.nio.ByteBuffer;
  33 import java.nio.MappedByteBuffer;
  34 import java.nio.channels.AsynchronousCloseException;
  35 import java.nio.channels.ClosedByInterruptException;
  36 import java.nio.channels.ClosedChannelException;
  37 import java.nio.channels.FileChannel;
  38 import java.nio.channels.FileLock;
  39 import java.nio.channels.FileLockInterruptionException;
  40 import java.nio.channels.NonReadableChannelException;
  41 import java.nio.channels.NonWritableChannelException;
  42 import java.nio.channels.ReadableByteChannel;
  43 import java.nio.channels.SelectableChannel;
  44 import java.nio.channels.WritableByteChannel;
  45 import java.util.Objects;
  46 
  47 import jdk.internal.access.JavaIOFileDescriptorAccess;
  48 import jdk.internal.access.JavaNioAccess;
  49 import jdk.internal.access.SharedSecrets;
  50 import jdk.internal.misc.ExtendedMapMode;
  51 import jdk.internal.misc.Unsafe;
  52 import jdk.internal.misc.VM;

  53 import jdk.internal.ref.Cleaner;
  54 import jdk.internal.ref.CleanerFactory;
  55 
  56 import jdk.internal.access.foreign.UnmapperProxy;
  57 
  58 public class FileChannelImpl
  59     extends FileChannel
  60 {
  61     // Memory allocation size for mapping buffers
  62     private static final long allocationGranularity;
  63 
  64     // Access to FileDescriptor internals
  65     private static final JavaIOFileDescriptorAccess fdAccess =
  66         SharedSecrets.getJavaIOFileDescriptorAccess();
  67 
  68     // Used to make native read and write calls
  69     private final FileDispatcher nd;
  70 
  71     // File descriptor
  72     private final FileDescriptor fd;


1143     }
1144 
1145     private void checkMode(MapMode mode, int prot, boolean isSync) {
1146         if (prot == MAP_INVALID) {
1147             throw new UnsupportedOperationException();
1148         }
1149         if ((mode != MapMode.READ_ONLY) && mode != ExtendedMapMode.READ_ONLY_SYNC && !writable)
1150             throw new NonWritableChannelException();
1151         if (!readable)
1152             throw new NonReadableChannelException();
1153         // reject SYNC request if writeback is not enabled for this platform
1154         if (isSync && !Unsafe.isWritebackEnabled()) {
1155             throw new UnsupportedOperationException();
1156         }
1157     }
1158 
1159     /**
1160      * Invoked by sun.management.ManagementFactoryHelper to create the management
1161      * interface for mapped buffers.
1162      */
1163     public static JavaNioAccess.BufferPool getMappedBufferPool() {
1164         return new JavaNioAccess.BufferPool() {
1165             @Override
1166             public String getName() {
1167                 return "mapped";
1168             }
1169             @Override
1170             public long getCount() {
1171                 return DefaultUnmapper.count;
1172             }
1173             @Override
1174             public long getTotalCapacity() {
1175                 return DefaultUnmapper.totalCapacity;
1176             }
1177             @Override
1178             public long getMemoryUsed() {
1179                 return DefaultUnmapper.totalSize;
1180             }
1181         };
1182     }
1183 
1184     /**
1185      * Invoked by sun.management.ManagementFactoryHelper to create the management
1186      * interface for sync mapped buffers.
1187      */
1188     public static JavaNioAccess.BufferPool getSyncMappedBufferPool() {
1189         return new JavaNioAccess.BufferPool() {
1190             @Override
1191             public String getName() {
1192                 return "mapped - 'non-volatile memory'";
1193             }
1194             @Override
1195             public long getCount() {
1196                 return SyncUnmapper.count;
1197             }
1198             @Override
1199             public long getTotalCapacity() {
1200                 return SyncUnmapper.totalCapacity;
1201             }
1202             @Override
1203             public long getMemoryUsed() {
1204                 return SyncUnmapper.totalSize;
1205             }
1206         };
1207     }
1208 
1209     // -- Locks --




  28 import java.io.FileDescriptor;
  29 import java.io.IOException;
  30 import java.io.UncheckedIOException;
  31 import java.lang.ref.Cleaner.Cleanable;
  32 import java.nio.ByteBuffer;
  33 import java.nio.MappedByteBuffer;
  34 import java.nio.channels.AsynchronousCloseException;
  35 import java.nio.channels.ClosedByInterruptException;
  36 import java.nio.channels.ClosedChannelException;
  37 import java.nio.channels.FileChannel;
  38 import java.nio.channels.FileLock;
  39 import java.nio.channels.FileLockInterruptionException;
  40 import java.nio.channels.NonReadableChannelException;
  41 import java.nio.channels.NonWritableChannelException;
  42 import java.nio.channels.ReadableByteChannel;
  43 import java.nio.channels.SelectableChannel;
  44 import java.nio.channels.WritableByteChannel;
  45 import java.util.Objects;
  46 
  47 import jdk.internal.access.JavaIOFileDescriptorAccess;

  48 import jdk.internal.access.SharedSecrets;
  49 import jdk.internal.misc.ExtendedMapMode;
  50 import jdk.internal.misc.Unsafe;
  51 import jdk.internal.misc.VM;
  52 import jdk.internal.misc.VM.BufferPool;
  53 import jdk.internal.ref.Cleaner;
  54 import jdk.internal.ref.CleanerFactory;
  55 
  56 import jdk.internal.access.foreign.UnmapperProxy;
  57 
  58 public class FileChannelImpl
  59     extends FileChannel
  60 {
  61     // Memory allocation size for mapping buffers
  62     private static final long allocationGranularity;
  63 
  64     // Access to FileDescriptor internals
  65     private static final JavaIOFileDescriptorAccess fdAccess =
  66         SharedSecrets.getJavaIOFileDescriptorAccess();
  67 
  68     // Used to make native read and write calls
  69     private final FileDispatcher nd;
  70 
  71     // File descriptor
  72     private final FileDescriptor fd;


1143     }
1144 
1145     private void checkMode(MapMode mode, int prot, boolean isSync) {
1146         if (prot == MAP_INVALID) {
1147             throw new UnsupportedOperationException();
1148         }
1149         if ((mode != MapMode.READ_ONLY) && mode != ExtendedMapMode.READ_ONLY_SYNC && !writable)
1150             throw new NonWritableChannelException();
1151         if (!readable)
1152             throw new NonReadableChannelException();
1153         // reject SYNC request if writeback is not enabled for this platform
1154         if (isSync && !Unsafe.isWritebackEnabled()) {
1155             throw new UnsupportedOperationException();
1156         }
1157     }
1158 
1159     /**
1160      * Invoked by sun.management.ManagementFactoryHelper to create the management
1161      * interface for mapped buffers.
1162      */
1163     public static BufferPool getMappedBufferPool() {
1164         return new BufferPool() {
1165             @Override
1166             public String getName() {
1167                 return "mapped";
1168             }
1169             @Override
1170             public long getCount() {
1171                 return DefaultUnmapper.count;
1172             }
1173             @Override
1174             public long getTotalCapacity() {
1175                 return DefaultUnmapper.totalCapacity;
1176             }
1177             @Override
1178             public long getMemoryUsed() {
1179                 return DefaultUnmapper.totalSize;
1180             }
1181         };
1182     }
1183 
1184     /**
1185      * Invoked by sun.management.ManagementFactoryHelper to create the management
1186      * interface for sync mapped buffers.
1187      */
1188     public static BufferPool getSyncMappedBufferPool() {
1189         return new BufferPool() {
1190             @Override
1191             public String getName() {
1192                 return "mapped - 'non-volatile memory'";
1193             }
1194             @Override
1195             public long getCount() {
1196                 return SyncUnmapper.count;
1197             }
1198             @Override
1199             public long getTotalCapacity() {
1200                 return SyncUnmapper.totalCapacity;
1201             }
1202             @Override
1203             public long getMemoryUsed() {
1204                 return SyncUnmapper.totalSize;
1205             }
1206         };
1207     }
1208 
1209     // -- Locks --


< prev index next >