我正在使用自动生成的Java类来执行特殊方法.因此,我必须通过反射调用方法.
此执行由Swing Thread触发,因为该方法(从“unknown”类调用)正在更新UI元素.每次执行新线程都会通过调用在类中搜索一个Method
Class {
...
public Method[] getMethods() throws SecurityException
...
}
getMethods的逻辑缓存了元素,但我不知道为什么.一个Profiler告诉我,Method obejcts正在浮动内存.
我可以通过设置系统属性“sun.reflect.noCaches”来禁用Java的方法缓存,但是在我更改了这些属性后,我的应用程序变得非常缓慢.
题:
在尝试从类中获取方法之前,我可以实现自己的缓存算法.但我工作的项目非常大,我们有多个反射调用.
什么可以解决这些问题?
哪些情况会触发这些内存泄漏(错误的类加载器,……)?
该项目使用Java 1.5在Linux下运行
解决方法:
>首先,它使用的缓存是SoftReference,因此缓存的方法将在OOME发生之前被删除.
>如果您仍想删除它,只需在每次调用getMethods(..)之后调用clearCachesOnClassRedefinition()方法;你必须使用反射,因为方法是私有的.
标签:java,memory-leaks,reflection,class
来源: https://codeday.me/bug/20190626/1295457.html