I have no experience with WildFly9, but with other versions. Also with Java8, the organisation of PermGen space changed. Maybe it still helps.
In my opinion this is a bug somewhere. I spent some time debugging such issues and find them quite difficult to discover, even with MAT. I encountered:
- Bug in application server
- Bug in Oracle driver
- Use of ThreadLocal in user-code
- Slow free of Soft References (-XX:SoftRefLRUPolicyMSPerMB=1 might help)
Try to find path to GC-root excluding all soft/weak/phantom references. If you are lucky, you find strong references (e.g to a ThreadLocal).
If you find only soft references -XX:SoftRefLRUPolicyMSPerMB=1 might help (if available in your JDK).