【问题标题】:Java memory leaks - Cleared upon program termination?Java 内存泄漏 - 程序终止时清除?
【发布时间】:2014-11-06 01:19:32
【问题描述】:

这似乎是一个是或否的问题,我希望它会在某个地方得到回答,但我肯定找不到。 Java 中的内存泄漏不像使用 C 或 C++ 等语言开发那样频繁,但它们可能会发生。

大多数操作系统会在程序终止时清除分配的内存,但共享内存等某些情况除外。 JVM退出时仍然如此吗?如果我无意中在 Java 中创建了内存泄漏,它会被 JVM 或 Linux 或 Windows 操作系统清除吗?

【问题讨论】:

    标签: java memory memory-leaks


    【解决方案1】:

    是的,JVM终止后所有内存都会被释放。

    【讨论】:

    • 对于打开的文件句柄、网络套接字等也是如此(但在完成后主动关闭它们仍然是一个好习惯)
    • 这个答案有点理想化。 JNI、不安全调用、堆外缓存等可能会导致泄漏。
    • @spudone:真的吗?至少就进程内内存而言,操作系统不会在进程退出后可靠地释放所有这些吗?
    • JNI 可能会泄漏,是的。即使发生堆崩溃,其他进程内内存也可能全部释放。重启jvm,应该全部释放了。
    • @Thilo 在 Linux 中它通常会清理,尽管运行它的特权所有赌注都关闭了。此外,作为普通用户的泄漏可能会通过深入交换来使系统崩溃。 Windows...我不知道,取决于版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2012-02-17
    • 2014-05-16
    相关资源
    最近更新 更多