--- a/hotspot/.hgtags Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/.hgtags Tue May 23 18:42:08 2017 +0000
@@ -579,3 +579,4 @@
1ca7ed1b17b5776930d641d1379834f3140a74e4 jdk-9+167
fbb9c802649585d19f6d7e81b4a519d44806225a jdk-9+168
16d692be099c5c38eb48cc9aca78b0c900910d5b jdk-9+169
+38a240fd58a287acb1963920b92ed4d9c2fd39e3 jdk-9+170
--- a/hotspot/make/templates/gpl-cp-header Tue May 23 11:58:32 2017 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-Copyright (c) %YEARS%, 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. Oracle designates this
-particular file as subject to the "Classpath" exception as provided
-by Oracle in the LICENSE file that accompanied this code.
-
-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.
--- a/hotspot/make/templates/gpl-header Tue May 23 11:58:32 2017 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-Copyright (c) %YEARS%, 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.
--- a/hotspot/src/share/vm/classfile/stringTable.cpp Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/src/share/vm/classfile/stringTable.cpp Tue May 23 18:42:08 2017 +0000
@@ -315,7 +315,11 @@
}
void StringTable::unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
- buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), processed, removed);
+ BucketUnlinkContext context;
+ buckets_unlink_or_oops_do(is_alive, f, 0, the_table()->table_size(), &context);
+ _the_table->bulk_free_entries(&context);
+ *processed = context._num_processed;
+ *removed = context._num_removed;
}
void StringTable::possibly_parallel_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int* processed, int* removed) {
@@ -324,6 +328,7 @@
assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
const int limit = the_table()->table_size();
+ BucketUnlinkContext context;
for (;;) {
// Grab next set of buckets to scan
int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
@@ -333,8 +338,11 @@
}
int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
- buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, processed, removed);
+ buckets_unlink_or_oops_do(is_alive, f, start_idx, end_idx, &context);
}
+ _the_table->bulk_free_entries(&context);
+ *processed = context._num_processed;
+ *removed = context._num_removed;
}
void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
@@ -360,7 +368,7 @@
}
}
-void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed) {
+void StringTable::buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, BucketUnlinkContext* context) {
const int limit = the_table()->table_size();
assert(0 <= start_idx && start_idx <= limit,
@@ -384,10 +392,9 @@
p = entry->next_addr();
} else {
*p = entry->next();
- the_table()->free_entry(entry);
- (*removed)++;
+ context->free_entry(entry);
}
- (*processed)++;
+ context->_num_processed++;
entry = *p;
}
}
--- a/hotspot/src/share/vm/classfile/stringTable.hpp Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/src/share/vm/classfile/stringTable.hpp Tue May 23 18:42:08 2017 +0000
@@ -61,9 +61,13 @@
// Apply the give oop closure to the entries to the buckets
// in the range [start_idx, end_idx).
static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx);
+
+ typedef StringTable::BucketUnlinkContext BucketUnlinkContext;
// Unlink or apply the give oop closure to the entries to the buckets
- // in the range [start_idx, end_idx).
- static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, int* processed, int* removed);
+ // in the range [start_idx, end_idx). Unlinked bucket entries are collected in the given
+ // context to be freed later.
+ // This allows multiple threads to work on the table at once.
+ static void buckets_unlink_or_oops_do(BoolObjectClosure* is_alive, OopClosure* f, int start_idx, int end_idx, BucketUnlinkContext* context);
// Hashing algorithm, used as the hash value used by the
// StringTable for bucket selection and comparison (stored in the
--- a/hotspot/src/share/vm/classfile/symbolTable.cpp Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/src/share/vm/classfile/symbolTable.cpp Tue May 23 18:42:08 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -98,7 +98,7 @@
int SymbolTable::_symbols_counted = 0;
volatile int SymbolTable::_parallel_claimed_idx = 0;
-void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int* removed) {
+void SymbolTable::buckets_unlink(int start_idx, int end_idx, BucketUnlinkContext* context) {
for (int i = start_idx; i < end_idx; ++i) {
HashtableEntry<Symbol*, mtSymbol>** p = the_table()->bucket_addr(i);
HashtableEntry<Symbol*, mtSymbol>* entry = the_table()->bucket(i);
@@ -111,15 +111,14 @@
break;
}
Symbol* s = entry->literal();
- (*processed)++;
+ context->_num_processed++;
assert(s != NULL, "just checking");
// If reference count is zero, remove.
if (s->refcount() == 0) {
assert(!entry->is_shared(), "shared entries should be kept live");
delete s;
- (*removed)++;
*p = entry->next();
- the_table()->free_entry(entry);
+ context->free_entry(entry);
} else {
p = entry->next_addr();
}
@@ -132,17 +131,20 @@
// Remove unreferenced symbols from the symbol table
// This is done late during GC.
void SymbolTable::unlink(int* processed, int* removed) {
- size_t memory_total = 0;
- buckets_unlink(0, the_table()->table_size(), processed, removed);
- _symbols_removed += *removed;
- _symbols_counted += *processed;
+ BucketUnlinkContext context;
+ buckets_unlink(0, the_table()->table_size(), &context);
+ _the_table->bulk_free_entries(&context);
+ *processed = context._num_processed;
+ *removed = context._num_removed;
+
+ _symbols_removed = context._num_removed;
+ _symbols_counted = context._num_processed;
}
void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) {
const int limit = the_table()->table_size();
- size_t memory_total = 0;
-
+ BucketUnlinkContext context;
for (;;) {
// Grab next set of buckets to scan
int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
@@ -152,10 +154,15 @@
}
int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
- buckets_unlink(start_idx, end_idx, processed, removed);
+ buckets_unlink(start_idx, end_idx, &context);
}
- Atomic::add(*processed, &_symbols_counted);
- Atomic::add(*removed, &_symbols_removed);
+
+ _the_table->bulk_free_entries(&context);
+ *processed = context._num_processed;
+ *removed = context._num_removed;
+
+ Atomic::add(context._num_processed, &_symbols_counted);
+ Atomic::add(context._num_removed, &_symbols_removed);
}
// Create a new table and using alternate hash code, populate the new table
--- a/hotspot/src/share/vm/classfile/symbolTable.hpp Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/src/share/vm/classfile/symbolTable.hpp Tue May 23 18:42:08 2017 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -154,8 +154,11 @@
static volatile int _parallel_claimed_idx;
- // Release any dead symbols
- static void buckets_unlink(int start_idx, int end_idx, int* processed, int* removed);
+ typedef SymbolTable::BucketUnlinkContext BucketUnlinkContext;
+ // Release any dead symbols. Unlinked bucket entries are collected in the given
+ // context to be freed later.
+ // This allows multiple threads to work on the table at once.
+ static void buckets_unlink(int start_idx, int end_idx, BucketUnlinkContext* context);
public:
enum {
symbol_alloc_batch_size = 8,
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Tue May 23 18:42:08 2017 +0000
@@ -676,7 +676,7 @@
\
nonstatic_field(BasicHashtable<mtInternal>, _table_size, int) \
nonstatic_field(BasicHashtable<mtInternal>, _buckets, HashtableBucket<mtInternal>*) \
- nonstatic_field(BasicHashtable<mtInternal>, _free_list, BasicHashtableEntry<mtInternal>*) \
+ volatile_nonstatic_field(BasicHashtable<mtInternal>, _free_list, BasicHashtableEntry<mtInternal>*) \
nonstatic_field(BasicHashtable<mtInternal>, _first_free_entry, char*) \
nonstatic_field(BasicHashtable<mtInternal>, _end_block, char*) \
nonstatic_field(BasicHashtable<mtInternal>, _entry_size, int) \
--- a/hotspot/src/share/vm/utilities/hashtable.cpp Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/src/share/vm/utilities/hashtable.cpp Tue May 23 18:42:08 2017 +0000
@@ -159,6 +159,35 @@
}
}
+template <MEMFLAGS F> void BasicHashtable<F>::BucketUnlinkContext::free_entry(BasicHashtableEntry<F>* entry) {
+ entry->set_next(_removed_head);
+ _removed_head = entry;
+ if (_removed_tail == NULL) {
+ _removed_tail = entry;
+ }
+ _num_removed++;
+}
+
+template <MEMFLAGS F> void BasicHashtable<F>::bulk_free_entries(BucketUnlinkContext* context) {
+ if (context->_num_removed == 0) {
+ assert(context->_removed_head == NULL && context->_removed_tail == NULL,
+ "Zero entries in the unlink context, but elements linked from " PTR_FORMAT " to " PTR_FORMAT,
+ p2i(context->_removed_head), p2i(context->_removed_tail));
+ return;
+ }
+
+ // MT-safe add of the list of BasicHashTableEntrys from the context to the free list.
+ BasicHashtableEntry<F>* current = _free_list;
+ while (true) {
+ context->_removed_tail->set_next(current);
+ BasicHashtableEntry<F>* old = (BasicHashtableEntry<F>*)Atomic::cmpxchg_ptr(context->_removed_head, &_free_list, current);
+ if (old == current) {
+ break;
+ }
+ current = old;
+ }
+ Atomic::add(-context->_num_removed, &_number_of_entries);
+}
// Copy the table to the shared space.
@@ -192,7 +221,6 @@
}
}
-
template <class T, MEMFLAGS F> int RehashableHashtable<T, F>::literal_size(Symbol *symbol) {
return symbol->size() * HeapWordSize;
}
--- a/hotspot/src/share/vm/utilities/hashtable.hpp Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/src/share/vm/utilities/hashtable.hpp Tue May 23 18:42:08 2017 +0000
@@ -162,11 +162,11 @@
// Instance variables
int _table_size;
HashtableBucket<F>* _buckets;
- BasicHashtableEntry<F>* _free_list;
+ BasicHashtableEntry<F>* volatile _free_list;
char* _first_free_entry;
char* _end_block;
int _entry_size;
- int _number_of_entries;
+ volatile int _number_of_entries;
protected:
@@ -211,6 +211,24 @@
// Free the buckets in this hashtable
void free_buckets();
+ // Helper data structure containing context for the bucket entry unlink process,
+ // storing the unlinked buckets in a linked list.
+ // Also avoids the need to pass around these four members as parameters everywhere.
+ struct BucketUnlinkContext {
+ int _num_processed;
+ int _num_removed;
+ // Head and tail pointers for the linked list of removed entries.
+ BasicHashtableEntry<F>* _removed_head;
+ BasicHashtableEntry<F>* _removed_tail;
+
+ BucketUnlinkContext() : _num_processed(0), _num_removed(0), _removed_head(NULL), _removed_tail(NULL) {
+ }
+
+ void free_entry(BasicHashtableEntry<F>* entry);
+ };
+ // Add of bucket entries linked together in the given context to the global free list. This method
+ // is mt-safe wrt. to other calls of this method.
+ void bulk_free_entries(BucketUnlinkContext* context);
public:
int table_size() { return _table_size; }
void set_entry(int index, BasicHashtableEntry<F>* entry);
--- a/hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java Tue May 23 18:42:08 2017 +0000
@@ -24,7 +24,7 @@
import static jdk.test.lib.Asserts.assertEQ;
import static jdk.test.lib.Asserts.assertFalse;
import static jdk.test.lib.Asserts.assertTrue;
-import jdk.test.lib.DynamicVMOption;
+import jdk.test.lib.management.DynamicVMOption;
/**
* @test TestDynMaxHeapFreeRatio
--- a/hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java Tue May 23 18:42:08 2017 +0000
@@ -38,7 +38,7 @@
import static jdk.test.lib.Asserts.assertEQ;
import static jdk.test.lib.Asserts.assertFalse;
import static jdk.test.lib.Asserts.assertTrue;
-import jdk.test.lib.DynamicVMOption;
+import jdk.test.lib.management.DynamicVMOption;
public class TestDynMinHeapFreeRatio {
--- a/hotspot/test/gc/metaspace/TestMetaspacePerfCounters.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/gc/metaspace/TestMetaspacePerfCounters.java Tue May 23 18:42:08 2017 +0000
@@ -26,7 +26,7 @@
import java.util.ArrayList;
import jdk.test.lib.ByteCodeLoader;
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.Platform;
import sun.management.ManagementFactoryHelper;
--- a/hotspot/test/gc/parallel/TestDynShrinkHeap.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/gc/parallel/TestDynShrinkHeap.java Tue May 23 18:42:08 2017 +0000
@@ -31,7 +31,7 @@
* @library /test/lib /
* @run main/othervm -XX:+UseAdaptiveSizePolicyWithSystemGC -XX:+UseParallelGC -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 -Xmx1g -verbose:gc TestDynShrinkHeap
*/
-import jdk.test.lib.DynamicVMOption;
+import jdk.test.lib.management.DynamicVMOption;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryUsage;
import java.util.ArrayList;
--- a/hotspot/test/runtime/BadObjectClass/BootstrapRedefine.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/BadObjectClass/BootstrapRedefine.java Tue May 23 18:42:08 2017 +0000
@@ -31,7 +31,7 @@
* @run main BootstrapRedefine
*/
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
--- a/hotspot/test/runtime/CommandLine/OptionsValidation/TestJcmdOutput.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/CommandLine/OptionsValidation/TestJcmdOutput.java Tue May 23 18:42:08 2017 +0000
@@ -34,7 +34,7 @@
*/
import jdk.test.lib.Asserts;
-import jdk.test.lib.DynamicVMOption;
+import jdk.test.lib.management.DynamicVMOption;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.dcmd.PidJcmdExecutor;
--- a/hotspot/test/runtime/CommandLine/OptionsValidation/common/optionsvalidation/JVMOption.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/CommandLine/OptionsValidation/common/optionsvalidation/JVMOption.java Tue May 23 18:42:08 2017 +0000
@@ -29,7 +29,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import jdk.test.lib.DynamicVMOption;
+import jdk.test.lib.management.DynamicVMOption;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.dcmd.CommandExecutor;
--- a/hotspot/test/runtime/CommandLine/VMOptionsFile/TestVMOptionsFile.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/CommandLine/VMOptionsFile/TestVMOptionsFile.java Tue May 23 18:42:08 2017 +0000
@@ -51,7 +51,7 @@
import java.util.Properties;
import java.util.Set;
import jdk.test.lib.Asserts;
-import jdk.test.lib.DynamicVMOption;
+import jdk.test.lib.management.DynamicVMOption;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/RedefineTests/ModifyAnonymous.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/RedefineTests/ModifyAnonymous.java Tue May 23 18:42:08 2017 +0000
@@ -34,15 +34,14 @@
import java.io.FileNotFoundException;
import java.io.PrintWriter;
-import java.lang.NoSuchFieldException;
-import java.lang.NoSuchMethodException;
import java.lang.RuntimeException;
import java.lang.instrument.ClassDefinition;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
-import jdk.test.lib.*;
+
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
public class ModifyAnonymous {
--- a/hotspot/test/runtime/Unsafe/DefineClass.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/Unsafe/DefineClass.java Tue May 23 18:42:08 2017 +0000
@@ -32,8 +32,8 @@
*/
import java.security.ProtectionDomain;
-import java.io.InputStream;
-import jdk.test.lib.InMemoryJavaCompiler;
+
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.internal.misc.Unsafe;
import static jdk.test.lib.Asserts.*;
--- a/hotspot/test/runtime/Unsafe/NestedUnsafe.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/Unsafe/NestedUnsafe.java Tue May 23 18:42:08 2017 +0000
@@ -31,12 +31,9 @@
* @run main NestedUnsafe
*/
-import java.security.ProtectionDomain;
-import java.io.InputStream;
import java.lang.*;
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.internal.misc.Unsafe;
-import static jdk.test.lib.Asserts.*;
// package p;
--- a/hotspot/test/runtime/defineAnonClass/NestedUnsafe.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/defineAnonClass/NestedUnsafe.java Tue May 23 18:42:08 2017 +0000
@@ -34,11 +34,10 @@
package p;
-import java.security.ProtectionDomain;
-import java.io.InputStream;
import java.lang.*;
-import jdk.test.lib.*;
+
import jdk.internal.misc.Unsafe;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
// Test that an anonymous class in package 'p' cannot define its own anonymous class
--- a/hotspot/test/runtime/defineAnonClass/NestedUnsafe2.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/defineAnonClass/NestedUnsafe2.java Tue May 23 18:42:08 2017 +0000
@@ -34,11 +34,10 @@
package p;
-import java.security.ProtectionDomain;
-import java.io.InputStream;
import java.lang.*;
-import jdk.test.lib.*;
+
import jdk.internal.misc.Unsafe;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
// Test that an anonymous class that gets put in its host's package cannot define
--- a/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/getSysPackage/GetSysPkgTest.java Tue May 23 18:42:08 2017 +0000
@@ -33,7 +33,7 @@
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
--- a/hotspot/test/runtime/modules/ModuleStress/ModuleStress.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/ModuleStress/ModuleStress.java Tue May 23 18:42:08 2017 +0000
@@ -38,8 +38,7 @@
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
-import jdk.test.lib.InMemoryJavaCompiler;
-import java.io.File;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
public class ModuleStress {
--- a/hotspot/test/runtime/modules/PatchModule/PatchModule2Dirs.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/PatchModule/PatchModule2Dirs.java Tue May 23 18:42:08 2017 +0000
@@ -30,10 +30,9 @@
* @run main PatchModule2Dirs
*/
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
-import java.io.File;
public class PatchModule2Dirs {
--- a/hotspot/test/runtime/modules/PatchModule/PatchModuleCDS.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleCDS.java Tue May 23 18:42:08 2017 +0000
@@ -31,8 +31,7 @@
* @run main PatchModuleCDS
*/
-import java.io.File;
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/modules/PatchModule/PatchModuleClassList.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleClassList.java Tue May 23 18:42:08 2017 +0000
@@ -33,7 +33,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/modules/PatchModule/PatchModuleJavaBase.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleJavaBase.java Tue May 23 18:42:08 2017 +0000
@@ -31,7 +31,7 @@
* @run main PatchModuleJavaBase
*/
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/modules/PatchModule/PatchModuleTest.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleTest.java Tue May 23 18:42:08 2017 +0000
@@ -31,7 +31,7 @@
* @run main PatchModuleTest
*/
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJar.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJar.java Tue May 23 18:42:08 2017 +0000
@@ -31,7 +31,7 @@
* @run main PatchModuleTestJar
*/
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJarDir.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleTestJarDir.java Tue May 23 18:42:08 2017 +0000
@@ -32,8 +32,8 @@
*/
import java.io.File;
-import java.nio.file.Files;
-import jdk.test.lib.InMemoryJavaCompiler;
+
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/modules/PatchModule/PatchModuleTraceCL.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/PatchModule/PatchModuleTraceCL.java Tue May 23 18:42:08 2017 +0000
@@ -32,8 +32,7 @@
* @run main PatchModuleTraceCL
*/
-import java.io.File;
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/modules/Visibility/PatchModuleVisibility.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/Visibility/PatchModuleVisibility.java Tue May 23 18:42:08 2017 +0000
@@ -36,7 +36,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/modules/Visibility/XbootcpNoVisibility.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/Visibility/XbootcpNoVisibility.java Tue May 23 18:42:08 2017 +0000
@@ -31,7 +31,7 @@
* @run main/othervm XbootcpNoVisibility
*/
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.ProcessTools;
import jdk.test.lib.process.OutputAnalyzer;
--- a/hotspot/test/runtime/modules/Visibility/XbootcpVisibility.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/modules/Visibility/XbootcpVisibility.java Tue May 23 18:42:08 2017 +0000
@@ -36,7 +36,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
--- a/hotspot/test/runtime/noClassDefFoundMsg/NoClassDefFoundMsg.java Tue May 23 11:58:32 2017 -0400
+++ b/hotspot/test/runtime/noClassDefFoundMsg/NoClassDefFoundMsg.java Tue May 23 18:42:08 2017 +0000
@@ -31,7 +31,7 @@
* @run main/native NoClassDefFoundMsg
*/
-import jdk.test.lib.InMemoryJavaCompiler;
+import jdk.test.lib.compiler.InMemoryJavaCompiler;
import jdk.internal.misc.Unsafe;
public class NoClassDefFoundMsg {