关于solaris下进程能打开的最大文件数的问题
用ulimit -n 命令查看,结果是256, 这说明进程能打开的最大文件数不超过256个
但下面的java程序却能成功打开10000多个, 这是什么原因?
import java.io.*;
public class openfile{
public static void main(String[] args)
{
PrintWriter[] bw = new PrintWriter[15000];
try{
for (int i=0; i < bw.length; i++)
{
bw[i] = new PrintWriter(new BufferedWriter(new FileWriter("test"+i)));
bw[i].println("Hello World! " + i);
bw[i].close();
}
//这个循环可以成功地打开15000个文件
for (int i=0; i < bw.length; i++)
{
BufferedReader br = new BufferedReader(new FileReader("test" + i));
String str = br.readLine();
System.out.println("read file test" + i + " : " + str);
try{
if (i % 256 == 0) Thread.sleep(1000);
}catch(Exception e){}
}
String s = "test0";
File f = new File(s);
if (f.exists())
{
Process pro = Runtime.getRuntime().exec("/opt/swe/bin/gzip " + "test0");
pro.waitFor();
System.out.println("exit value: " + pro.exitValue());
}
else
System.out.println("file not exsit");
}
catch(Exception e)
{
System.out.println("exception! " + e.getMessage());
}
System.out.println("Bye...");
}
}
------解决方案--------------------
java有 自动回收机制,可以自动释放内存空间
------解决方案--------------------UP
------解决方案--------------------
看下java垃圾回收机制