我的这个程序需要运行很长时间,同时开很多的线程从网络上下载网页,数据量非常大.结果昨天运行的时候导致jvm崩溃?希望高手帮忙看看应该怎么改?以下是异常信息
#
# An unexpected error has been detected by Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c930a19, pid=3940, tid=3944
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_01-b06 mixed mode)
# Problematic frame:
# C  [ntdll.dll+0x10a19]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#---------------  T H R E A D  ---------------Current thread (0x0b52bc00):  JavaThread "Thread-3701" [_thread_in_native, id=3944]siginfo: ExceptionCode=0xc0000005, reading address 0x61502635Registers:
EAX=0x119a12d8, EBX=0x0c3b0000, ECX=0x61502635, EDX=0x37393933
ESP=0x1075cdb4, EBP=0x1075cdc0, ESI=0x119a12d0, EDI=0x119a12a8
EIP=0x7c930a19, EFLAGS=0x00010283Top of Stack: (sp=0x1075cdb4)
0x1075cdb4:   0c3b0000 119a12a8 00000000 1075ce94
0x1075cdc4:   7c93084c 0c3b0000 61502635 1075ce78
0x1075cdd4:   00000000 00000000 119a12b0 000000ba
0x1075cde4:   00000000 00000000 0000000c 0000000c
0x1075cdf4:   00000000 0bba9a58 00000028 0c3b01b8
0x1075ce04:   1075ceb4 0000000f 003bef2f 00000004
0x1075ce14:   1075ce2c 0c375618 1075ceb4 0c3b0000
0x1075ce24:   0c3b0000 00000055 00000038 0000000c Instructions: (pc=0x7c930a19)
0x7c930a09:   85 92 00 00 00 8b 4e 0c 8d 46 08 8b 10 89 4d 0c
0x7c930a19:   8b 09 3b 4a 04 89 55 14 0f 85 2b 0d 00 00 3b c8 
Stack: [0x10660000,0x10760000),  sp=0x1075cdb4,  free space=1011k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [ntdll.dll+0x10a19]
C  [ntdll.dll+0x1084c]
C  [nlsp.dll+0x216b6]
C  [nlsp.dll+0x1d3e0]
C  [nlsp.dll+0x1ad85]
C  [WS2_32.dll+0x4c95]
C  [net.dll+0x7219]
j  java.net.SocketOutputStream.socketWrite0(Ljava/io/FileDescriptor;[BII)V+0
j  java.net.SocketOutputStream.socketWrite([BII)V+44
j  java.net.SocketOutputStream.write([BII)V+4
j  java.io.BufferedOutputStream.flushBuffer()V+20
j  java.io.BufferedOutputStream.flush()V+1
J  sun.net.www.MessageHeader.print(Ljava/io/PrintStream;)V
j  sun.net.www.http.HttpClient.writeRequests(Lsun/net/www/MessageHeader;Lsun/net/www/http/PosterOutputStream;)V+13
j  sun.net.www.protocol.http.HttpURLConnection.writeRequests()V+569
J  sun.net.www.protocol.http.HttpURLConnection.getInputStream()Ljava/io/InputStream;
J  searchengineplugin.query.JQueryBase.downBinaryFile(Ljava/lang/String;ILjava/net/Proxy;)[B
j  searchengineplugin.query.JQuery.downBinaryFile(Ljava/lang/String;)[B+51
j  jtoptrack.tools.Html2MHTCompiler$AttachmentDataSource.<init>(Ljtoptrack/tools/Html2MHTCompiler;Ljava/lang/String;Ljava/lang/String;)V+90
J  jtoptrack.tools.Html2MHTCompiler.createMhtArchive(Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;)Z
j  jtoptrack.tools.Html2MHTCompiler.compile()Z+124
j  searchengineplugin.down.JUsptoDown.down(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z+56
j  jtoptrack.tools.MyJob$1.run()V+41
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stubJava frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  java.net.SocketOutputStream.socketWrite0(Ljava/io/FileDescriptor;[BII)V+0
j  java.net.SocketOutputStream.socketWrite([BII)V+44
j  java.net.SocketOutputStream.write([BII)V+4
j  java.io.BufferedOutputStream.flushBuffer()V+20
j  java.io.BufferedOutputStream.flush()V+1
J  sun.net.www.MessageHeader.print(Ljava/io/PrintStream;)V
j  sun.net.www.http.HttpClient.writeRequests(Lsun/net/www/MessageHeader;Lsun/net/www/http/PosterOutputStream;)V+13
j  sun.net.www.protocol.http.HttpURLConnection.writeRequests()V+569
J  sun.net.www.protocol.http.HttpURLConnection.getInputStream()Ljava/io/InputStream;
J  searchengineplugin.query.JQueryBase.downBinaryFile(Ljava/lang/String;ILjava/net/Proxy;)[B
j  searchengineplugin.query.JQuery.downBinaryFile(Ljava/lang/String;)[B+51
j  jtoptrack.tools.Html2MHTCompiler$AttachmentDataSource.<init>(Ljtoptrack/tools/Html2MHTCompiler;Ljava/lang/String;Ljava/lang/String;)V+90
J  jtoptrack.tools.Html2MHTCompiler.createMhtArchive(Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;)Z
j  jtoptrack.tools.Html2MHTCompiler.compile()Z+124
j  searchengineplugin.down.JUsptoDown.down(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z+56
j  jtoptrack.tools.MyJob$1.run()V+41
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub---------------  P R O C E S S  ---------------Java Threads: ( => current thread )
  0x0b9aec00 JavaThread "Thread-3705" [_thread_in_native, id=596]
  0x0b7e3000 JavaThread "Keep-Alive-Timer" daemon [_thread_blocked, id=1836]
  0x0b80b800 JavaThread "Thread-3703" [_thread_in_native, id=188]
  0x0b8fc800 JavaThread "Thread-3702" [_thread_in_native, id=3536]
=>0x0b52bc00 JavaThread "Thread-3701" [_thread_in_native, id=3944]
  0x0b51b800 JavaThread "Worker-30" [_thread_blocked, id=3360]
  0x0b799c00 JavaThread "Thread-3697" [_thread_in_native, id=1592]
  0x11b97400 JavaThread "Thread-3696" [_thread_in_native, id=3068]
  0x0b869c00 JavaThread "Thread-3694" [_thread_in_native, id=2180]
  0x0b549000 JavaThread "Thread-3693" [_thread_in_native, id=484]
  0x0b89b000 JavaThread "Thread-3692" [_thread_in_native, id=1616]
  0x0b8ddc00 JavaThread "Thread-3687" [_thread_in_native, id=2448]
  0x0b9b6c00 JavaThread "Thread-3686" [_thread_in_native, id=276]
  0x0b954c00 JavaThread "Thread-3684" [_thread_in_native, id=3960]
  0x0b7f2400 JavaThread "Thread-3663" [_thread_in_native, id=3500]
  0x0b8d9400 JavaThread "Worker-29" [_thread_blocked, id=3328]
  0x0b986400 JavaThread "Worker-28" [_thread_blocked, id=788]
  0x0b8ecc00 JavaThread "Worker-26" [_thread_blocked, id=3640]
  0x0b94c800 JavaThread "Worker-25" [_thread_blocked, id=300]
  0x0b53f800 JavaThread "Worker-24" [_thread_blocked, id=2256]
  0x0b899c00 JavaThread "Worker-22" [_thread_blocked, id=2464]
  0x11b68c00 JavaThread "Worker-20" [_thread_blocked, id=3104]
  0x0b54ac00 JavaThread "Thread-177" [_thread_in_Java, id=256]
  0x0b89a800 JavaThread "Worker-9" [_thread_blocked, id=1900]
  0x0b89a000 JavaThread "Worker-8" [_thread_blocked, id=2052]
  0x0b7a4800 JavaThread "Worker-5" [_thread_blocked, id=1272]
  0x0b52e400 JavaThread "Worker-4" [_thread_blocked, id=1368]
  0x0b52d400 JavaThread "Worker-3" [_thread_blocked, id=3036]
  0x0b52a800 JavaThread "Worker-1" [_thread_blocked, id=2268]
  0x0b7aa400 JavaThread "Timer-1" [_thread_blocked, id=2420]
  0x0aba4000 JavaThread "Timer-0" [_thread_blocked, id=2096]
  0x0b47a800 JavaThread "db4o WeakReference collector" daemon [_thread_blocked, id=3516]
  0x0b4b2c00 JavaThread "db4o WeakReference collector" daemon [_thread_blocked, id=244]
  0x0ab6c000 JavaThread "db4o WeakReference collector" daemon [_thread_blocked, id=2588]
  0x0b5f2800 JavaThread "Start Level Event Dispatcher" daemon [_thread_blocked, id=1036]
  0x0b5fc400 JavaThread "Framework Event Dispatcher" daemon [_thread_blocked, id=544]
  0x0b5cc400 JavaThread "State Data Manager" daemon [_thread_blocked, id=2924]
  0x0ab61800 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=4020]
  0x0ab59000 JavaThread "CompilerThread0" daemon [_thread_blocked, id=948]
  0x0ab57c00 JavaThread "Attach Listener" daemon [_thread_blocked, id=3872]
  0x0ab6e800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2792]
  0x0ab46800 JavaThread "Finalizer" daemon [_thread_blocked, id=2128]
  0x0ab42400 JavaThread "Reference Handler" daemon [_thread_blocked, id=4056]
  0x003f6000 JavaThread "main" [_thread_in_native, id=2532]Other Threads:
  0x0ab3f000 VMThread [id=3524]
  0x0ab63000 WatcherThread [id=356]VM state:not at safepoint (normal execution)VM Mutex/Monitor currently owned by a thread: NoneHeap
 def new generation   total 4544K, used 3972K [0x02a30000, 0x02f10000, 0x02f10000)
  eden space 4096K,  86% used [0x02a30000, 0x02da11d8, 0x02e30000)
  from space 448K, 100% used [0x02ea0000, 0x02f10000, 0x02f10000)
  to   space 448K,   0% used [0x02e30000, 0x02e30000, 0x02ea0000)
 tenured generation   total 60544K, used 52355K [0x02f10000, 0x06a30000, 0x06a30000)
   the space 60544K,  86% used [0x02f10000, 0x06230e70, 0x06231000, 0x06a30000)
 compacting perm gen  total 26368K, used 26156K [0x06a30000, 0x083f0000, 0x0aa30000)
   the space 26368K,  99% used [0x06a30000, 0x083bb3c0, 0x083bb400, 0x083f0000)
No shared spaces configured.

解决方案 »

  1.   

    以下是下载函数,所有建立的缓冲和连接用完我都关闭了,不知道为什么还会溢出.public static byte[]  downBinaryFile(String strUrl, int timeout, Proxy proxy){
         byte[] ret = null;
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         InputStream urlStream = null;
         HttpURLConnection httpConnection = null;
         BufferedInputStream in = null;
         URL url = null;
    try {
    url = new URL(strUrl);
    if (proxy != null) {
             httpConnection = (HttpURLConnection) url.openConnection(proxy);
         }
             else {
             httpConnection = (HttpURLConnection) url.openConnection();
             }
    httpConnection.addRequestProperty("User-Agent", "IcewolfHttp/1.0");
         httpConnection.addRequestProperty("Accept",
                                         "www/source; text/html; image/gif; */*");
         httpConnection.addRequestProperty("Accept-Language", "");
            httpConnection.setConnectTimeout(timeout);
            httpConnection.setReadTimeout(timeout);         urlStream = httpConnection.getInputStream();
            String strEncoding = httpConnection.getContentEncoding();    
            
            if (strEncoding != null &&  strEncoding.compareTo("gzip") == 0) {
             urlStream = new java.util.zip.GZIPInputStream(urlStream);
            }
            in = new BufferedInputStream(urlStream);
            int b;
            byte[] a = new byte[1024];
            while ((b = in.read(a)) != -1) {
                out.write(a, 0, b);
            }
            in.reset();
            in.close();
            urlStream.reset();
            urlStream.close();
            ret = out.toByteArray();
            out.reset();
            out.close();
    } catch (Exception e) {
             //System.out.println(e.getClass() + "下载网页资源" + strUrl + "失败");
            } finally{
             try {
             if (in != null) {
             in.reset();
             in.close();
             }
             if (urlStream != null) {
             urlStream.reset();
             urlStream.close();
             }
             if (out != null) {
             out.reset();
             out.close();
             }
             } catch (Exception e) {
             //System.out.println(e.getClass() + "下载网页资源" + strUrl + "连接关闭失败");
             } 
            }
            
            return ret;
        }
      

  2.   

    我给eclipse里面执行的程序添加JVM的参数,应该怎么做?
    我要添加的是-XX:+HeapDumpOnCtrlBreak,这个参数,可以得到程序的堆文件.黄圈里面应该选什么?
    红圈的地方应该怎么写?
    我试了很多种写法都不对.