You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Michael Mikhulya (JIRA)" <ji...@apache.org> on 2016/05/14 07:11:12 UTC

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

Michael Mikhulya created TAP5-2546:
--------------------------------------

             Summary: Parallel class loading
                 Key: TAP5-2546
                 URL: https://issues.apache.org/jira/browse/TAP5-2546
             Project: Tapestry 5
          Issue Type: Improvement
          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.4#6332)