Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Library.Handler.invoke中的JNA内存泄漏_Java_Winapi_Memory Leaks_Jna - Fatal编程技术网

Java Library.Handler.invoke中的JNA内存泄漏

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访问Winapi的User32库。某些函数碰巧被调用得有点太频繁,特别是GetWindowText和GetWindowTextLength。嗯,我可以找到一些方法来减少对这些函数的调用量,但我更愿意先消除泄漏

以下是泄漏堆栈跟踪:

绿色加上我的程序开始的标记

正如您所看到的,java.lang.reflect.Method实例被堆积得很高。运行5-10分钟后,它们的容量达到44MB!这太过分了,特别是对于一个应该在后台运行的程序来说,这就是我的程序应该做的


我能做点别的吗?这是JNA错误吗?或者只是垃圾收集器太懒了?

您是否尝试过调整垃圾收集器?或者你是使用所有默认设置运行的?@Jägermeister我对Java非常陌生,除了算法之外的任何东西对我来说都是未知领域,所以是的,我使用所有默认设置编译。我将尝试在独立程序中重现这一点,以确保这不是我的程序的错误;这不是gcc,其中-O1工作得很好,而-O3破坏了一切。我说的是启动JVM时可以应用的各种开关。请看这里的例子:当然,这需要很好地理解GC是如何工作的。所以,让我们希望其他人能过来,就你的具体问题给出更深刻的建议。