Perm or Metaspace OOME due to many duplicate JaxbAccessor classes

Solution Verified - Updated -

Issue

  • We see a perm or metaspace OOME and the heap dump shows many duplicate JaxbAccessor classes (such as com.package.name.Class$$JaxbAccessorF_variablename) in our application classloader.
  • The OOME is hit in a call like the following:

    |- at java.lang.OutOfMemoryError.<init>()V (OutOfMemoryError.java:48)
    |- at java.lang.ClassLoader.defineClass1(Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; (Native Method)
    |- at java.lang.ClassLoader.defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; (ClassLoader.java:760)
    |- at java.lang.ClassLoader.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; (ClassLoader.java:642)
    |- at sun.reflect.GeneratedMethodAccessor242.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Unknown Source)
    |- at sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (DelegatingMethodAccessorImpl.java:43)
    |- at java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; (Method.java:497)
    |- at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Ljava/lang/String;[B)Ljava/lang/Class; (Injector.java:181)
    |- at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Ljava/lang/ClassLoader;Ljava/lang/String;[B)Ljava/lang/Class; (Injector.java:85)
    
  • Code similar to the following that performs a JAXB XML translation results in endlessly creating new classes:

    StringWriter sw = new StringWriter();
    JAXBContext jaxbContext = JAXBContext.newInstance(myObject.getClass());
    Marshaller marshal = jaxbContext.createMarshaller();
    marshal.marshal(myObject, sw);
    

Environment

  • JBoss Enterprise Application Platform (EAP)

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.