Java - 是否需要关闭 "new FileInputStream"?

标签 java

在这段代码中:

Properties prop = new Properties();
prop.load(new FileInputStream("config.properties"));

某些属性已加载,但文件输入流是否需要关闭或它是否以某种方式自行处理?

我需要创建一个变量,新文件输入流,然后关闭变量吗?

我也想知道,如果我创建一个变量,比如 String a = nullint b; 当它们什么都没有时会消耗内存吗?

如果我在方法或循环中有它,它在超出范围时是否仍然消耗内存?

我想有人曾经说过它加载到内存中但不是“Activity ”?

最佳答案

JVM 可能会快速收集垃圾并关闭 FileInputStream。在一个小脚本中,这样做很好。然而,规范的成语是:

FileInputStream fis;
try {
    fis = new FileInputStream("config.properties");
    prop.load(fis);
} finally {
    fis.close();
}

对于变量,每个变量都是一个引用,即使什么都不存储也会占用8个字节的内存(int一般只会占用4个字节,booleans更优化,但这些都是特例)。一旦声明离开作用域,这些局部引用将不占用内存(因为它们的堆栈空间消失了),但您创建的任何对象都将存在,直到它们被垃圾回收。

关于Java - 是否需要关闭 "new FileInputStream"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024867/

相关文章:

java - C++中new运算符和java中new运算符的区别

java - 从 Atom 运行 Java 时出现问题

java - 我的 Java 程序无法编译

java - 为什么 'for' 循环的两个相似实现之间存在差异?

java - Android 设备选择器中的序列号/名称

java - 我想使用在父类(super class)中创建的数组中的子类中的字段

java - 正则表达式将句子与一个变量单词相匹配

java - 使用 java 编码 URL 并替换 %20 或其他特殊字符

java - Android OCR 原生库

java - 在没有 DTYPE 列的情况下将多个类映射到 Hibernate 中的表