problems with sun.reflect.Reflection.getCallerClass(int)

Mandy Chung mandy.chung at oracle.com
Thu Jul 11 08:42:56 UTC 2013


Hi Jochen,

On 7/11/2013 4:21 PM, Jochen Theodorou wrote:
> Hi all,
>
> I started a thread about this already on the mlvm list, but since I 
> get no responses there I am going to ask here as well. Plus I have an 
> actual problem with openjdk 7u25 related to this it seems.
>
> First the u25 problem. According to 
> https://jira.codehaus.org/browse/GROOVY-6246 openjdk 1.7.0_25 freezes 
> with 100% CPU load in this code: 
> https://github.com/groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/reflection/ReflectionUtils.java#L105
>
> This is surely not the nicest piece of code and all that, but that is 
> not the point. The point is that this worked in openjdk 1.7.0_9 and 
> does not in openjdk 1.7.0_25. Where it does work is in the oracle jdk 
> 1.7.0_25. Btw: it is too bad there are no .tar.gz packages of the 
> openjdk builds available. Assuming the diagnosis is right, this should 
> help pinpointing the problem. Has there been any changes already to 
> that method?
>

There is a regression in 7u25 that is fixed in 7u40:
    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8016814

The workaround is to call it with depth+1 when running in 7u25.  I will 
reply the second part next (currently OOTO).

Mandy

> Of course Reflection.getCallerClass(int) is a bigger problem for us. 
> It was announced, that in u40 of jdk 1.7.0 this method will be no 
> longer operational, unless you use a jvm switch. This is quite 
> troublesome for us, but at least there is some way. In jdk 1.8 this 
> method is supposed to disappear without replacement. There seems then 
> to be the getCallerClass() method, which ignores frames from 
> reflection (I strongly hope for you guys that lambda and indy are 
> included here), but this will not rescue us at all. We have almost 
> always a frame of our own appearing in a "first call" in Groovy. And 
> there is no way to avoid that (not even in indy). That means for us, 
> that any functionality depending on this cannot be called from a 
> Groovy program anymore. We already replace 
> RessourceBundle.getBundle(String) to let it discover the right loader. 
> But after the change this will not help. Transporting the not always 
> available caller class from the callsite into the method is for 
> current versions of Groovy (and all versions of Groovy are influenced 
> here)
>
> We are currently investigating if we can find a workaround for @Grab 
> (http://groovy.codehaus.org/Grape) in some cases. There won't be one 
> for all cases of course.
>
> What I would like to hear is a statement if this is taken as serious 
> or if it will be ignored. From the mlvm list I have so far the 
> impression, that it will be ignored.
>
>
> bye Jochen
>




More information about the core-libs-dev mailing list