Issue Type: Bug Bug
Assignee: Jesse Glick
Components: core
Created: 24/Oct/12 10:17 PM
Description:

Jelly page loads are very slow due to:

java.lang.Thread.State: RUNNABLE
	at java.lang.Throwable.getStackTraceElement(Native Method)
	at java.lang.Throwable.getOurStackTrace(Throwable.java:826)
	- locked <0x9fe56598> (a java.lang.Exception)
	at java.lang.Throwable.getStackTrace(Throwable.java:815)
	at org.codehaus.plexus.classworlds.realm.ClassRealm.findResource(ClassRealm.java:264)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1138)
	at org.codehaus.plexus.classworlds.realm.ClassRealm.loadResourceFromImport(ClassRealm.java:426)
	at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.getResource(SelfFirstStrategy.java:60)
	at org.codehaus.plexus.classworlds.realm.ClassRealm.findResource(ClassRealm.java:268)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1138)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1133)
	at org.jenkinsci.maven.plugins.hpi.MaskingClassLoader.getResource(MaskingClassLoader.java:37)
	at org.mortbay.jetty.webapp.WebAppClassLoader.getResource(WebAppClassLoader.java:246)
	- locked <0x74c0fe48> (a org.jenkinsci.maven.plugins.hpi.RunMojo$2)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1133)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1133)
	at hudson.ClassicPluginStrategy$DependencyClassLoader.findResource(ClassicPluginStrategy.java:453)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1138)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1133)
	at org.kohsuke.stapler.AbstractTearOff.getResource(AbstractTearOff.java:102)
…

See:

public URL findResource( String name )
    {
        /*
         * NOTE: If this gets called from ClassLoader.getResource(String), delegate to the strategy. If this got called
         * directly by other code, only scan our class path as usual for an URLClassLoader.
         */
        StackTraceElement caller = new Exception().getStackTrace()[1];

        if ( "java.lang.ClassLoader".equals( caller.getClassName() ) )
        {
            return strategy.getResource( name );
        }
        else
        {
            return super.findResource( name );
        }
    }

This is a very inefficient code path for such a common operation; filling in the stack trace for a Throwable is expensive.

Environment: 1.424
Project: Jenkins
Labels: performance
Priority: Major Major
Reporter: Jesse Glick
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to