gpt4 book ai didi

java - getMethod 正在缓存并导致内存泄漏

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:35 28 4
gpt4 key购买 nike

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

此执行由 Swing 线程触发,因为该方法(从“未知”类调用)正在更新 UI 元素。新线程的每次执行都是通过调用在类中搜索方法

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

getMethods的逻辑,缓存元素,不知道为什么。 Profiler 向我显示,方法对象在内存中 float 。

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

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

什么可以解决这些问题?

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

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

最佳答案

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

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

关于java - getMethod 正在缓存并导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6435985/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com