RFR 8005056: NPG: Crash after redefining java.lang.Object
Coleen Phillimore
coleen.phillimore at oracle.com
Mon May 13 09:01:41 PDT 2013
Thank you Dan for the as usual thorough review.
On 5/10/2013 12:49 PM, Daniel D. Daugherty wrote:
> > open webrev at http://cr.openjdk.java.net/~coleenp/8005056/
>
> Thumbs up. Minor nits/questions below.
>
> Very nicely done. Adding a test to retransform java.lang.Object
> will do a nice job of detecting potential breakages in this area.
>
Yes, there was an older bug for redefine java/lang/Object in the system
but I don't think it's the same.
>
> src/share/vm/classfile/dictionary.cpp
> No comments.
>
> src/share/vm/classfile/dictionary.hpp
> No comments.
>
> src/share/vm/classfile/systemDictionary.cpp
> No comments.
>
> src/share/vm/classfile/systemDictionary.hpp
> No comments.
>
> src/share/vm/oops/klass.hpp
> No comments.
>
> src/share/vm/prims/jvmtiRedefineClasses.cpp
> line 3547: // print error if old methods are found.
> We fail a guarantee here also so this is more than "print error".
>
I reworded: // print and fail guarantee if old methods are found.
I would have capitalized Print but the other comments in this function
didn't start with capital letters.
> line 3551 } else {
fixed.
> Indent is off by one space (not your change, but...)
>
> src/share/vm/prims/jvmtiRedefineClasses.hpp
> No comments.
>
> test/testlibrary/ClassFileInstaller.java
> line 43: String pathName = arg.replace('.', '/').concat(".class");
> line 48: if (pathName.contains("/")) {
> Should these be System.getProperty("path.separator")? Or maybe
> this is something already queried and cached in this testing
> harness?
>
I think this path refers to the Java path not the OS path name.
Christian, can you confirm?
> test/runtime/RedefineObject/Agent.java
> line 56: for (int i = 0; i< 1000 ; i++) {
> Space before '<'.
>
fixed.
> test/runtime/RedefineObject/MANIFEST.MF
> No comments (agree with Christian that this can be deleted)
>
fixed.
> test/runtime/RedefineObject/Test.java
> No comments (agree with Christian that this should be renamed).
>
renamed to TestRedefineObject.java and added @bug and the comments that
Christian requested.
thanks!
Coleen
> Dan
>
>
>
> On 5/9/13 8:22 AM, Coleen Phillimore wrote:
>>
>> Dan,
>>
>> Thank you for adding serviceability. I'll provide more detail on the
>> change if needed. Here's some additional detail.
>>
>> What I did was added a closure to pass to
>> ClassLoaderDataGraph::classes_do() function. This function walks all
>> the loaded classes, which includes the array classes. The
>> SystemDicitonary walk only walks loaded InstanceKlasses. The array
>> classes created are linked from the InstanceKlass in _array_klasses
>> and the code used to walk them separately. The code for switching
>> to the new methods from the old methods didn't change very much.
>>
>> The reason we have to change the vtables in array classes is because
>> array classes are inherited from java/lang/Object class and have this
>> vtable. We had missed the ones for arrays of basic types created in
>> universe. The old code never fixed these entries but it didn't crash
>> because the methodOops were followed with the basic type array
>> classes in their vtable so wouldn't go away. With permgen removal, we
>> explicitly delete unreferenced Method objects so these ones have to
>> be replaced. And it's more correct because you don't want to call
>> the old Method.
>>
>> Coleen
>>
>> On 05/09/2013 09:55 AM, Daniel D. Daugherty wrote:
>>> Adding Serviceability to this review thread since this concerns
>>> JVM/TI RedefineClasses().
>>>
>>> Coleen, this will take a bit of time to review.
>>>
>>> Dan
>>>
>>>
>>> On 5/8/13 8:51 PM, Coleen Phillimore wrote:
>>>> Summary: Need to walk array class vtables replacing old methods too
>>>> if j.l.o is redefined
>>>>
>>>> Array methods aren't in the SystemDictionary and the code that was
>>>> there didn't walk the basic type array classes defined in
>>>> universe. It also walked the same classes more than once. Use the
>>>> ClassLoaderDataGraph class walking instead.
>>>>
>>>> open webrev at http://cr.openjdk.java.net/~coleenp/8005056/
>>>> bug link at http://bugs.sun.com/view_bug.do?bug_id=8005056
>>>>
>>>> Tested with all redefine classes tests, jdk java/lang/instrument
>>>> tests, hotspot jtreg tests.
>>>>
>>>> Thanks,
>>>> Coleen
>>>>
>>>
>>
>
More information about the hotspot-runtime-dev
mailing list