Fel*_*lix 2 java tomcat garbage-collection
为了打印Web应用程序的GC日志,在tomcat启动之前,添加以下参数:
-Xms256m
-Xmx512m
-XX:PermSize=128M
-XX:MaxPermSize=512M
-Xloggc:D:/TomcatGc.log
Run Code Online (Sandbox Code Playgroud)
但是,终端上会不断打印以下信息.
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor339]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor336]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor341]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor342]
[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor340]
Run Code Online (Sandbox Code Playgroud)
我的问题是:
为什么要生成这些类?我想了解这个概念,但找不到任何有关它的信息.
如何防止GC卸载它们?
这是因为(可能是你在应用程序中使用反射)堆空间不足并GC试图通过卸载未使用的对象来释放一些内存,这就是你看到的原因Unloading class sun.reflect.GeneratedSerializationConstructorAccessor
更多信息--> http://coding.derkeiler.com/Archive/Java/comp.lang.java.programmer/2006-11/msg00122.html
不同类型的访问器
方法访问器和构造函数访问器是本机的或生成的。这意味着我们对于方法使用 NativeMethodAccessorImpl 或 generatedMethodAccessor,对于构造函数使用 NativeConstructorAccessorImpl 和 generatedConstructorAccessor。访问器可以是本机的或生成的,并由两个系统属性控制和决定:
当 sun.reflect.noInflation 设置为 true 时,将始终生成所使用的访问器,并且系统属性 sun.reflect.inflationThreshold 没有任何意义。当 sun.reflect.noInflation 为 false 且 sun.reflect.inflationThreshold 设置为 15(如果未指定,则为默认行为)时,这意味着对于构造函数(或方法)的前 15 次访问,本机生成器将使用后,将提供(从 ReflectionFactory)生成的访问器以供使用。
本机访问器使用本机调用来访问信息,而生成的访问器都是字节代码,因此速度非常快。另一方面,生成的访问器需要时间来实例化和加载(基本上是膨胀,因此控制它的系统属性的名称包括“膨胀”一词)。
| 归档时间: |
|
| 查看次数: |
9757 次 |
| 最近记录: |