RFR: 8061244 Use of stack-less ClassNotFoundException thrown from (URL)ClassLoader.findClass()
Mandy Chung
mandy.chung at oracle.com
Wed Oct 22 22:42:22 UTC 2014
Hi Peter,
On 10/21/2014 3:37 AM, Peter Levart wrote:
> http://cr.openjdk.java.net/~plevart/jdk9-dev/ClassLoader.CNFE/webrev.03/
I skimmed through this webrev. I would suggest to hold off this patch
and there are various ideas of the optimization for class loading
performance with modules.
Throwing CNFE attributes to one part of the class loading cost that
hasn't proven to be significant in real-world applications. Recently I
have instrumented the class loading code to add more fine-grained
performance counters to determine the overhead of CNFE with and without
stacktrace and again the applications I used to measure shows the CNFE
stack trace isn't the focus. A class lookup cost would depend on the
class loader hierarchy, the search path of each class loader and what
classes are being looked up from a class loader. The cost of looking up
a class local in the class loader's search path involves the parent
delegation lookup time + CNFE + findClass (lookup class in its local
search path). In a typical real-world application, the parent
delegation lookup time would be much significant than CNFE. CNFE is
thrown by loadClass for class lookup that is one typical suspect for
class loading performance issue. On the other hand, resource lookup
actually has the parent delegation performance cost in which CNFE is not
involved.
With modules, this would give the opportunity to consider skipping
parent delegation, direct class lookup when the class is known to be
local. That'd avoid CNFE creation completely.
Talking about exceptions and fillInStackTrace, it's known to be
significant cost. It'd be interesting to have the VM flag that can
measure the time it spends in filling in the backtrace of each exception
type (and perhaps the mean and max stack depth) that will give a better
idea of the performance distribution. In addition, doPrivileged wraps
checked exception with PrivilegedActionException that essentially has
the same stack trace and it doubles the cost even in the absence of
security manager. I have exchanged some mail with the security team to
see if this is a low-hanging fruit to improve the performance.
Mandy
More information about the core-libs-dev
mailing list