gpt4 book ai didi

java - ARM 无法正确关闭文件,最终导致打开文件过多

转载 作者:行者123 更新时间:2023-12-01 12:39:10 24 4
gpt4 key购买 nike

不确定我的代码的哪一部分到底导致了问题,但是当我开始查明问题时,我注意到运行以下代码时打开文件计数会增加。

public synchronized String readStringSync(String basePath,String path){

if(useLegacy){
return readStringLegacy(basePath,path);

}
if(!basePath.endsWith("/"))
basePath+="/";
StringBuffer sb = new StringBuffer(420);
File f= new File(basePath+path);
if(!f.exists()){
return null;
}
Charset charset = Charset.forName("UTF-8");
try (BufferedReader reader = Files.newBufferedReader(Paths.get(f.getAbsolutePath()), charset)) {
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line+"\r\n");

}
String ret = sb.toString();

if(ret.trim().startsWith("deleted")||ret.trim().equalsIgnoreCase("dummy"))
return null;
return ret;

} catch (Exception ex) {
ex.printStackTrace();
return null;
}

}

public static void main(String... args) throws Exception{

com.sun.management.UnixOperatingSystemMXBean mxb = (com.sun.management.UnixOperatingSystemMXBean)java.lang.management.ManagementFactory.getOperatingSystemMXBean();
System.out.println(mxb.getOpenFileDescriptorCount()); //11

System.out.println(readString("sometestfile"));

Thread.sleep(1000);

mxb = (com.sun.management.UnixOperatingSystemMXBean)java.lang.management.ManagementFactory.getOperatingSystemMXBean();
System.out.println(mxb.getOpenFileDescriptorCount()); //12 wtf


}

我已经尝试摆脱 File.exists 并将其替换为 Files.exists,但这绝对没有任何作用。

由于 stackoverflow 仍然提示缺乏细节,这是我正在使用的 java 版本:

java版本“1.7.0_51”OpenJDK 运行时环境 (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.13.04.2)OpenJDK 64 位服务器虚拟机(内部版本 24.45-b08,混合模式)

最佳答案

try-with-resources 语句正确关闭流/读取器,您不必担心这一点。

如果您遇到文件保持打开状态的情况,这并不是由于代码中的错误所致。如果系统范围内的打开文件相对较少,您的操作系统甚至 JVM 可能会出于性能原因将它们保持打开状态一段时间,并在出现问题时关闭它们。从你的角度来看,你不能做更多的事情,你可以使用 try-with-resources 语句正确关闭它。

关于java - ARM 无法正确关闭文件,最终导致打开文件过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25279137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com