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 --
|