[jboss-dev-forums] [Design the new POJO MicroContainer] - VFS Performance
adrian@jboss.org
do-not-reply at jboss.com
Thu Jul 24 06:14:43 EDT 2008
Besides the AOP usage, the other major thing I'm seeing
using hprof for sampling is the VFS usage by the classloader.
I'll show some typical stacktraces:
Not much we can do about the biggest one,
since this is the JDK parsing the bytecode.
The only way to reduce this, is the reduce the number of classes loaded.
| java.lang.ClassLoader.defineClass1(ClassLoader.java:Unknown line)
| java.lang.ClassLoader.defineClass(ClassLoader.java:620)
| org.jboss.classloader.spi.base.BaseClassLoader.access$200(BaseClassLoader.java:62)
| org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:504)
| org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:464)
| java.security.AccessController.doPrivileged(AccessController.java:Unknown line)
| org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:462)
| org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:439)
| org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:134)
| org.jboss.classloader.spi.filter.FilteredDelegateLoader.loadClass(FilteredDelegateLoader.java:131)
|
Reading byte code from zip files
| java.util.zip.Inflater.inflateBytes(Inflater.java:Unknown line)
| java.util.zip.Inflater.inflate(Inflater.java:215)
| java.util.zip.InflaterInputStream.read(InflaterInputStream.java:128)
| java.io.FilterInputStream.read(FilterInputStream.java:90)
| org.jboss.virtual.plugins.context.zip.ZipEntryInputStream.read(ZipEntryInputStream.java:112)
| org.jboss.classloader.plugins.ClassLoaderUtils.loadByteCode(ClassLoaderUtils.java:150)
| org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:475)
| org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:464)
| java.security.AccessController.doPrivileged(AccessController.java:Unknown line)
| org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:462)
|
This looks inefficient, it is listing a parent directory when we do getChild
| java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:Unknown line)
| java.io.File.canRead(File.java:660)
| org.jboss.virtual.plugins.context.file.FileHandler.getChildren(FileHandler.java:161)
| org.jboss.virtual.plugins.context.file.FileSystemContext.createVirtualFileHandler(FileSystemContext.java:337)
| org.jboss.virtual.plugins.context.file.FileSystemContext.createVirtualFileHandler(FileSystemContext.java:256)
| org.jboss.virtual.plugins.context.file.FileHandler.createChildHandler(FileHandler.java:224)
| org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.structuredFindChild(AbstractVirtualFileHandler.java:509)
| org.jboss.virtual.plugins.context.file.FileHandler.getChild(FileHandler.java:233)
| org.jboss.virtual.VirtualFile.getChild(VirtualFile.java:427)
| org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.findVirtualFileInfo(VFSClassLoaderPolicy.java:488)
|
Modified checking
| java.io.UnixFileSystem.getLastModifiedTime(UnixFileSystem.java:Unknown line)
| java.io.File.lastModified(File.java:795)
| org.jboss.virtual.plugins.context.zip.ZipFileWrapper.getLastModified(ZipFileWrapper.java:140)
| org.jboss.virtual.plugins.context.zip.ZipEntryContext.getLastModified(ZipEntryContext.java:682)
| org.jboss.virtual.plugins.context.zip.ZipEntryHandler.getLastModified(ZipEntryHandler.java:92)
| org.jboss.virtual.plugins.context.DelegatingHandler.getLastModified(DelegatingHandler.java:107)
| org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.hasBeenModified(AbstractVirtualFileHandler.java:181)
| org.jboss.virtual.plugins.context.file.FileHandler.getChildren(FileHandler.java:183)
| org.jboss.virtual.plugins.context.file.FileSystemContext.createVirtualFileHandler(FileSystemContext.java:337)
| org.jboss.virtual.plugins.context.file.FileSystemContext.createVirtualFileHandler(FileSystemContext.java:256)
|
I keep seeing this, not checked if it is a real inefficiency
| org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.getLocalPathName(AbstractVirtualFileHandler.java:230)
| org.jboss.virtual.plugins.context.zip.ZipEntryContext.isLeaf(ZipEntryContext.java:751)
| org.jboss.virtual.plugins.context.zip.ZipEntryHandler.isLeaf(ZipEntryHandler.java:110)
| org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.structuredFindChild(AbstractVirtualFileHandler.java:502)
| org.jboss.virtual.plugins.context.zip.ZipEntryHandler.getChild(ZipEntryHandler.java:139)
| org.jboss.virtual.plugins.context.DelegatingHandler.getChild(DelegatingHandler.java:93)
| org.jboss.virtual.VirtualFile.getChild(VirtualFile.java:427)
| org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.findVirtualFileInfo(VFSClassLoaderPolicy.java:488)
| org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.findChild(VFSClassLoaderPolicy.java:452)
| org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.getResource(VFSClassLoaderPolicy.java:385)
|
Similarly this
| java.util.concurrent.ConcurrentHashMap$Segment.get(ConcurrentHashMap.java:334)
| java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:731)
| org.jboss.virtual.plugins.context.zip.ZipEntryContext.getRoot(ZipEntryContext.java:606)
| org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.getLocalPathName(AbstractVirtualFileHandler.java:230)
| org.jboss.virtual.plugins.context.zip.ZipEntryContext.isLeaf(ZipEntryContext.java:751)
| org.jboss.virtual.plugins.context.zip.ZipEntryHandler.isLeaf(ZipEntryHandler.java:110)
| org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.structuredFindChild(AbstractVirtualFileHandler.java:502)
| org.jboss.virtual.plugins.context.zip.ZipEntryHandler.getChild(ZipEntryHandler.java:139)
| org.jboss.virtual.plugins.context.DelegatingHandler.getChild(DelegatingHandler.java:93)
| org.jboss.virtual.VirtualFile.getChild(VirtualFile.java:427)
|
I'm still seeing the PathTokenizer showing up
| org.jboss.virtual.plugins.vfs.helpers.PathTokenizer.getTokens(PathTokenizer.java:97)
| org.jboss.virtual.plugins.context.AbstractVirtualFileHandler.structuredFindChild(AbstractVirtualFileHandler.java:475)
| org.jboss.virtual.plugins.context.zip.ZipEntryHandler.getChild(ZipEntryHandler.java:139)
| org.jboss.virtual.plugins.context.DelegatingHandler.getChild(DelegatingHandler.java:93)
| org.jboss.virtual.VirtualFile.getChild(VirtualFile.java:427)
| org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.findVirtualFileInfo(VFSClassLoaderPolicy.java:488)
| org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.findChild(VFSClassLoaderPolicy.java:452)
| org.jboss.classloading.spi.vfs.policy.VFSClassLoaderPolicy.getResource(VFSClassLoaderPolicy.java:385)
| org.jboss.classloader.spi.base.BaseClassLoader$3.run(BaseClassLoader.java:567)
| org.jboss.classloader.spi.base.BaseClassLoader$3.run(BaseClassLoader.java:564)
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4166367#4166367
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4166367
More information about the jboss-dev-forums
mailing list