/hg/icedtea8-forest/hotspot: 3 new changesets

andrew at icedtea.classpath.org andrew at icedtea.classpath.org
Wed Nov 18 04:09:05 UTC 2015


changeset cbdd812ea25e in /hg/icedtea8-forest/hotspot
details: http://icedtea.classpath.org/hg/icedtea8-forest/hotspot?cmd=changeset;node=cbdd812ea25e
author: vlivanov
date: Wed Nov 18 03:40:25 2015 +0000

	8087218, PR2740: Constant fold loads from final instance fields in VM anonymous classes
	Reviewed-by: jrose, rbackman


changeset 71bc933d7a5b in /hg/icedtea8-forest/hotspot
details: http://icedtea.classpath.org/hg/icedtea8-forest/hotspot?cmd=changeset;node=71bc933d7a5b
author: shade
date: Thu Oct 29 14:08:19 2015 +0300

	8140483, PR2740: Atomic*FieldUpdaters final fields should be trusted
	Summary: Add exceptions for A*FU subclasses that do the actual work.
	Reviewed-by: jrose, vlivanov


changeset ddebea156752 in /hg/icedtea8-forest/hotspot
details: http://icedtea.classpath.org/hg/icedtea8-forest/hotspot?cmd=changeset;node=ddebea156752
author: andrew
date: Wed Nov 18 03:43:28 2015 +0000

	PR2743: Remove bad AArch64 merge fragment


diffstat:

 src/share/vm/ci/ciField.cpp          |  12 ++++++++++++
 src/share/vm/ci/ciInstanceKlass.cpp  |   2 ++
 src/share/vm/ci/ciInstanceKlass.hpp  |   5 +++++
 src/share/vm/classfile/vmSymbols.hpp |   6 +++++-
 src/share/vm/code/relocInfo.hpp      |   4 ----
 5 files changed, 24 insertions(+), 5 deletions(-)

diffs (93 lines):

diff -r 3b05ef40e997 -r ddebea156752 src/share/vm/ci/ciField.cpp
--- a/src/share/vm/ci/ciField.cpp	Fri Oct 02 06:32:22 2015 +0100
+++ b/src/share/vm/ci/ciField.cpp	Wed Nov 18 03:43:28 2015 +0000
@@ -187,6 +187,18 @@
   // Even if general trusting is disabled, trust system-built closures in these packages.
   if (holder->is_in_package("java/lang/invoke") || holder->is_in_package("sun/invoke"))
     return true;
+  // Trust VM anonymous classes. They are private API (sun.misc.Unsafe) and can't be serialized,
+  // so there is no hacking of finals going on with them.
+  if (holder->is_anonymous())
+    return true;
+  // Trust Atomic*FieldUpdaters: they are very important for performance, and make up one
+  // more reason not to use Unsafe, if their final fields are trusted. See more in JDK-8140483.
+  if (holder->name() == ciSymbol::java_util_concurrent_atomic_AtomicIntegerFieldUpdater_Impl() ||
+      holder->name() == ciSymbol::java_util_concurrent_atomic_AtomicLongFieldUpdater_CASUpdater() ||
+      holder->name() == ciSymbol::java_util_concurrent_atomic_AtomicLongFieldUpdater_LockedUpdater() ||
+      holder->name() == ciSymbol::java_util_concurrent_atomic_AtomicReferenceFieldUpdater_Impl()) {
+    return true;
+  }
   return TrustFinalNonStaticFields;
 }
 
diff -r 3b05ef40e997 -r ddebea156752 src/share/vm/ci/ciInstanceKlass.cpp
--- a/src/share/vm/ci/ciInstanceKlass.cpp	Fri Oct 02 06:32:22 2015 +0100
+++ b/src/share/vm/ci/ciInstanceKlass.cpp	Wed Nov 18 03:43:28 2015 +0000
@@ -58,6 +58,7 @@
   _nonstatic_field_size = ik->nonstatic_field_size();
   _has_nonstatic_fields = ik->has_nonstatic_fields();
   _has_default_methods = ik->has_default_methods();
