Review Request: 8238358: Implementation of JEP 371: Hidden Classes

Mandy Chung mandy.chung at oracle.com
Thu Apr 2 05:17:09 UTC 2020


Hi David,

Thanks for the edits to the comments.   "weak hidden" were missed to be 
changed to "non-strong hidden".  Here is the patch fixing the comments.

diff --git a/src/hotspot/share/ci/ciField.cpp 
b/src/hotspot/share/ci/ciField.cpp
--- a/src/hotspot/share/ci/ciField.cpp
+++ b/src/hotspot/share/ci/ciField.cpp
@@ -223,8 +223,8 @@
        holder->is_in_package("jdk/internal/foreign") || 
holder->is_in_package("jdk/incubator/foreign") ||
        holder->is_in_package("java/lang"))
      return true;
-  // Trust VM hidden and unsafe anonymous classes. They are created via 
Lookup.defineClass or
-  // the private API (jdk.internal.misc.Unsafe) and can't be 
serialized, so there is no hacking
+  // Trust hidden and VM unsafe anonymous classes. They are created via 
Lookup.defineClass or
+  // the private jdk.internal.misc.Unsafe API and can't be serialized, 
so there is no hacking
    // of finals going on with them.
    if (holder->is_hidden() || holder->is_unsafe_anonymous())
      return true;
diff --git a/src/hotspot/share/ci/ciInstanceKlass.cpp 
b/src/hotspot/share/ci/ciInstanceKlass.cpp
--- a/src/hotspot/share/ci/ciInstanceKlass.cpp
+++ b/src/hotspot/share/ci/ciInstanceKlass.cpp
@@ -76,7 +76,7 @@
    oop holder = ik->klass_holder();
    if (ik->class_loader_data()->has_class_mirror_holder()) {
      // Though ciInstanceKlass records class loader oop, it's not 
enough to keep
-    // VM weak hidden and unsafe anonymous classes alive (loader == 
NULL). Klass holder should
+    // non-strong hidden class and VM unsafe anonymous classes alive 
(loader == NULL). Klass holder should
      // be used instead. It is enough to record a ciObject, since 
cached elements are never removed
      // during ciObjectFactory lifetime. ciObjectFactory itself is 
created for
      // every compilation and lives for the whole duration of the 
compilation.
diff --git a/src/hotspot/share/classfile/classLoaderData.hpp 
b/src/hotspot/share/classfile/classLoaderData.hpp
--- a/src/hotspot/share/classfile/classLoaderData.hpp
+++ b/src/hotspot/share/classfile/classLoaderData.hpp
@@ -127,9 +127,10 @@
    bool _accumulated_modified_oops; // Mod Union Equivalent (CMS support)

    int _keep_alive;         // if this CLD is kept alive.
-                           // Used for weak hidden classes, unsafe 
anonymous classes and the
+                           // Used for non-strong hidden classes, 
unsafe anonymous classes and the
                             // boot class loader. _keep_alive does not 
need to be volatile or
-                           // atomic since there is one unique CLD per 
weak hidden or unsafe anonymous class.
+                           // atomic since there is one unique CLD per 
non-strong hidden class
+                           // or unsafe anonymous class.

    volatile int _claim; // non-zero if claimed, for example during GC 
traces.
                         // To avoid applying oop closure more than once.
@@ -242,15 +243,15 @@
    }

    // Returns true if this class loader data is for the system class 
loader.
-  // (Note that the class loader data may be for an weak hidden or 
unsafe anonymous class)
+  // (Note that the class loader data may be for a non-strong hidden 
class or unsafe anonymous class)
    bool is_system_class_loader_data() const;

    // Returns true if this class loader data is for the platform class 
loader.
-  // (Note that the class loader data may be for an weak hidden or 
unsafe anonymous class)
+  // (Note that the class loader data may be for a non-strong hidden 
class or unsafe anonymous class)
    bool is_platform_class_loader_data() const;

    // Returns true if this class loader data is for the boot class loader.
-  // (Note that the class loader data may be for an weak hidden unsafe 
anonymous class)
+  // (Note that the class loader data may be for a non-strong hidden 
class or unsafe anonymous class)
    inline bool is_boot_class_loader_data() const;

    bool is_builtin_class_loader_data() const;
@@ -271,7 +272,7 @@
      return _unloading;
    }

-  // Used to refcount an weak hidden or unsafe anonymous class's CLD in 
order to
+  // Used to refcount a non-strong hidden class's or unsafe anonymous 
class's CLD in order to
    // indicate their aliveness.
    void inc_keep_alive();
    void dec_keep_alive();

diff --git a/src/hotspot/share/interpreter/linkResolver.cpp 
b/src/hotspot/share/interpreter/linkResolver.cpp
--- a/src/hotspot/share/interpreter/linkResolver.cpp
+++ b/src/hotspot/share/interpreter/linkResolver.cpp
@@ -611,7 +611,7 @@
               (same_module) ? "" : sel_klass->class_in_module_of_loader()
               );

-    // For private access check if there was a problem with nest host
+    // For private access see if there was a problem with nest host
      // resolution, and if so report that as part of the message.
      if (sel_method->is_private()) {
        print_nest_host_error_on(&ss, ref_klass, sel_klass, THREAD);
@@ -951,7 +951,7 @@
               (same_module) ? "" : "; ",
               (same_module) ? "" : sel_klass->class_in_module_of_loader()
               );
-    // For private access check if there was a problem with nest host
+    // For private access see if there was a problem with nest host
      // resolution, and if so report that as part of the message.
      if (fd.is_private()) {
        print_nest_host_error_on(&ss, ref_klass, sel_klass, THREAD);

Mandy

On 4/1/20 9:52 PM, David Holmes wrote:
> Hi Mandy,
>
> On 1/04/2020 1:01 pm, Mandy Chung wrote:
>> Thanks to the review feedbacks.
>>
>> Updated webrev:
>> http://cr.openjdk.java.net/~mchung/valhalla/webrevs/hidden-classes/webrev.04/ 
>>
>
> I've had a good look through all the hotspot related changes. All 
> looks good.
>
> A few minor comments:
>
> src/hotspot/share/ci/ciField.cpp
>
>    // Trust VM hidden and unsafe anonymous classes.
>
> should say
>
>    // Trust hidden and VM unsafe anonymous classes.
>
>
>   // the private API (jdk.internal.misc.Unsafe)
>
> s/the/a/  or else change the () to commas or perhaps even better:
>
>   // the private jdk.internal.misc.Unsafe API,
>
> ---
>
> src/hotspot/share/ci/ciInstanceKlass.cpp
>
>   // VM weak hidden and unsafe anonymous classes
>
> should say
>
>   // weak hidden and VM unsafe anonymous classes
>
> ---
>
> src/hotspot/share/classfile/classLoaderData.hpp
>
> !  // the CLDs lifecycle.  For example, a non-strong hidden class or an
> ...
> !  // Used for weak hidden classes, unsafe anonymous classes and the
>
> There is an inconsistency in terminology, so far most code comments 
> refer to "weak hidden" but now you are using "non-strong hidden".
>
> ! for an weak hidden
>
> s/an/a/   multiple locations
>
> ---
>
> src/hotspot/share/interpreter/linkResolver.cpp
>
> Can you fix one of my comments please (in two places) :)
>
> +     // For private access check if there was a problem with nest host
>
> would read better as:
>
> +     // For private access see if there was a problem with nest host
>
> ---
>
> Thanks,
> David
>



More information about the valhalla-dev mailing list