反思课程不断增加

时间:2014-03-14 06:31:50

标签: java performance memory-leaks garbage-collection profiling

我可以在我的应用程序中看到没有任何已加载的类继续增加as discussed here

在使用你的套件和堆栈溢出社区的帮助时,我得出结论,增加的类是因为动态创建的反射类如下所示:

  1. GeneratedConstructorAccessorXX
  2. GeneratedMethodAccessorXX
  3. GeneratedSerializationConstructorAccessorXX

    其中XX是某个数字。

  4. 根据我的知识和我在googling之后了解的内容,这些是反射用来访问存储在内存中的对象信息的运行时代理。这些访问器被缓存,因此它们没有每次都要重生。这些类对象是每个类加载器的单例,因此我们在给定类的每个类加载器中只有一个生成的访问器实例。 如果是这种情况,为什么我在运行重复测试时会看到加载类的增加。

    更新* 在进一步的分析中,我观察到增加的负荷特别是因为 GeneratedSerializationConstructorAccessor。

1 个答案:

答案 0 :(得分:0)

我将在下面分享我的发现并接受这个作为答案,除非其他人带来更好的东西。 在使用您的工具包进一步分析和检查堆栈跟踪时,我能够看到在创建任何EJb bean调用时创建了GeneneratedSerializationConstructorAccessor。尽管每个请求都没有创建新的类。 发现的另一个观察结果是,使用EJB bean的另一个应用程序也部署在同一个jboss服务器上,并且是测试的一部分,但我们没有遇到任何此类问题。

我可以看到的一个区别是,没有发现此类问题的后一个应用程序使用的是EJB 3.X,其中发现的问题是2.X. 可能是创建问题的遗留版本。 它已被确定不是一个展示塞,它的性能将在生产中被观察。