RFR [8016838] java/lang/instrument/RedefineBigClass.sh needs modification

Daniel D. Daugherty daniel.daugherty at oracle.com
Thu Jul 4 17:45:41 UTC 2013


On 7/4/13 11:19 AM, Ivan Gerasimov wrote:
> Daniel, thank you for review!
>
> Here's the updated with all all your suggestions adopted.
> http://cr.openjdk.java.net/~igerasim/8016838/1/webrev/

Looks good.


>
> I haven't yet considered applying the approach to RetransformBigClass.
> Do you want me to include this into this same change set or should I 
> make it separately?

I would include it in the same changeset.

Dan


>
> Sincerely yours,
> Ivan
>
>
> On 04.07.2013 19:34, Daniel D. Daugherty wrote:
>> On 7/3/13 11:12 AM, Ivan Gerasimov wrote:
>>> Hello everybody!
>>>
>>> We have a request to improve jtreg test.
>>> The test had been written to verify fix for memory leak during class 
>>> redefinition.
>>> The problem is that it always is reported as PASSED even in the 
>>> presence of the leak.
>>>
>>> The proposed change is platform specific.
>>> It allows memory leak detection only on Linux.
>>> This is because the memory leak was in native code, so there's no 
>>> easy way to detect it from within Java code.
>>>
>>> Here's the webrev for JDK8 repository:
>>> http://cr.openjdk.java.net/~igerasim/8016838/0/webrev/
>>
>> Very nicely done! The logic in RedefineBigClass.sh only catches a
>> leak big enough to cause an Exception to be thrown.
>>
>> When I originally wrote this test and its companion:
>>
>>     test/java/lang/instrument/RetransformBigClass*
>>
>> I could not come up with a platform independent way to put a small
>> upper limit on memory growth. It never dawned on me that putting in
>> something on one platform (Linux) was better than nothing.
>>
>> Are you planning to add this same logic to RetransformBigClass*?
>>
>>
>>
>> test/java/lang/instrument/RedefineBigClass.sh
>>     No comments.
>>
>> test/java/lang/instrument/RedefineBigClassApp.java
>>     line 48: final long MEM_LEAK_THRESHOLD = 32 * 1024; // 32Mb
>>         Would be better at the top of RedefineBigClassApp rather than
>>         "buried" down here.
>>
>>     line 51: Long.valueOf(vmMemDelta)
>>         There are several places where a long is passed to 
>> Long.valueOf().
>>         Is there some reason you're not passing them directly to 
>> println()?
>>
>>     line 54: } else {
>>         The "else" is redundant due to the "System.exit(1)" call 
>> above it.
>>         You can drop the "else {" and "}" and shift that last 
>> println() to
>>         the left.
>>
>>     line 71: return Long.parseLong(line.split(" ")[22]) / 1024;
>>         How about at least a comment referring to the Linux proc(5)
>>         man page... and the fact that the 23rd field is:
>>
>>             vsize %lu   Virtual memory size in bytes.
>>
>> Again, very nicely done!
>>
>> Dan
>>
>>
>>>
>>> The surprising thing is that modified test detected the leak with 
>>> the latest JDK8!
>>> Latest 6 and 7 are fine, so it might be regression in JDK8.
>>>
>>> I've filled a bug http://bugs.sun.com/view_bug.do?bug_id=8019845 
>>> "Memory leak during class redefenition" (not yet available.)
>>>
>>> Sincerely yours,
>>> Ivan Gerasimov
>>>
>>>
>>>
>>
>>
>>
>




More information about the core-libs-dev mailing list