Java Library.Handler.invoke中的JNA内存泄漏
起初,我以为本地库中的内存正在泄漏,但似乎不是。我使用JNA访问Winapi的User32库。某些函数碰巧被调用得有点太频繁,特别是GetWindowText和GetWindowTextLength。嗯,我可以找到一些方法来减少对这些函数的调用量,但我更愿意先消除泄漏 以下是泄漏堆栈跟踪: 绿色加上我的程序开始的标记 正如您所看到的,java.lang.reflect.Method实例被堆积得很高。运行5-10分钟后,它们的容量达到44MB!这太过分了,特别是对于一个应该在后台运行的程序来说,这就是我的程序应该做的Java Library.Handler.invoke中的JNA内存泄漏,java,winapi,memory-leaks,jna,Java,Winapi,Memory Leaks,Jna,起初,我以为本地库中的内存正在泄漏,但似乎不是。我使用JNA访问Winapi的User32库。某些函数碰巧被调用得有点太频繁,特别是GetWindowText和GetWindowTextLength。嗯,我可以找到一些方法来减少对这些函数的调用量,但我更愿意先消除泄漏 以下是泄漏堆栈跟踪: 绿色加上我的程序开始的标记 正如您所看到的,java.lang.reflect.Method实例被堆积得很高。运行5-10分钟后,它们的容量达到44MB!这太过分了,特别是对于一个应该在后台运行的程序来说,
我能做点别的吗?这是JNA错误吗?或者只是垃圾收集器太懒了?您是否尝试过调整垃圾收集器?或者你是使用所有默认设置运行的?@Jägermeister我对Java非常陌生,除了算法之外的任何东西对我来说都是未知领域,所以是的,我使用所有默认设置编译。我将尝试在独立程序中重现这一点,以确保这不是我的程序的错误;这不是gcc,其中-O1工作得很好,而-O3破坏了一切。我说的是启动JVM时可以应用的各种开关。请看这里的例子:当然,这需要很好地理解GC是如何工作的。所以,让我们希望其他人能过来,就你的具体问题给出更深刻的建议。