- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白。例如我们在代码中有一个 OutputStream 类型的变量,当我们停止使用它时我们应该调用它的 close() ,为什么它没有以这种方式实现:GC 在清理时调用 close() 本身这个变量?
更新:好的,到目前为止我得出的结论是:释放非托管资源不仅是释放内存更重要的是我们现在没有它背后的内部行为,它可能存在对该资源数量的限制(连接/处理程序的数量)这就是为什么我们需要尽快释放他们。我对吗?因为如果一切都与内存有关,那么我不知道为什么 GC 不能像处理托管资源那样完成这项工作。
最佳答案
close
在大多数情况下最终会被 GC 通过 finalize
方法自动调用(任何类都可以有这样的 finalize
被调用在销毁对象时由 GC 执行;对于保存资源的 Closable
类型,它通常会被实现为调用 close
)。当然,问题是您无法控制这种情况何时发生(如果有的话)。从您不再需要该对象开始,可能需要 10 秒或 10 分钟,但仍然会用完分配的任何资源。因此,当您不再需要资源句柄时,清理它们是一种很好的方式。
此外,从 Java 7 开始,您实际上可以这样做:
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
close
将在 try block 结束时自动调用。
参见 documentation了解更多详情。
最后,对于 为什么 有 Closable
和首先需要显式关闭的东西,这是针对 JVM 不直接管理的资源和因此也不能被 GC 自动回收。这些资源例如文件、套接字或音频输出。
关于java - 为什么不能在 Closeable 类上自动调用 close()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670658/
我是 selenium 的新手。我在使用 Selenium WebDriver 时遇到了一些问题。 我想使用 Selenium WebDriver 打开网站,例如 www.filpkart.com 我
在阅读一些 Java 源代码时,我遇到了这一行: ((Closeable) some_obj).close(); some_obj 显然是一个实现了 Closeable 接口(interface)的类
我最近查看了 jdk 1.8 的 src.zip 文件,发现了一些很奇怪的东西。 public interface Closeable extends AutoCloseable 既然AutoClos
我是单元测试的新手。 我应该如何为这个方法编写 JUnit 测试? public static void close(Closeable closeable) { if (closea
我问了this question yesterday .我想我得到了正确的答案,但其他答案之一给我留下了一个问题。如果我有这样的代码: File file = new File("somefile.t
我已经实现了自己的可关闭 JTabbedPane(基本上遵循了 here 的建议 - 通过扩展 JTabbedPane 并覆盖一些方法并调用 setTabComponentAt(...))。它完美地工
我想扩展选项卡控件以具有可关闭的选项卡项目。 我找到了 Kent 的这个 WPF 解决方案: On the WPF TabControl - can I add content next to the
我的整个系统有一个静态 HashMap,其中包含一些对象的引用;我们称之为myHash 。这些对象仅在我需要它们时才会实例化,例如 private static HashMap directories
我不明白。例如我们在代码中有一个 OutputStream 类型的变量,当我们停止使用它时我们应该调用它的 close() ,为什么它没有以这种方式实现:GC 在清理时调用 close() 本身这个变
有时我必须编写将自己注册为其他对象的监听器的对象。良好的编程实践表明我们应该始终注销此类监听器。通过使类实现 Closeable 并在 close() 中注销监听器来尝试强制执行此类行为是一种好习惯吗
我正在学习 Java,我找不到关于 implements Closeable 和 implements AutoCloseable 接口(interface)的任何好的解释。 当我实现 interfa
我有一个 Map如果从 map 中删除了一个键,我想关闭 Closeable .通常我有这样的东西: Closeable c = map.remove(key); c.close(); 我的 Ecli
有人可以向我解释这里发生了什么以及顺序是什么吗?。输出对我来说没有任何意义。 输出为 T 1 IOE F。 代码是: import java.io.Closeable; import java.io.
在 Android 应用中,我将此代码添加到 onCreate() Closeable sss = new Socket(); if (!(sss instanceof Closeab
我想知道为什么我会在新的 eclipse Juno 上收到这个警告,尽管我认为我正确地关闭了所有内容。您能告诉我为什么我会在以下代码中收到此警告吗? public static boolean cop
假设我们有两个 Closeable bean: @Component public class CloseableBean1 implements Closeable { private Bu
为什么他们要添加 AutoCloseable 并更改 Closeable 如下: public interface Closeable extends AutoCloseable { publ
我正在尝试创建一个管理多个 Closeable 资源的 Java 类。 C++ 解决方案简单明了,并且可以轻松扩展到更多资源: class composed_resource { resour
我遇到了类似于 this one 的问题,除了 java.util.Scanner。我有这个静态方法: public static void close(final Closeable c) {
当我运行我的 Android 应用程序时,出现以下错误: 10-12 16:46:44.719 2710-2719/? E/StrictMode: A resource was acquired at
我是一名优秀的程序员,十分优秀!