An application running under Weblogic 12c makes extremely heavy but temporary use of PermGen space during a late phase of startup. I say "temporary" because it exhibits "saw-tooth" growth up to the PermGen limit (500MB), then instantly dropping down to a nearly-constant base level (around 300MB), graphing like this: /|/|/| . After about 5 lengthy iterations, normal startup resumes.
Running with "-verbose:class" turned on, we see no classes being loaded or unloaded during this behavior.
What usage of PermGen might exhibit this set of symptoms? All I can think is that for some unknown reason, around a gigabyte of interned strings are being created and then garbage-collected.
Update This is running on Solaris HotSpot 1.7. Strings aren't interned in Java 7.
Update 2 This appears to be an issue with trying to load the classes being handled by a ServletContextInitializer, probably WebLogic-specific. We don't have any ServletContextInitializers, nor do any of our libs - it must be part of the base WebLogic classloader space. There are a lot in there. I'd guess that there's a bug in error-handling of NoClassDefFound for a base class, interface, or annotation used by some class that the @HandlesTypes on the ServletContextInitializer is flagging.