From 4b93eff932e2052582996d3af5bec6553575941d Mon Sep 17 00:00:00 2001 From: Kumar Srinivasan Date: Thu, 14 Oct 2010 14:41:08 -0700 Subject: [PATCH 1/3] 6982312: (pack200) pack200 fails with the jdk7 class files Reviewed-by: jrose --- .../sun/java/util/jar/pack/ClassReader.java | 18 ++++- .../sun/java/util/jar/pack/Instruction.java | 19 +++++ .../sun/java/util/jar/pack/PackerImpl.java | 28 +++++-- .../com/sun/java/util/jar/pack/Utils.java | 3 - jdk/test/tools/pack200/AttributeTests.java | 75 ++++++++++++++++++ jdk/test/tools/pack200/dyn.jar | Bin 0 -> 1963 bytes 6 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 jdk/test/tools/pack200/AttributeTests.java create mode 100644 jdk/test/tools/pack200/dyn.jar diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java index a14bf350a6f..cf588957cbf 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java @@ -246,7 +246,9 @@ class ClassReader implements Constants { fixups[fptr++] = in.readUnsignedShort(); break; default: - throw new IOException("Bad constant pool tag "+tag); + throw new ClassFormatException("Bad constant pool tag " + + tag + " in File: " + cls.file.nameString + + " at pos: " + inPos); } } @@ -415,7 +417,12 @@ class ClassReader implements Constants { if (a.name() == "Code") { Class.Method m = (Class.Method) h; m.code = new Code(m); - readCode(m.code); + try { + readCode(m.code); + } catch (Instruction.FormatException iie) { + String message = iie.getMessage() + " in " + h; + throw new ClassReader.ClassFormatException(message); + } } else { assert(h == cls); readInnerClasses(cls); @@ -438,6 +445,7 @@ class ClassReader implements Constants { code.max_locals = readUnsignedShort(); code.bytes = new byte[readInt()]; in.readFully(code.bytes); + Instruction.opcodeChecker(code.bytes); int nh = readUnsignedShort(); code.setHandlerCount(nh); for (int i = 0; i < nh; i++) { @@ -463,4 +471,10 @@ class ClassReader implements Constants { cls.innerClasses = ics; // set directly; do not use setInnerClasses. // (Later, ics may be transferred to the pkg.) } + + class ClassFormatException extends IOException { + public ClassFormatException(String message) { + super(message); + } + } } diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java index bef43fd0f03..2eb4604ec08 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java @@ -25,6 +25,8 @@ package com.sun.java.util.jar.pack; +import java.io.IOException; + /** * A parsed bytecode instruction. * Provides accessors to various relevant bits. @@ -628,4 +630,21 @@ class Instruction implements Constants { } } } + + public static void opcodeChecker(byte[] code) throws FormatException { + Instruction i = at(code, 0); + while (i != null) { + int opcode = i.getBC(); + if (opcode == _xxxunusedxxx || opcode < _nop || opcode > _jsr_w) { + String message = "illegal opcode: " + opcode + " " + i; + throw new FormatException(message); + } + i = i.next(); + } + } + static class FormatException extends IOException { + FormatException(String message) { + super(message); + } + } } diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java index 449bbbeb5b1..a45a4bcba09 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java @@ -496,15 +496,29 @@ public class PackerImpl extends TLGlobals implements Pack200.Packer { reader.unknownAttrCommand = unknownAttrCommand; try { reader.read(); - } catch (Attribute.FormatException ee) { - // He passed up the category to us in layout. - if (ee.layout.equals(Pack200.Packer.PASS)) { - Utils.log.warning("Passing class file uncompressed due to unrecognized attribute: "+fname); - Utils.log.info(ee.toString()); - return null; + } catch (IOException ioe) { + String message = "Passing class file uncompressed due to"; + if (ioe instanceof Attribute.FormatException) { + Attribute.FormatException ee = (Attribute.FormatException) ioe; + // He passed up the category to us in layout. + if (ee.layout.equals(Pack200.Packer.PASS)) { + Utils.log.info(ee.toString()); + Utils.log.warning(message + " unrecognized attribute: " + + fname); + return null; + } + } else if (ioe instanceof ClassReader.ClassFormatException) { + ClassReader.ClassFormatException ce = (ClassReader.ClassFormatException) ioe; + // %% TODO: Do we invent a new property for this or reuse %% + if (unknownAttrCommand.equals(Pack200.Packer.PASS)) { + Utils.log.info(ce.toString()); + Utils.log.warning(message + " unknown class format: " + + fname); + return null; + } } // Otherwise, it must be an error. - throw ee; + throw ioe; } pkg.addClass(cls); return cls.file; diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java index 33524325d8e..84f65ac2ccf 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java @@ -182,11 +182,8 @@ class Utils { } public void warning(String msg, Object param) { - int verbose = currentPropMap().getInteger(DEBUG_VERBOSE); - if (verbose > 0) { getLogger().warning(msg, param); } - } public void warning(String msg) { warning(msg, null); diff --git a/jdk/test/tools/pack200/AttributeTests.java b/jdk/test/tools/pack200/AttributeTests.java new file mode 100644 index 00000000000..73e00d23a61 --- /dev/null +++ b/jdk/test/tools/pack200/AttributeTests.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2010, 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. + */ + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/* + * @test + * @bug 6982312 + * @summary tests various classfile format and attribute handling by pack200 + * @compile -XDignore.symbol.file Utils.java AttributeTests.java + * @run main AttributeTests + * @author ksrini + */ + + +public class AttributeTests { + + public static void main(String... args) throws Exception { + test6982312(); + } + /* + * This is an interim test, which ensures pack200 handles JSR-292 related + * classfile changes seamlessly, until all the classfile changes in jdk7 + * and jdk8 are fully supported. At that time this test should be jettisoned, + * along with the associated jar file. + * + * The jar file contains sources and classes noting the classes were + * derived by using the javac from the lambda project, + * see http://openjdk.java.net/projects/lambda/. + * Therefore the classes contained in the jar cannot be compiled, using + * the standard jdk7's javac compiler. + */ + static void test6982312() throws IOException { + String pack200Cmd = Utils.getPack200Cmd(); + File dynJar = new File(".", "dyn.jar"); + Utils.copyFile(new File(Utils.TEST_SRC_DIR, "dyn.jar"), dynJar); + File testJar = new File(".", "test.jar"); + List cmds = new ArrayList(); + cmds.add(pack200Cmd); + cmds.add("--repack"); + cmds.add(testJar.getAbsolutePath()); + cmds.add(dynJar.getAbsolutePath()); + Utils.runExec(cmds); + /* + * compare the repacked jar bit-wise, as all the files + * should be transmitted "as-is". + */ + Utils.doCompareBitWise(dynJar.getAbsoluteFile(), testJar.getAbsoluteFile()); + testJar.delete(); + dynJar.delete(); + } +} diff --git a/jdk/test/tools/pack200/dyn.jar b/jdk/test/tools/pack200/dyn.jar new file mode 100644 index 0000000000000000000000000000000000000000..b04c2a9e825b1201cbdcd2f863478587356ce7ec GIT binary patch literal 1963 zcmWIWW@Zs#U|`^2c-v!byUlj8x<8PY48(j4G7O%1X{kl2dC94IS&3zdp&^_M%yyOw zeXja1^eL_2W?*D_%gn&Q!pOwHaQck4r>>W`k6$Q9*_Y52&z@?XKJOEF;_8Jh&z`P& z`t;FLuXCO{dSM)%x_XQ!#ipxFOHtEy5RuHx&d1H~Dgj+?o~Swaqc4$yzY58#_4Sl{Zs zK1N`(P0!DM{(Pq5+3)o?!x{Pm^cS_5vYX4^Dcab_%RZZL$JIOc?Efp&&5J&J z=-6~~d%L_{J9>4+%Qw7zu&!J7&gQ_)4~--ILzkQ}Zp%4qpLSyJh1!!F?gUP>k>KBL zWG8fY!i+f+I}fFpj2|xI=~uL$ zkhtQcUy01OlWZHOh`cIXJ9*VNCqdTg^}E$KrAtkp;VisbBV)^7SJ6;g8TY@1P7gxV zoqZ3yeCZ&WxT5E3)as}DZb=zFU!QQ!=V^JEYd1ydk=th%pPgRsJ_l;JD(&o4jh)@- zwWCkP-)+-!7YRSfFum*5YeM%=G&{q$B%a)b5y)b zwJOz*uCiBV%6}cV@65ixN5d?m|2AuH(AGFp&}uOIAnTsh#yS(rC#G@x&6+I~S(2RG z`$tyfgMjOs%cs?Bqg7q|zFg0UpMSmnu{k24Yy>8hHCO-V{Q#!jtH8tpNx!g!0#Cns z*wabxgwt7v4Fp`j|LbzRYmwkHb;`bM(bP@qwxH_&xZN!d;>-5V zZnR9_VX*A&31gWn3qEP>s(H_5^(eYzm1)&G#g5UUOfiZzss^bF!HmfdN?7ky zNHN!(bDk=ue`?P6PYtskvaDB-+A{6PyHj;vpKf)3@?}b+#L3%UDGJwTU%g*;d-p2- z$@}*1{@-4=%JSQoZ(MdvD`MLTXh ze=o;Jx9t;vvHJn3BPhRd!$>;GTaTX<&! z>tUC>PX(QYmO5pfd;Eb3;hgEAdbULcnR=?gsB8mbkaI#(i%XEQeBYLSY*{|G|E%|6 z2Z5va&2od1bFyEDe|)s@>xBln)lDKxoK`t?v*+JVxw7S?+b6|u=RYl}5IFxY@R5or z7vGyVpDI4j-hSU+em+CrMYDyA!>$LKUohC%xvX(oqb}p$BjI&bY70ttZD)Gw_++BP z-H)QNsSl?->YT&2X38OD#$uV&jo#vQ>#pcswLQ8d=GECJo3|t^$Xe8to7Q{Yovlpg zO;Z0%VXvS@w|ASESIWJ4{j%rIl|xpmn11Jp-11!Z#v*v7{G?i8cl~ZfR(}!hHLXQ{ ztx5&A3c1?02YlEoYQj@nb6 zJ(PCYe5GmG-o<}d&sL^Rtv`ELM@Do?<*HfF|IN-#j!a6u`ZKO+yUN**-Xr08)7ENv?Yzx!DhnpCbSR-8VV}J@feDk z#Sso&(s%$^J9y^7425KPpqZcykH<{RWRGkn0}BI6CIFfT$^>}K!%Vjbj~{642bzbR bih<^VQZa^ktZblwVg Date: Thu, 14 Oct 2010 14:55:03 -0700 Subject: [PATCH 2/3] 6746111: Improve pack200 error message Reviewed-by: jrose --- .../com/sun/java/util/jar/pack/Attribute.java | 4 +- .../sun/java/util/jar/pack/ClassReader.java | 7 +- jdk/test/tools/pack200/AttributeTests.java | 64 ++++++++++++++++-- jdk/test/tools/pack200/badattr.jar | Bin 0 -> 1493 bytes 4 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 jdk/test/tools/pack200/badattr.jar diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java index 0c1b0954300..b662ebb9683 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java @@ -654,8 +654,8 @@ class Attribute implements Comparable, Constants { String layout; public FormatException(String message, int ctype, String name, String layout) { - super(ATTR_CONTEXT_NAME[ctype]+"."+name - +(message == null? "": (": "+message))); + super(ATTR_CONTEXT_NAME[ctype]+ " attribute \"" + name + "\"" + + (message == null? "" : (": " + message))); this.ctype = ctype; this.name = name; this.layout = layout; diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java index cf588957cbf..fd28171a75b 100644 --- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java +++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java @@ -30,6 +30,7 @@ import java.util.*; import com.sun.java.util.jar.pack.Package.Class; import com.sun.java.util.jar.pack.Package.InnerClass; import com.sun.java.util.jar.pack.ConstantPool.*; +import com.sun.tools.classfile.AttributeException; /** * Reader for a class file that is being incorporated into a package. @@ -405,7 +406,7 @@ class ClassReader implements Constants { skip(length, "unknown "+name+" attribute in "+h); continue; } else { - String message = "unknown in "+h; + String message = " is unknown attribute in class " + h; throw new Attribute.FormatException(message, ctype, name, unknownAttrCommand); } @@ -434,6 +435,10 @@ class ClassReader implements Constants { in.readFully(bytes); a = a.addContent(bytes); } + if (a.size() == 0 && !a.layout().isEmpty()) { + throw new ClassFormatException(name + + ": attribute length cannot be zero, in " + h); + } h.addAttribute(a); if (verbose > 2) Utils.log.fine("read "+a); diff --git a/jdk/test/tools/pack200/AttributeTests.java b/jdk/test/tools/pack200/AttributeTests.java index 73e00d23a61..e7107996cc8 100644 --- a/jdk/test/tools/pack200/AttributeTests.java +++ b/jdk/test/tools/pack200/AttributeTests.java @@ -20,12 +20,11 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ - import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; - /* * @test * @bug 6982312 @@ -34,12 +33,11 @@ import java.util.List; * @run main AttributeTests * @author ksrini */ - - public class AttributeTests { public static void main(String... args) throws Exception { test6982312(); + test6746111(); } /* * This is an interim test, which ensures pack200 handles JSR-292 related @@ -72,4 +70,62 @@ public class AttributeTests { testJar.delete(); dynJar.delete(); } + + /* + * this test checks to see if we get the expected strings for output + */ + static void test6746111() throws Exception { + String pack200Cmd = Utils.getPack200Cmd(); + File badAttrJar = new File(".", "badattr.jar"); + Utils.copyFile(new File(Utils.TEST_SRC_DIR, "badattr.jar"), badAttrJar); + File testJar = new File(".", "test.jar"); + List cmds = new ArrayList(); + cmds.add(pack200Cmd); + cmds.add("--repack"); + cmds.add("-v"); + cmds.add(testJar.getAbsolutePath()); + cmds.add(badAttrJar.getAbsolutePath()); + List output = Utils.runExec(cmds); + /* + * compare the repacked jar bit-wise, as all the files + * should be transmitted "as-is". + */ + Utils.doCompareBitWise(badAttrJar.getAbsoluteFile(), testJar.getAbsoluteFile()); + String[] expectedStrings = { + "WARNING: Passing class file uncompressed due to unrecognized" + + " attribute: Foo.class", + "INFO: com.sun.java.util.jar.pack.Attribute$FormatException: " + + "class attribute \"XourceFile\": is unknown attribute " + + "in class Foo", + "INFO: com.sun.java.util.jar.pack.ClassReader$ClassFormatException: " + + "AnnotationDefault: attribute length cannot be zero, in Test.message()", + "WARNING: Passing class file uncompressed due to unknown class format: Test.class" + }; + List notfoundList = new ArrayList(); + notfoundList.addAll(Arrays.asList(expectedStrings)); + // make sure the expected messages are emitted + for (String x : output) { + findString(x, notfoundList, expectedStrings); + } + if (!notfoundList.isEmpty()) { + System.out.println("Not found:"); + for (String x : notfoundList) { + System.out.println(x); + } + throw new Exception("Test fails: " + notfoundList.size() + + " expected strings not found"); + } + testJar.delete(); + badAttrJar.delete(); + } + + private static void findString(String outputStr, List notfoundList, + String[] expectedStrings) { + for (String y : expectedStrings) { + if (outputStr.contains(y)) { + notfoundList.remove(y); + return; + } + } + } } diff --git a/jdk/test/tools/pack200/badattr.jar b/jdk/test/tools/pack200/badattr.jar new file mode 100644 index 0000000000000000000000000000000000000000..330be6147c1da7b15da65df3eb331da064fc39f2 GIT binary patch literal 1493 zcmWIWW@Zs#U|`^2ut>47<@IX&_XfyIU}Rw6WRPKS%g@(K&PgmT4h`XCV3u)SJHr%cc0g75Ih&WrC{2E`3Vjk>RzkUyfS## zi?w_>x5vZDJUr^&`ta5*#erAWd?^m@s#082^e3EWcKBDfj!!cUlb2~PGm^$liqb3gR#J@M7X+MaF8M5AqmZ$!oSeUy`7Yu>BykY%~t z?z+pr*#c04t66TbrX4W2oWKDH39hWfvP68LrLEz6>ZDJY$2m_Oy|9AQ=fhV#3knF( zXy_1|t}=~b<)%MpL|X40Ib+lNVA7&9d%nDgXg#v%OOkKvtEhERdJG8r_vF~v3Z>h- zo&ee%3XCo;U~~ngCZ^=3>XlTKfL)*xw8#g9(c-JLf1}?K2OgK-HAib4L=;cG7I=}R zvTi}Cnct(!$K0~@U;LZrd!du(hSf z{rl%$dXcpyaLOrO8_$TB4^7ve^vQQj%=~}v|809GjR=bzU|9ISeE4@ZFf2|2F(@oT zQj1HF(rynh-C{|*u6>4Fha3c4{~viVYsG?ueDzxr8@37^@!H^_XV6ya*&%%*&t^_5 z`-gx>OAL=5_$~i0+3x;z=>u}ctr3Zf3{+RNm-Y3k>6qX4KI!kLwN1^lHaMbKL8tH9 zwRyFHw_lD2&?fyY9TJ>Sc|~=icu!RD3hT;C<-z=#|AQ!)lM#r(b$~UFDub zoBTFVT;>O0%y)_0#6XMS1|)#KCkOYuOZZe*B@ zYj5_FsfEwd_?iBxtzN{*pVuo?Zks3b@>JV7){2MB0p5&Ea?H324GEwFA>eHzh(;hMZx5=3&V!$gaaoX2_o1 z4J- Date: Mon, 18 Oct 2010 10:29:59 +0100 Subject: [PATCH 3/3] 4837564: (bf) Please make DirectByteBuffer performance enhancements Reviewed-by: chegar --- .../java/nio/Direct-X-Buffer.java.template | 6 +++-- jdk/src/share/classes/sun/misc/VM.java | 16 ++++++++++++++ jdk/test/java/nio/Buffer/LimitDirectMemory.sh | 22 ++++++------------- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/jdk/src/share/classes/java/nio/Direct-X-Buffer.java.template b/jdk/src/share/classes/java/nio/Direct-X-Buffer.java.template index 520b9c46504..6c96df87eef 100644 --- a/jdk/src/share/classes/java/nio/Direct-X-Buffer.java.template +++ b/jdk/src/share/classes/java/nio/Direct-X-Buffer.java.template @@ -29,6 +29,7 @@ package java.nio; import sun.misc.Cleaner; import sun.misc.Unsafe; +import sun.misc.VM; import sun.nio.ch.DirectBuffer; @@ -114,8 +115,9 @@ class Direct$Type$Buffer$RW$$BO$ Direct$Type$Buffer$RW$(int cap) { // package-private #if[rw] super(-1, 0, cap, cap, false); + boolean pa = VM.isDirectMemoryPageAligned(); int ps = Bits.pageSize(); - int size = cap + ps; + long size = Math.max(1L, (long)cap + (pa ? ps : 0)); Bits.reserveMemory(size, cap); long base = 0; @@ -126,7 +128,7 @@ class Direct$Type$Buffer$RW$$BO$ throw x; } unsafe.setMemory(base, size, (byte) 0); - if (base % ps != 0) { + if (pa && (base % ps != 0)) { // Round up to page boundary address = base + ps - (base & (ps - 1)); } else { diff --git a/jdk/src/share/classes/sun/misc/VM.java b/jdk/src/share/classes/sun/misc/VM.java index 8b810b5a361..9ea6990ae24 100644 --- a/jdk/src/share/classes/sun/misc/VM.java +++ b/jdk/src/share/classes/sun/misc/VM.java @@ -178,6 +178,17 @@ public class VM { return directMemory; } + // User-controllable flag that determines if direct buffers should be page + // aligned. The "-XX:+PageAlignDirectMemory" option can be used to force + // buffers, allocated by ByteBuffer.allocateDirect, to be page aligned. + private static boolean pageAlignDirectMemory; + + // Returns {@code true} if the direct buffers should be page aligned. This + // variable is initialized by saveAndRemoveProperties. + public static boolean isDirectMemoryPageAligned() { + return pageAlignDirectMemory; + } + // A user-settable boolean to determine whether ClassLoader.loadClass should // accept array syntax. This value may be changed during VM initialization // via the system property "sun.lang.ClassLoader.allowArraySyntax". @@ -252,6 +263,11 @@ public class VM { } } + // Check if direct buffers should be page aligned + s = (String)props.remove("sun.nio.PageAlignDirectMemory"); + if ("true".equals(s)) + pageAlignDirectMemory = true; + // Set a boolean to determine whether ClassLoader.loadClass accepts // array syntax. This value is controlled by the system property // "sun.lang.ClassLoader.allowArraySyntax". diff --git a/jdk/test/java/nio/Buffer/LimitDirectMemory.sh b/jdk/test/java/nio/Buffer/LimitDirectMemory.sh index 3ac1056a75f..38e8c0c05fa 100644 --- a/jdk/test/java/nio/Buffer/LimitDirectMemory.sh +++ b/jdk/test/java/nio/Buffer/LimitDirectMemory.sh @@ -30,18 +30,7 @@ # @build LimitDirectMemory # @run shell LimitDirectMemory.sh -# set platform-dependent variable -OS=`uname -s` -case "$OS" in - SunOS | Linux ) TMP=/tmp ;; - Windows* ) TMP="c:/temp" ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - -TMP1=${TMP}/tmp1_$$ +TMP1=tmp_$$ runTest() { echo "Testing: $*" @@ -82,18 +71,21 @@ runTest -XX:MaxDirectMemorySize=65M -cp ${TESTCLASSES} \ # Exactly the default amount of memory is available. runTest -cp ${TESTCLASSES} LimitDirectMemory false 10 1 -runTest -cp ${TESTCLASSES} LimitDirectMemory false 0 DEFAULT -runTest -cp ${TESTCLASSES} LimitDirectMemory true 0 DEFAULT+1 +runTest -Xmx64m -cp ${TESTCLASSES} LimitDirectMemory false 0 DEFAULT +runTest -Xmx64m -cp ${TESTCLASSES} LimitDirectMemory true 0 DEFAULT+1 # We should be able to eliminate direct memory allocation entirely. runTest -XX:MaxDirectMemorySize=0 -cp ${TESTCLASSES} LimitDirectMemory true 0 1 # Setting the system property should not work so we should be able to allocate # the default amount. -runTest -Dsun.nio.MaxDirectMemorySize=1K -cp ${TESTCLASSES} \ +runTest -Dsun.nio.MaxDirectMemorySize=1K -Xmx64m -cp ${TESTCLASSES} \ LimitDirectMemory false DEFAULT-1 DEFAULT/2 # Various bad values fail to launch the VM. launchFail foo launchFail 10kmt launchFail -1 + +# Clean-up +rm ${TMP1}