日期:2014-05-20  浏览次数:20702 次

关于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垃圾回收机制