+  _is_anonymous = ik->is_anonymous();
   _nonstatic_fields = NULL; // initialized lazily by compute_nonstatic_fields:
 
   _implementor = NULL; // we will fill these lazily
@@ -100,6 +101,7 @@
   _nonstatic_field_size = -1;
   _has_nonstatic_fields = false;
   _nonstatic_fields = NULL;
+  _is_anonymous = false;
   _loader = loader;
   _protection_domain = protection_domain;
   _is_shared = false;
diff -r 3b05ef40e997 -r ddebea156752 src/share/vm/ci/ciInstanceKlass.hpp
--- a/src/share/vm/ci/ciInstanceKlass.hpp	Fri Oct 02 06:32:22 2015 +0100
+++ b/src/share/vm/ci/ciInstanceKlass.hpp	Wed Nov 18 03:43:28 2015 +0000
@@ -53,6 +53,7 @@
   bool                   _has_subklass;
   bool                   _has_nonstatic_fields;
   bool                   _has_default_methods;
+  bool                   _is_anonymous;
 
   ciFlags                _flags;
   jint                   _nonstatic_field_size;
@@ -177,6 +178,10 @@
     return _has_default_methods;
   }
 
+  bool is_anonymous() {
+    return _is_anonymous;
+  }
+
   ciInstanceKlass* get_canonical_holder(int offset);
   ciField* get_field_by_offset(int field_offset, bool is_static);
   ciField* get_field_by_name(ciSymbol* name, ciSymbol* signature, bool is_static);
diff -r 3b05ef40e997 -r ddebea156752 src/share/vm/classfile/vmSymbols.hpp
--- a/src/share/vm/classfile/vmSymbols.hpp	Fri Oct 02 06:32:22 2015 +0100
+++ b/src/share/vm/classfile/vmSymbols.hpp	Wed Nov 18 03:43:28 2015 +0000
@@ -203,7 +203,11 @@
   template(java_lang_StackTraceElement,               "java/lang/StackTraceElement")              \
                                                                                                   \
   /* Concurrency support */                                                                       \
-  template(java_util_concurrent_locks_AbstractOwnableSynchronizer,   "java/util/concurrent/locks/AbstractOwnableSynchronizer") \
+  template(java_util_concurrent_locks_AbstractOwnableSynchronizer,           "java/util/concurrent/locks/AbstractOwnableSynchronizer") \
+  template(java_util_concurrent_atomic_AtomicIntegerFieldUpdater_Impl,       "java/util/concurrent/atomic/AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl") \
+  template(java_util_concurrent_atomic_AtomicLongFieldUpdater_CASUpdater,    "java/util/concurrent/atomic/AtomicLongFieldUpdater$CASUpdater") \
+  template(java_util_concurrent_atomic_AtomicLongFieldUpdater_LockedUpdater, "java/util/concurrent/atomic/AtomicLongFieldUpdater$LockedUpdater") \
+  template(java_util_concurrent_atomic_AtomicReferenceFieldUpdater_Impl,     "java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl") \
   template(sun_misc_Contended_signature,              "Lsun/misc/Contended;")                     \
                                                                                                   \
   /* class symbols needed by intrinsics */                                                        \
diff -r 3b05ef40e997 -r ddebea156752 src/share/vm/code/relocInfo.hpp
--- a/src/share/vm/code/relocInfo.hpp	Fri Oct 02 06:32:22 2015 +0100
+++ b/src/share/vm/code/relocInfo.hpp	Wed Nov 18 03:43:28 2015 +0000
@@ -1307,10 +1307,6 @@
   //void pack_data_to -- inherited
   void unpack_data();
 
-#ifdef TARGET_ARCH_aarch64
-  void fix_relocation_after_move(const CodeBuffer* src, CodeBuffer* dest);
-#endif
-
  private:
   friend class RelocIterator;
   section_word_Relocation() { }


More information about the distro-pkg-dev mailing list