Details

    • Sub-task
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 5.5.0
    • plastic
    • None

    Description

      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:

      PlasticClassLoader.java
          public synchronized Class<?> defineClassWithBytecode(String className, byte[] bytecode)
          {
              return defineClass(className, bytecode, 0, bytecode.length);
          }
      

      with following one:

          public Class<?> defineClassWithBytecode(String className, byte[] bytecode)
          {
              synchronized (className.intern())
              {
                  return defineClass(className, bytecode, 0, bytecode.length);
              }
          }
      

      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.

      Attachments

        Issue Links

          Activity

            People

              jkemnade Jochen Kemnade
              mihasik Michael Mikhulya
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: