8206290: Better FileChannel transfer performance
Reviewed-by: alanb, rhalade, mschoene
--- a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java Wed Sep 12 08:26:31 2018 -0400
+++ b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java Tue Sep 25 16:49:51 2018 -0700
@@ -624,11 +624,10 @@
{
// Untrusted target: Use a newly-erased buffer
int c = Math.min(icount, TRANSFER_SIZE);
- ByteBuffer bb = Util.getTemporaryDirectBuffer(c);
+ ByteBuffer bb = ByteBuffer.allocate(c);
long tw = 0; // Total bytes written
long pos = position;
try {
- Util.erase(bb);
while (tw < icount) {
bb.limit(Math.min((int)(icount - tw), TRANSFER_SIZE));
int nr = read(bb, pos);
@@ -649,8 +648,6 @@
if (tw > 0)
return tw;
throw x;
- } finally {
- Util.releaseTemporaryDirectBuffer(bb);
}
}
@@ -734,11 +731,10 @@
{
// Untrusted target: Use a newly-erased buffer
int c = (int)Math.min(count, TRANSFER_SIZE);
- ByteBuffer bb = Util.getTemporaryDirectBuffer(c);
+ ByteBuffer bb = ByteBuffer.allocate(c);
long tw = 0; // Total bytes written
long pos = position;
try {
- Util.erase(bb);
while (tw < count) {
bb.limit((int)Math.min((count - tw), (long)TRANSFER_SIZE));
// ## Bug: Will block reading src if this channel
@@ -759,8 +755,6 @@
if (tw > 0)
return tw;
throw x;
- } finally {
- Util.releaseTemporaryDirectBuffer(bb);
}
}