You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Jochen Kemnade (JIRA)" <ji...@apache.org> on 2017/03/30 06:11:41 UTC

[jira] [Commented] (TAP5-2546) Parallel class loading

    [ https://issues.apache.org/jira/browse/TAP5-2546?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15948475#comment-15948475 ] 

Jochen Kemnade commented on TAP5-2546:
--------------------------------------

The fix should work, but I wonder why the methods are synchronized at all. It was done for TAP5-1650, I'm trying to find out what the actual issue was.

> Parallel class loading
> ----------------------
>
>                 Key: TAP5-2546
>                 URL: https://issues.apache.org/jira/browse/TAP5-2546
>             Project: Tapestry 5
>          Issue Type: Sub-task
>          Components: plastic
>            Reporter: Michael Mikhulya
>
> I would like to improve page loading time by improving its concurrent execution.
> Here is a first patch related to it: TAP5-2545
> Now the worst place from lock contention point of view is synchronization on {{PlasticClassLoader}}. Actually there are two kind of synchronization: {{synchronized}} methods in {{PlasticClassLoader}} and {{synchronized (loader)}} sections in {{PlasticClassPool}}.
> Recently most class loaders added support for parallel class loading:
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=464442
> https://bz.apache.org/bugzilla/show_bug.cgi?id=57681
> If we would like to split global lock, then we can use following trick for it.
> We can substitute code like this:
> {code:title=PlasticClassLoader.java}
>     public synchronized Class<?> defineClassWithBytecode(String className, byte[] bytecode)
>     {
>         return defineClass(className, bytecode, 0, bytecode.length);
>     }
> {code}
> with following one:
> {code:java}
>     public Class<?> defineClassWithBytecode(String className, byte[] bytecode)
>     {
>         synchronized (className.intern())
>         {
>             return defineClass(className, bytecode, 0, bytecode.length);
>         }
>     }
> {code}
> It is just an idea to quickly check solution.
> Can anybody check and discuss idea? Or even better to fix issue. :-)
> I'm not an expert in concurrency and afraid making changes in such a critical place at least before somebody reviewed my idea. So any feedback would be appreciated. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)