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


Reply via email to