java缓存内存泄漏_java – getMethod是缓存并导致内存泄漏

我正在使用自动生成的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值