# HG changeset patch # User andrew # Date 1435804520 -3600 # Node ID ca35eec731499ff7bb1f9761a97a448d19e292c1 # Parent 03b6247f07952e2f193a62d2e74f4f2938c58435# Parent 24fe7303237f25572d7cac2825bd9ff5452b02b3 Merge 2015/07 CPU. diff -r 03b6247f0795 -r ca35eec73149 .hgtags --- a/.hgtags Thu Jul 02 03:31:00 2015 +0100 +++ b/.hgtags Thu Jul 02 03:35:20 2015 +0100 @@ -555,6 +555,8 @@ 28b50d07f6f8c5a567b6a25e95a423948114a004 jdk8u25-b17 639abc668bfe995dba811dd35411b9ea8a9041cd jdk8u25-b18 c3528699fb33fe3eb1d117504184ae7ab2507aa1 jdk8u25-b31 +631f0c7b49c091c6865d79d248d6551a270ac22f jdk8u25-b32 +4e1f52384f9ffa803838acad545cd63de48a7b35 jdk8u25-b33 5bb683bbe2c74876d585b5c3232fc3aab7b23e97 jdk8u31-b00 5bb686ae3b89f8aa1c74331b2d24e2a5ebd43448 jdk8u31-b01 087678da96603c9705b38b6cc4a6569ac7b4420a jdk8u31-b02 @@ -569,6 +571,8 @@ 9906d432d6dbd2cda242e3f3cfde7cf6c90245bf jdk8u31-b11 e13839545238d1ecf17f0489bb6fb765de46719a jdk8u31-b12 4206e725d584be942c25ff46ff23d8e299ca4a4c jdk8u31-b13 +b517d3a9aebf0fee64808f9a7c0ef8e0b82d5ed3 jdk8u31-b31 +15d8108258cb60a58bdd03b9ff8e77dd6727a804 jdk8u31-b32 1b3abbeee961dee49780c0e4af5337feb918c555 jdk8u40-b10 f10fe402dfb1543723b4b117a7cba3ea3d4159f1 hs25.40-b15 99372b2fee0eb8b3452f47230e84aa6e97003184 jdk8u40-b11 @@ -597,3 +601,20 @@ fa4e797f61e6dda1a60e06944018213bff2a1b76 jdk8u40-b24 719def58024b06fea3028879bbb8ebbf69a4e566 jdk8u40-b25 a29c20ae925c4157713f4598f8b79d27106f12d7 cpu-20150414 +698dd28ecc785ffc43e3f12266b13e85382c26a8 jdk8u40-b25 +f39b6944ad447269b81e06ca5da9edff9e9e67c8 jdk8u40-b26 +6824e2475e0432e27f9cc51838bc34ea5fbf5113 jdk8u40-b27 +b95f13f05f553309cd74d6ccf8fcedb259c6716c jdk8u45-b00 +41c3c456e326185053f0654be838f4b0bfb38078 jdk8u45-b01 +626fd8c2eec63e2a2dff3839bfe12c0431bf00a4 jdk8u45-b02 +f41aa01b0a043611ee0abcb81a40f7d80085ec27 jdk8u45-b03 +2f586e3c4b6db807ac6036b485b2890ff82f7bfd jdk8u45-b04 +344ff6e45a1e2960ac4a583f63ebfb54cd52e6b4 jdk8u45-b05 +3afa9cc6e8d537ee456b8e12d1abb1da520b5ddc jdk8u45-b06 +5871f3dd9b4a2c4b44e7da2184f4430323e0c04b jdk8u45-b07 +35c7330b68e21d0dfaaedaaf74b794fd10606e9c jdk8u45-b08 +35d8318de0b6d4e68e2e0a04f6e20cafd113ca54 jdk8u45-b09 +a9f5786079202b74b3651e1097c0b2341b2178b9 jdk8u45-b10 +f4822d12204179e6a3e7aaf98991b6171670cbf2 jdk8u45-b11 +dc29108bcbcbfcd49eaa9135368306dc85db73a6 jdk8u45-b12 +efbf340fc7f56e49735111c23cef030413146409 jdk8u45-b13 diff -r 03b6247f0795 -r ca35eec73149 THIRD_PARTY_README diff -r 03b6247f0795 -r ca35eec73149 make/hotspot_version --- a/make/hotspot_version Thu Jul 02 03:31:00 2015 +0100 +++ b/make/hotspot_version Thu Jul 02 03:35:20 2015 +0100 @@ -34,8 +34,8 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2015 HS_MAJOR_VER=25 -HS_MINOR_VER=45 -HS_BUILD_NUMBER=02 +HS_MINOR_VER=51 +HS_BUILD_NUMBER=03 JDK_MAJOR_VER=1 JDK_MINOR_VER=8 diff -r 03b6247f0795 -r ca35eec73149 src/os/bsd/vm/perfMemory_bsd.cpp diff -r 03b6247f0795 -r ca35eec73149 src/os/linux/vm/perfMemory_linux.cpp diff -r 03b6247f0795 -r ca35eec73149 src/os/solaris/vm/perfMemory_solaris.cpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/c1/c1_LIRGenerator.cpp --- a/src/share/vm/c1/c1_LIRGenerator.cpp Thu Jul 02 03:31:00 2015 +0100 +++ b/src/share/vm/c1/c1_LIRGenerator.cpp Thu Jul 02 03:35:20 2015 +0100 @@ -2220,7 +2220,15 @@ if (log2_scale != 0) { // temporary fix (platform dependent code without shift on Intel would be better) // TODO: ARM also allows embedded shift in the address - __ shift_left(index_op, log2_scale, index_op); + LIR_Opr tmp = new_pointer_register(); + if (TwoOperandLIRForm) { + __ move(index_op, tmp); + index_op = tmp; + } + __ shift_left(index_op, log2_scale, tmp); + if (!TwoOperandLIRForm) { + index_op = tmp; + } } LIR_Address* addr = new LIR_Address(base_op, index_op, x->basic_type()); diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/classfile/defaultMethods.cpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/classfile/systemDictionary.cpp --- a/src/share/vm/classfile/systemDictionary.cpp Thu Jul 02 03:31:00 2015 +0100 +++ b/src/share/vm/classfile/systemDictionary.cpp Thu Jul 02 03:35:20 2015 +0100 @@ -2349,9 +2349,6 @@ assert(!THREAD->is_Compiler_thread(), ""); Handle method_type = SystemDictionary::find_method_handle_type(signature, accessing_klass, CHECK_(empty)); - if (false) { // FIXME: Decide if the Java upcall should resolve signatures. - method_type = java_lang_String::create_from_symbol(signature, CHECK_(empty)); - } KlassHandle mh_klass = SystemDictionary::MethodHandle_klass(); int ref_kind = JVM_REF_invokeVirtual; @@ -2383,6 +2380,24 @@ return unpack_method_and_appendix(mname, accessing_klass, appendix_box, appendix_result, THREAD); } +// Decide if we can globally cache a lookup of this class, to be returned to any client that asks. +// We must ensure that all class loaders everywhere will reach this class, for any client. +// This is a safe bet for public classes in java.lang, such as Object and String. +// We also include public classes in java.lang.invoke, because they appear frequently in system-level method types. +// Out of an abundance of caution, we do not include any other classes, not even for packages like java.util. +static bool is_always_visible_class(oop mirror) { + Klass* klass = java_lang_Class::as_Klass(mirror); + if (klass->oop_is_objArray()) { + klass = ObjArrayKlass::cast(klass)->bottom_klass(); // check element type + } + if (klass->oop_is_typeArray()) { + return true; // primitive array + } + assert(klass->oop_is_instance(), klass->external_name()); + return klass->is_public() && + (InstanceKlass::cast(klass)->is_same_class_package(SystemDictionary::Object_klass()) || // java.lang + InstanceKlass::cast(klass)->is_same_class_package(SystemDictionary::MethodHandle_klass())); // java.lang.invoke +} // Ask Java code to find or construct a java.lang.invoke.MethodType for the given // signature, as interpreted relative to the given class loader. @@ -2405,32 +2420,33 @@ } Handle class_loader, protection_domain; - bool is_on_bcp = true; // keep this true as long as we can materialize from the boot classloader + if (accessing_klass.not_null()) { + class_loader = Handle(THREAD, InstanceKlass::cast(accessing_klass())->class_loader()); + protection_domain = Handle(THREAD, InstanceKlass::cast(accessing_klass())->protection_domain()); + } + bool can_be_cached = true; int npts = ArgumentCount(signature).size(); objArrayHandle pts = oopFactory::new_objArray(SystemDictionary::Class_klass(), npts, CHECK_(empty)); int arg = 0; - Handle rt; // the return type from the signature + Handle rt; // the return type from the signature ResourceMark rm(THREAD); for (SignatureStream ss(signature); !ss.is_done(); ss.next()) { oop mirror = NULL; - if (is_on_bcp) { - // Note: class_loader & protection_domain are both null at this point. - mirror = ss.as_java_mirror(class_loader, protection_domain, + if (can_be_cached) { + // Use neutral class loader to lookup candidate classes to be placed in the cache. + mirror = ss.as_java_mirror(Handle(), Handle(), SignatureStream::ReturnNull, CHECK_(empty)); - if (mirror == NULL) { - // fall back from BCP to accessing_klass - if (accessing_klass.not_null()) { - class_loader = Handle(THREAD, InstanceKlass::cast(accessing_klass())->class_loader()); - protection_domain = Handle(THREAD, InstanceKlass::cast(accessing_klass())->protection_domain()); - } - is_on_bcp = false; + if (mirror == NULL || (ss.is_object() && !is_always_visible_class(mirror))) { + // Fall back to accessing_klass context. + can_be_cached = false; } } - if (!is_on_bcp) { + if (!can_be_cached) { // Resolve, throwing a real error if it doesn't work. mirror = ss.as_java_mirror(class_loader, protection_domain, SignatureStream::NCDFError, CHECK_(empty)); } + assert(!oopDesc::is_null(mirror), ss.as_symbol(THREAD)->as_C_string()); if (ss.at_return_type()) rt = Handle(THREAD, mirror); else @@ -2462,7 +2478,7 @@ &args, CHECK_(empty)); Handle method_type(THREAD, (oop) result.get_jobject()); - if (is_on_bcp) { + if (can_be_cached) { // We can cache this MethodType inside the JVM. MutexLocker ml(SystemDictionary_lock, THREAD); spe = invoke_method_table()->find_entry(index, hash, signature, null_iid); diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/code/dependencies.cpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/code/dependencies.hpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/memory/referenceProcessor.cpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/oops/instanceKlass.cpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/oops/instanceKlass.hpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/oops/klassVtable.cpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/prims/jvmtiClassFileReconstituter.hpp --- a/src/share/vm/prims/jvmtiClassFileReconstituter.hpp Thu Jul 02 03:31:00 2015 +0100 +++ b/src/share/vm/prims/jvmtiClassFileReconstituter.hpp Thu Jul 02 03:35:20 2015 +0100 @@ -68,11 +68,11 @@ ~JvmtiConstantPoolReconstituter() { if (_symmap != NULL) { - os::free(_symmap, mtClass); + delete _symmap; _symmap = NULL; } if (_classmap != NULL) { - os::free(_classmap, mtClass); + delete _classmap; _classmap = NULL; } } diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/runtime/arguments.cpp diff -r 03b6247f0795 -r ca35eec73149 src/share/vm/utilities/vmError.cpp