<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<br>
Hi, Can someone from the GC group review this? I added code to
reference processor to clean up backtrace marker objects (that's a
better name, isn't it?).<br>
Thanks,<br>
Coleen<br>
<div class="moz-forward-container"><br>
<br>
-------- Original Message --------
<table class="moz-email-headers-table" border="0" cellpadding="0"
cellspacing="0">
<tbody>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Subject:
</th>
<td>Re: Request for review: 7174978: NPG: Fix bactrace
builder for class redefinition</td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Date: </th>
<td>Fri, 14 Dec 2012 11:05:47 -0500</td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">From: </th>
<td>Coleen Phillimore <a class="moz-txt-link-rfc2396E" href="mailto:coleen.phillimore@oracle.com"><coleen.phillimore@oracle.com></a></td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Reply-To:
</th>
<td><a class="moz-txt-link-abbreviated" href="mailto:coleen.phillimore@oracle.com">coleen.phillimore@oracle.com</a></td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">Organization:
</th>
<td>Oracle Corporation</td>
</tr>
<tr>
<th align="RIGHT" nowrap="nowrap" valign="BASELINE">To: </th>
<td><a class="moz-txt-link-abbreviated" href="mailto:hotspot-runtime-dev@openjdk.java.net">hotspot-runtime-dev@openjdk.java.net</a></td>
</tr>
</tbody>
</table>
<br>
<br>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<div class="moz-cite-prefix"><br>
I have reworked this change to cleanup backtrace saver C heap
allocated objects (and changed the name) when weak references
are cleaned up, which doesn't have to happen at a full
collection. There is still some performance concerns because
we create these things but a better way of accounting for
Method* in the Java objects is still under design discussions.
Ideas welcome!<br>
<br>
open webrev at <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Ecoleenp/7174978_4/">http://cr.openjdk.java.net/~coleenp/7174978_4/</a><br>
bug link at <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://bugs.sun.com/view_bug.do?bug_id=7174978_4">http://bugs.sun.com/view_bug.do?bug_id=7174978_4</a><br>
<br>
One note below.<br>
<br>
On 12/12/2012 12:15 PM, Coleen Phillimore wrote:<br>
</div>
<blockquote cite="mid:50C8BBCA.3090705@oracle.com" type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<div class="moz-cite-prefix"><br>
Serguei,<br>
<br>
Thanks for reviewing this. I'm reworking it because in the
pathological case, if there are no full GC's, we wouldn't
reclaim this backtrace C heap storage.<br>
<br>
On 12/11/2012 5:31 PM, <a moz-do-not-send="true"
class="moz-txt-link-abbreviated"
href="mailto:serguei.spitsyn@oracle.com">serguei.spitsyn@oracle.com</a>
wrote:<br>
</div>
<blockquote cite="mid:50C7B437.4080409@oracle.com" type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<div class="moz-cite-prefix">Coleen,<br>
<br>
It looks good in general.<br>
Just some questions below.<br>
<br>
<br>
src/share/vm/classfile/javaClasses.cpp<br>
<br>
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
<pre><span class="new"><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><span class="new">1339 void java_lang_Throwable::mark_on_stack(oop throwable) {
. . .
</span></span><span class="new">1352 if (method == NULL) return;</span>
Would it be more safe to continue instead of return?<span class="new"><span class="new">
</span></span><span class="new"> 1352 if (method == NULL) continue;</span>
</pre>
</div>
</blockquote>
<br>
This is a short circuit that the function above this also has.
The trace_next_offset will be null in this case. If I change
it, I'd want to change them both.<br>
</blockquote>
<br>
Actually, it would have to be changed to a 'break' because we
create an objArrayOop for the method array and fill it in as the
backtrace is created. Finding a null means there are no more
methods. I prefer to leave the returns in both places. I had a
version where I wrote an iterator, which is "knows" this, but it
didn't feel like saving this many lines was worth the amount of
code the iterator took.<br>
<br>
Thanks,<br>
Coleen<br>
<br>
<blockquote cite="mid:50C8BBCA.3090705@oracle.com" type="cite">
<blockquote cite="mid:50C7B437.4080409@oracle.com" type="cite">
<div class="moz-cite-prefix"> <br>
src/share/vm/classfile/backtrace.cpp<br>
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
<pre> 63 void Backtrace::do_unloading() {
I guess, this can be called at a safepoint only.
Would it make sense to place a comment or an assert?
</pre>
</div>
</blockquote>
<br>
I added an assert because I assume this. I'm not sure if CMS gc
can unload classes without a safepoint, but this code wants to
be run at a safepoint.<br>
<br>
<blockquote cite="mid:50C7B437.4080409@oracle.com" type="cite">
<div class="moz-cite-prefix">
<pre>I see you already created a new unit test for this:
java/lang/instrument/RedefineMethodInBacktrace.sh</pre>
<br>
</div>
</blockquote>
I think StefanK was going to add this test after I checked in
this fix (or has he already added it?)<br>
<br>
thanks,<br>
Coleen<br>
<br>
<blockquote cite="mid:50C7B437.4080409@oracle.com" type="cite">
<div class="moz-cite-prefix"> Thanks,<br>
Serguei<br>
<br>
<br>
<br>
<br>
<br>
<br>
On 12/10/12 1:15 PM, Coleen Phillimore wrote:<br>
</div>
<blockquote cite="mid:50C650F0.4020405@oracle.com" type="cite">
<br>
I have updated this webrev to include cleanups suggested by
John Rose for the anonymous class fix. Please review
before I add more to this!! <br>
<br>
open webrev at <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Ecoleenp/7174978_2/">http://cr.openjdk.java.net/~coleenp/7174978_2/</a>
<br>
bug link at <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://bugs.sun.com/view_bug.do?bug_id=7174978">http://bugs.sun.com/view_bug.do?bug_id=7174978</a>
<br>
<br>
Thanks, <br>
Coleen <br>
<br>
<br>
On 12/05/2012 02:23 PM, Coleen Phillimore wrote: <br>
<blockquote type="cite">Summary: Save the set of backtraces
to use for on stack method walking for redefine classes. <br>
<br>
I also moved metadataOnStackMark class to it's own file
because it's not only used for redefine classes. Some
metadata can be individually deallocated (eg. the Method*
created in the relocator). <br>
<br>
open webrev at <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Ecoleenp/7174978/">http://cr.openjdk.java.net/~coleenp/7174978/</a>
<br>
bug link at <a moz-do-not-send="true"
class="moz-txt-link-freetext"
href="http://bugs.sun.com/view_bug.do?bug_id=7174978">http://bugs.sun.com/view_bug.do?bug_id=7174978</a>
<br>
<br>
Ran test that will be added to the jdk/tests in
java/lang/instrument/RedefineMethodInBacktrace.sh (to be
checked in separately). <br>
<br>
thanks, <br>
Coleen <br>
</blockquote>
<br>
</blockquote>
<br>
</blockquote>
<br>
</blockquote>
<br>
<br>
<br>
</div>
<br>
</body>
</html>