The classes of an Openfire plugin are loaded through a dedicated instance of PluginClassLoader. It is expected that this instance is no longer used/references and thus eligible for garbage collection immediately after the plugin is unloaded.
For the HTTP File Upload plugin, this does not seem to be the case. Its PluginClassLoader remains in memory indefinely (or at least ~10 minutes) after the plugin gets unloaded.
Initial heap dump analysis shows that there's a timer task in AbstractFileSystemRepository that might keep a reference alive.