The class cache

Hannes Wallnoefer hannes.wallnoefer at oracle.com
Wed Mar 12 13:53:44 UTC 2014


That's great to hear, Tal.

The gates for JDK8 are definitely closed, but u20 is scheduled for q3 
2014, so you won't have to wait too long. I also think there will be 
preview releases available on jdk8.java.net for quite some time before 
release.

Thanks for testing and feedback!

Hannes

Am 2014-03-12 13:41, schrieb Tal Liron:
> Great work, Hannes!
>
> With the jdk9 version, it seems caching improves performance by two 
> orders of magnitude. :) And a simple benchmark shows the same code 
> working twice as fast in Nashorn as compared to Rhino.
>
> This leaves me in a strange position in terms of what to tell my 
> users. Should I recommend waiting until 8u20 is out? (And when is that 
> going to be?) Or would it make sense for me to provide my own 
> custom-built nashorn.jar?
>
> I'm worried, of course, about a custom-built jar, because it would be 
> a snapshot of a development version.
>
> I really, really wish this feature could make it to the official 
> OpenJDK 8 release. Any strings you guys can pull to make it happen?
>
> On 03/12/2014 08:06 PM, Hannes Wallnoefer wrote:
>> Am 2014-03-12 12:44, schrieb Tal Liron:
>>> Hannes, I would like to test this.
>>>
>>> It doesn't seem to be on the main Nashorn repository: 
>>> http://hg.openjdk.java.net/nashorn/jdk8/nashorn
>>>
>>> Is there a separate repository I should be using?
>>
>> You can get it here:
>>
>> http://hg.openjdk.java.net/jdk9/dev/nashorn
>>
>> In case you have problems with building I can send you a nashorn.jar 
>> via private mail. Just let me know.
>>
>> Hannes
>>
>>> On 03/12/2014 05:50 PM, Hannes Wallnoefer wrote:
>>>> Hi Tal,
>>>>
>>>> I'm right now pushing a change for JDK-8021350 that allows sharing 
>>>> script classes between global scopes. Currently, script classes are 
>>>> bound to the global object in various ways, so the change is not 
>>>> trivial, and it's not possible to share compiled scripts between 
>>>> global scopes with the nashorn.jar in current JDK8 builds. The 
>>>> script sharing feature is planned for the 8u20 release.
>>>>
>>>> The class sharing will be per script engine, meaning that if you 
>>>> use multiple scopes with one script engine classes will be reused, 
>>>> when you use multiple script engines scripts will be recompiled for 
>>>> each engine.
>>>>
>>>> I'd be interested to know whether this would work for you. If you'd 
>>>> like to test the class sharing feature I can help you getting started.
>>>>
>>>> Hannes
>>>>
>>>> Am 2014-03-12 10:27, schrieb Tal Liron:
>>>>> In Nashorn, the ClassCache is set per Global instance.
>>>>>
>>>>> This is fine if your application has only one global instance. 
>>>>> However, my application design involves creating many Global 
>>>>> instances. (Actually, I create and destroy them on the fly per 
>>>>> user request in an HTTP server scenario.) The problem is that all 
>>>>> code has to constantly be recompiled, and the cache is essentially 
>>>>> never used. Since recompilation is so very expensive in Nashorn, 
>>>>> this results in awful performance.
>>>>>
>>>>> How can I implement a shared ClassCache? I can't extend and modify 
>>>>> Global behavior, because it's a final class.
>>>>>
>>>>> I've tried to cache ScriptFunction instances myself, but I get 
>>>>> exceptions when I try to run them with a different Global instance 
>>>>> than the one that created them.
>>>>
>>>
>>
>



More information about the nashorn-dev mailing list