<p dir="ltr">Got it, thanks for taking the time to explain it.</p>
<p dir="ltr">Cheers,</p>
<p dir="ltr">Vitaly</p>
<p dir="ltr">Sent from my phone</p>
<div class="gmail_quote">On Oct 9, 2012 2:31 PM, &quot;Vladimir Kozlov&quot; &lt;<a href="mailto:vladimir.kozlov@oracle.com">vladimir.kozlov@oracle.com</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Vitaly Davidovich wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Ah that makes sense now - thanks! What tripped me up was that I indeed thought this was a runtime call, whereas I realize that this generates code that sticks around and needs to reference this string.<br>
<br>
Speaking of which, is this technique used for non-debug code? If so, <br>
</blockquote>
<br>
I think it is only the place where we do this. In other cases (for embedded constants) we use _const CodeSection which is part of compiled code and will be freed when code is deoptimized.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
what happens if such code is unloaded and this string was only used by that one unloaded blob? Is it somehow deallocated as well?<br>
</blockquote>
<br>
No deallocation in such case. It is a small memory leak when VerifyOops is switched on (it is off by default) in debug VM.<br>
<br>
Vladimir<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks<br>
<br>
Sent from my phone<br>
<br>
On Oct 9, 2012 1:58 PM, &quot;Vladimir Kozlov&quot; &lt;<a href="mailto:vladimir.kozlov@oracle.com" target="_blank">vladimir.kozlov@oracle.com</a> &lt;mailto:<a href="mailto:vladimir.kozlov@oracle.com" target="_blank">vladimir.kozlov@<u></u>oracle.com</a>&gt;&gt; wrote:<br>

<br>
    The code is correct. The allocate is normal C++ allocate which use<br>
    malloc so the buffer is in C heap.<br>
<br>
    Again, verify_oop() method is called during assembler code<br>
    generation (for example, during JIT compiled code generation). Later<br>
    when the compiled code is executed it references this message so it<br>
    can print it when oop check in the stub fails.<br>
<br>
    Think about this as equivalent to C++ code: printf(&quot;Message&quot;).<br>
    &quot;Message&quot; string is kept in .data section whole time of program<br>
    execution, it is not deallocated.<br>
<br>
    Vladimir<br>
<br>
    Vitaly Davidovich wrote:<br>
<br>
        Hi Vladimir,<br>
<br>
        Right, so I did see that this buffer&#39;s address is taken and<br>
        passed to the stub generator that creates the verify_oop code.<br>
         What I couldn&#39;t find was where this buffer was deallocated<br>
        after the verify_oop procedure was finished.  Since this is<br>
        allocated via new(), how would you deallocate it from generated<br>
        code since presumably new() can be using a custom allocator<br>
        underneath? I realize this is debug code so probably doesn&#39;t<br>
        matter in practical terms.<br>
<br>
        I&#39;m a bit unclear on whether you&#39;re saying this code is correct<br>
        or not. :)<br>
<br>
        Thanks<br>
<br>
        Sent from my phone<br>
<br>
        On Oct 9, 2012 1:09 PM, &quot;Vladimir Kozlov&quot;<br>
        &lt;<a href="mailto:vladimir.kozlov@oracle.com" target="_blank">vladimir.kozlov@oracle.com</a> &lt;mailto:<a href="mailto:vladimir.kozlov@oracle.com" target="_blank">vladimir.kozlov@<u></u>oracle.com</a>&gt;<br>
        &lt;mailto:<a href="mailto:vladimir.kozlov@" target="_blank">vladimir.kozlov@</a>__<a href="http://oracle.com" target="_blank">orac<u></u>le.com</a><br>
        &lt;mailto:<a href="mailto:vladimir.kozlov@oracle.com" target="_blank">vladimir.kozlov@<u></u>oracle.com</a>&gt;&gt;&gt; wrote:<br>
<br>
            Vitaly,<br>
<br>
            It is common mistake to mix code generation time and runtime<br>
            execution of the generated code. We need this buffer with a<br>
        message<br>
            during runtime execution so we can deallocate it during code<br>
        generation.<br>
<br>
            Regards,<br>
            Vladimir<br>
<br>
            Vitaly Davidovich wrote:<br>
<br>
                Hi Volker,<br>
<br>
                Yes sorry, I should&#39;ve stated that I did see that it was<br>
        guarded<br>
                by VerifyOops and I was just browsing the code - this is<br>
        by no<br>
                means some production issue that I have.  Was just<br>
        curious if I<br>
                missed something.<br>
<br>
                Thanks<br>
<br>
                Sent from my phone<br>
<br>
                On Oct 9, 2012 9:47 AM, &quot;Volker Simonis&quot;<br>
                &lt;<a href="mailto:volker.simonis@gmail.com" target="_blank">volker.simonis@gmail.com</a><br>
        &lt;mailto:<a href="mailto:volker.simonis@gmail.com" target="_blank">volker.simonis@gmail.<u></u>com</a>&gt;<br>
        &lt;mailto:<a href="mailto:volker.simonis@gmail." target="_blank">volker.simonis@gmail.</a>_<u></u>_com<br>
        &lt;mailto:<a href="mailto:volker.simonis@gmail.com" target="_blank">volker.simonis@gmail.<u></u>com</a>&gt;&gt;<br>
                &lt;mailto:<a href="mailto:volker.simonis@gmail" target="_blank">volker.simonis@gmail</a>.<br>
        &lt;mailto:<a href="mailto:volker.simonis@gmail" target="_blank">volker.simonis@gmail</a>.&gt;<u></u>____com<br>
                &lt;mailto:<a href="mailto:volker.simonis@gmail." target="_blank">volker.simonis@gmail.</a>_<u></u>_com<br>
        &lt;mailto:<a href="mailto:volker.simonis@gmail.com" target="_blank">volker.simonis@gmail.<u></u>com</a>&gt;&gt;&gt;&gt; wrote:<br>
<br>
                    Hi Vitaly,<br>
<br>
                    it looks not very professional indeed, however it is<br>
        only in<br>
                debug<br>
                    code or in code protected by development parameters<br>
                (-XX:+VerifyOops)<br>
                    so it will not cause any trouble in the production VM.<br>
                Nevertheless it<br>
                    should be cleaned up when somebody touches that file.<br>
<br>
                    Regards,<br>
                    Volker<br>
<br>
                    On Tue, Oct 9, 2012 at 3:10 PM, Vitaly Davidovich<br>
                &lt;<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a> &lt;mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a>&gt;<br>
        &lt;mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a> &lt;mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a>&gt;&gt;<br>
                    &lt;mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a> &lt;mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a>&gt;<br>
        &lt;mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a> &lt;mailto:<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a>&gt;&gt;&gt;&gt; wrote:<br>
                     &gt; Hi guys,<br>
                     &gt;<br>
                     &gt; I noticed that assembler_x86.cpp has a few places<br>
        where a<br>
                char[]<br>
                    is new()&#39;d<br>
                     &gt; up to hold an error message when verifying an<br>
        oop.  This<br>
                buffer<br>
                    is passed to<br>
                     &gt; the stub routine, but I can&#39;t find where this<br>
        buffer is then<br>
                     &gt; deleted/deallocated.  Am I missing something?<br>
        Apologies<br>
                of this<br>
                    is a silly<br>
                     &gt; question. :)<br>
                     &gt;<br>
                     &gt; Thanks<br>
                     &gt;<br>
                     &gt; Sent from my phone<br>
<br>
</blockquote>
</blockquote></div>