Uploaded image for project: 'Application Server 3  4  5 and 6'
  1. Application Server 3 4 5 and 6
  2. JBAS-3849

Duplicating _$$_javassist_ classes after remote - call - OutOfMemory: PermGen

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Critical
    • JBossAS-4.0.4.CR2, JBossAS-4.0.4.GA, JBossAS-4.0.5.CR1, JBossAS-4.0.5.GA
    • Remoting
    • None

    Description

      A simple test (Books/Users) to reproduce the problem.

      beantestclient - a simple test client application (runnable: com.newitech.beantest.ejb.Client)
      beantest - simple EJB 3 beans.

      ==========================================================
      ANOTHER EXAMPLE AND IDEA OF BUG

      PermGen in EJB3 client aplication by remote interface.
      The application is as sample as it can be:
      -get remote interface of stateless EJB3 (by JNDI)

      • ask 1000 times to get a Collection (List) of 10 EntityBeans.

      After 255 there is OutOfMemory: PermGen.
      JVM options changes nothing (eventualy more PermSpace => longer run).

      The reason looks like the Javassist create lazyinitializer classes for every EntityBean retrived from the server.

      So: When I debug on server-side, I got before sending Entity to client:
      I got:
      myEntity[0].id=143534
      myEntity[0].flow=<FlowEntity_$$_javassist_7> 13434
      ...
      myEntity[0].user=<UserEntity_$$_javassist_15>...
      myEntity[0].stage=<StageEntity_$$_javassist_17>...

      And every remote call the class names (name)$..._javassist(index) got the same
      indexes (7,15,17) on server side (end every entity in returned collections of entities)

      But when I debug on client site - after return from remote call - the indexes of
      all returned entities are different (Each next increments index).

      So after first call I got:

      myEntity[0].id=143534
      myEntity[0].flow=<FlowEntity_$$_javassist_0>...
      ...
      myEntity[0].user=<UserEntity_$$_javassist_1>...
      myEntity[0].stage=<StageEntity_$$_javassist_2>...
      ...
      myEntity[1].id=143534
      myEntity[1].flow=<FlowEntity_$$_javassist_3>
      ...
      myEntity[1].user=<UserEntity_$$_javassist_4>...
      myEntity[1].stage=<StageEntity_$$_javassist_5>...
      ...

      After secund call:

      myEntity[0].id=143534
      myEntity[0].flow=<FlowEntity_$$_javassist_6>...
      ...
      myEntity[0].user=<UserEntity_$$_javassist_7>...
      myEntity[0].stage=<StageEntity_$$_javassist_8>...
      ...
      myEntity[1].id=143534
      myEntity[1].flow=<FlowEntity_$$_javassist_9>
      ...
      myEntity[1].user=<UserEntity_$$_javassist_10>...
      myEntity[1].stage=<StageEntity_$$_javassist_11>...
      ...

      And so on... ... and permGen after 260 iterations...

      Attachments

        Issue Links

          Activity

            People

              sebersole Steve Ebersole (Inactive)
              ptabor_jira Piotr Tabor (Inactive)
              Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: