在我的程序代码中有很多线程。当我的程序开始并结束时,句柄的数量不会被释放。当程序第二次启动时,手柄的数量增加。每次都发生这种情况。程序的线程数也增加了。任何人都可以告诉我如何释放手柄?因为我的程序存在手柄泄漏问题。如何在java中释放句柄
0
A
回答
5
您没有关闭正在使用这些句柄的流。任何时候您使用某种I/O资源时,都需要确保它已关闭。经典则应在finally
块来完成,以确保它被称为无论发生什么情况,如:
final FileInputStream in = new FileInputStream("C:/test.txt");
try {
// Do whatever you want with the stream:
// - read from it directly
// - call other methods etc.
// Just make sure you're really finished with it
// by the end of this try block!
}
finally {
in.close();
}
这同样适用于数据库连接,HTTP连接,各种网址资源 - 用close()
方法几乎任何东西。
查看这些实际类型(文件/数据库/网络端口)和任何详细信息(如文件名,远程主机等)将帮助您追踪程序的哪些部分未关闭其资源正确。
这是一个好主意,让try { ... } finally { foo.close(); }
成语嵌入到您的编程肌肉记忆,你总是希望处理资源这样的。这是防止泄漏的唯一可靠方法,应该在第一次编写代码时完成,而不是在稍后追查错误时完成。
0
除了Andrzej的说法: 检查您的自定义对象是否覆盖finalize()方法。如果finalize方法抛出异常,那么该对象将永远不会被垃圾收集。
确实需要检查静态集合的用法,通常静态集合是长期存在的。
也许你可以尝试使用软引用和弱引用,以便下次发生垃圾回收时,引用它们的对象可能有资格进行垃圾回收。
再次注意:system.gc()是一个请求,而不是一个强制命令,所以它可能不会产生确切的预期数字。
相关问题
- 1. 释放java文件句柄
- 2. 如何通过C#释放句柄?
- 3. 检查何时在Java中释放所有文件句柄
- 4. OpenSSL不会释放文件句柄
- 5. GCHandle.Free()是否简单地释放句柄?
- 6. 如何强制Nunit释放本机DLL上的句柄?
- 7. 如何正确释放没有句柄的指定对象
- 8. 释放在C#中的OLE的IStorage文件句柄
- 9. 在自动生成过程中释放Windows文件句柄
- 10. 如何释放COM手柄.NET
- 11. 如何在MATLAB中找到注释句柄?
- 12. 何时应该释放原生(Android NDK)句柄?
- 13. Process.Kill是否释放诸如文件句柄之类的资源?
- 14. 为什么在调用file.close()后Python不释放文件句柄?
- 15. 如何释放内存在Java中
- 16. 如何在Java中释放内存?
- 17. 获取的窗口句柄在Java中
- 18. 子进程似乎结束,但不释放文件句柄
- 19. 想要脚本Windows WMI(wmiprvse.exe)释放文件上的句柄
- 20. Python子进程kill不会释放文件句柄
- 21. 释放文件上的句柄。来自BitmapImage的ImageSource
- 22. python不释放文件句柄到日志文件
- 23. 强制一个OleDbConnection释放文件句柄
- 24. 如何从curl句柄中删除CURL_FILE句柄?
- 25. 在Java中释放对象
- 26. 关闭文件句柄是否在Windows中释放关联的内存?
- 27. Java程序输出句柄
- 28. 句柄警告它不在硒3 java
- 29. 如何在java中解释/ *** /?
- 30. Matlab - 如何检查句柄的存在
你是什么意思的“句柄”?你的程序是否优雅地终止?你使用什么物体?通常设置一个对象为'null'将使它成为垃圾收集的候选对象,但是如果你发布了一些相关的代码,它会有所帮助... – mre 2011-05-24 11:48:49
由于代码非常大,它是一个完整的清理项目,所以我认为它不会我可以发布。因此,正如你所说,将它们设置为null将使它们成为垃圾收集的候选对象,但有大量的句柄,所以我使用System.gc(),它不起作用 – 2011-05-24 11:53:47
垃圾收集与文件句柄泄漏很少有关 - 所有的GC都会从内存中删除任何不再被引用的对象。这本质上是Java内部的,并且不会影响外部资源(要注意对象可能有终结器来关闭资源,但这很少见,并且通常被认为是一个坏主意......)。 – 2011-05-24 11:55:55