Assembler_x86.cpp char buffer deallocation

Vladimir Kozlov vladimir.kozlov at oracle.com
Tue Oct 9 11:30:17 PDT 2012


Vitaly Davidovich wrote:
> 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.
> 
> Speaking of which, is this technique used for non-debug code? If so, 

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.

> what happens if such code is unloaded and this string was only used by 
> that one unloaded blob? Is it somehow deallocated as well?

No deallocation in such case. It is a small memory leak when VerifyOops is 
switched on (it is off by default) in debug VM.

Vladimir

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


More information about the hotspot-compiler-dev mailing list