繁体   English   中英

getMethod是缓存并导致内存泄漏

[英]getMethod is caching and cause a memory leak

我正在使用自动生成的Java类来执行特殊方法。 因此,我必须通过反射调用方法。

此执行由Swing Thread触发,因为该方法(从“unknown”类调用)正在更新UI元素。 每次执行新线程都会通过调用在类中搜索一个Method

Class {
...
public Method[] getMethods() throws SecurityException
...
}

getMethods的逻辑缓存了元素,但我不知道为什么。 一个Profiler告诉我,Method obejcts正在浮动内存。

我可以通过设置系统属性“sun.reflect.noCaches”来禁用Java的方法缓存,但是在我更改了这些属性后,我的应用程序变得非常缓慢。

问题:在尝试从类中获取方法之前,我可以实现自己的缓存算法。 但我工作的项目非常大,我们有多个反射调用。

什么可以解决这些问题?

哪些情况会触发这些内存泄漏(错误的类加载器,......)?

该项目使用Java 1.5在Linux下运行

  1. 首先,它使用的缓存是SoftReference ,因此缓存的方法将在OOME发生之前被删除。

  2. 如果您仍想删除它,只需在每次调用getMethods(..)之后调用clearCachesOnClassRedefinition()方法; 你必须使用反射,因为方法是私有的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM