/* * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/** * ZIP inflater/deflater performance.
*/
/* * Run this test on JDK 6 and on later * JDKs to compare results: * java -server -Xms1024M -Xmx1024M -Ddebug=true FlaterCriticalArray * * The performance issues can be readily seen on JDK 6, and so this code is * written to compile on that platform: it does *not* use any JDK 7 - specific * features.
*/
publicclass FlaterCriticalArray { // If true, print information about performance privatestaticfinalboolean debug = System.getProperty("debug") != null;
privatestaticvoid debug(String s) { if (debug) System.out.println(s);
}
privatestaticvoid debug(String name, String inOut, long time, int length) {
debug(name + ": Duration of " + inOut + "(in ms): " + time);
debug(name + ": " + inOut + "d data length: " + length + " bytes");
}
privatestaticbyte[] grow(byte[] a, int capacity) { while (a.length < capacity) { byte[] a2 = newbyte[a.length * 2];
System.arraycopy(a, 0, a2, 0, a.length);
a = a2;
} return a;
}
privatestaticbyte[] trim(byte[] a, int length) { byte[] res = newbyte[length];
System.arraycopy(a, 0, res, 0, length); return res;
}
/* * Base class for individual test cases
*/ privateabstractstaticclass TestCase { protected String name; // For information in debug messages protectedbyte data[]; // Data to be deflated and subsequently inflated protectedint level; // Compression level for deflater
if (args.length > 1) {
FileInputStream fis = new FileInputStream(args[1]); int len = fis.available();
data = newbyte[len];
check(fis.read(data, 0, len) == len, "Did not read complete file");
debug("Original data from " + args[1]);
fis.close();
} else {
ByteBuffer bb = ByteBuffer.allocate(8);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (int i = 0; i < 1024 * 64; i++) { // data length
bb.putDouble(0, Math.random());
baos.write(bb.array(), 0, 8);
}
data = baos.toByteArray();
debug("Original data from random byte array");
}
debug("Original data length: " + data.length + " bytes");
new StrideTest(data, level).runTest(); new NoStrideTest(data, level).runTest(); new GZIPTest(data).runTest();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.