Nest host validation vs NestHost attribute performed by Lookup::defineHiddenClass

Mandy Chung mandy.chung at oracle.com
Tue Oct 1 23:07:08 UTC 2019



On 10/1/19 3:24 PM, David Holmes wrote:
> Hi Peter,
>
> On 2/10/2019 7:55 am, Peter Levart wrote:
>> On 10/1/19 8:04 PM, Mandy Chung wrote:
>>>
>>>
>>> On 10/1/19 3:11 AM, Peter Levart wrote:
>>>> Imagine a situation where a hidden class HC1 is defined in it's own 
>>>> nest. Then this HC1 is used as a LC in a Lookup to define another 
>>>> hidden class HC2 to be part of this nest (HC1, HC2). What should 
>>>> HC2.getNestHost() return? If it returns HC1, then HC2 is 
>>>> effectively preventing HC1 to be unloaded.
>>>>
>>>
>>> There is no restriction what a hidden class can call, for example, 
>>> using lambda or method reference, which may call a framework library 
>>> to generate HC2.  HC1 and HC2 should be unloaded when both classes 
>>> become unreachable.   Do I miss the issue you tried to point out?
>>
>> I was trying to point out that a hidden class added to a nest that 
>> has a hidden nest host class will retain the nest host class (in 
>> order to be able to return it from getNestHost() method). Which may 
>> not be desirable.
>
> I see this as no different to any other case where a strong reference 
> is kept to something that is only weakly referenced elsewhere. The 
> "weak" aspect only relates to the relationship between the defining 
> classloader and the class, it doesn't imply that every use of the 
> class must itself be weak.
>

Right.

If a weak class HC1 is being strongly reachable by another class HC2, 
the drawback is that it keeps HC1's lifetime longer until HC2 is 
unreachable.

Mandy


More information about the valhalla-dev mailing list