int len = Integer.parseInt(String.valueOf(this.getFileLength()));//end - begin
System.out.println("int Len:"+len);
// 保存每个线程读取的数据
byte b[] = new byte[len];
System.out.println("b="+b);当执行到byte b[] = new byte[len];时抛出java.lang.reflect.InvocationTargetException
导致内存溢出java.lang.OutOfMemoryError: Java heap space而int Len已打印出来为54095475是一个51.5M文件,小于50M就可以.
大于50M就出此问题!请问,这是为什么?有什么解决办法吗?急......
System.out.println("int Len:"+len);
// 保存每个线程读取的数据
byte b[] = new byte[len];
System.out.println("b="+b);当执行到byte b[] = new byte[len];时抛出java.lang.reflect.InvocationTargetException
导致内存溢出java.lang.OutOfMemoryError: Java heap space而int Len已打印出来为54095475是一个51.5M文件,小于50M就可以.
大于50M就出此问题!请问,这是为什么?有什么解决办法吗?急......
(java.lang.reflect.InvocationTargetException 也是汤姆猫的错误)Heap size 设置在jvm的堆中,设置了java程序运行可需要的内存空间,
这个是自动设置的内存的空间起初是物理内存的1/64,
最大是1/4,可利用jvm提供的-xmn -xms等选项设置
Heap size 大小事Yuong Generartion 和 Tenured Generation
之和
手动设置Heap size
修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m或修改catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"看看可不可行..
可以改myeclisep根目录下面的myeclipse.ini文件吗???
找到java执行的地方,比如
java xxx
修改为
java -Xms1024M xxx
tomcat\bin\下就五个文件
1:bootstrap.jar
2:tomcat6.exe
3:tomcat6w.exe
4:tomcat-juli.jar
5:service.bat
加入-Xms256m -Xmx512m
多数都是下载单独的tomcat
问题还是没有解决。只有这种办法吗???
应该能够勉强可行把
修改TOMCAT_HOME/bin/catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m
是不是文件流什么的没有关闭撒
这里已经打印出来了!
主要是我tomcat\bin目录下没有catalina.bat文件。
别说找同事了,就两个搞Java的,都是装的一样的tomcat
找到配置文件中"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions的地方,修改一下JVM参数,如
"%EXECUTABLE%" //US//%SERVICE_NAME% --JvmOptions "-Xms1024M xxx(缺省的保持不变)" --StartMode jvm --StopMode jvm
我在tomcat/bin/conf/server.xml根本没有找到这些东西呀?
有1个java_opts的参数
你的绿色版的tomcat不能换一个不是绿色的啊
这个不是问题
linux平台是catalina.sh文件。我的tomcat是安装版的在conf目录下只有五个文件
1:bootstrap.jar
2:tomcat6.exe
3:tomcat6w.exe
4:tomcat-juli.jar
5:service.bat
换一个绿色版的,自己当然可以随时换,但是服务器呢?
这意味着服务器上也要跟着换,所有这个方法不可取!
不推荐使用安装版,安装版毛病很多
对,是的!但是我这个多线程下载不是在PC上有,而是手机上面!
我这个是后台,前台用的是C/C++调用后台方法,我要把数据传过去!
如果说用临时文件,同一时间有很多人下载同一个文件,
那么服务器上的临时文件相当的多,但是下载完就删了,但是没有下载完呢?
全部在服务器上,所以,这种方法不可取!
最后就采用byte[]保存所有线程下载的数据,最后一次性写入到输出流中......
在说了,服务器上的tomcat换绿色版!
那也不是我说换就可以换的呀,呵呵...
set CATALINA_OPTS=-Xms1024m
tomcat6.exe
这样的方式启动服务或者直接带参数启动
tomcat6.exe //US//Tomcat6 --JvmMs=1024 --JvmMx=1024没用过安装版的,不知道有没有 tomcat6.exe -help 之类的,查看一下帮助
-Xmx256m-Dcom.sun.management.jmxremote=true这样就可以了,对于你的方法我来试下!
D:\tools\Tomcat 6.0\bin\tomcat6.exe //US//Tomcat6 --JvmMs=1024 --JvmMx=1024
这样子不行,windows找不到文件!
不要后面的是可以启动,当然这样照样java.lang.OutOfMemoryError: Java heap space
//Tomcat6 :这个到底是指的什么...???
指的是tomcate服务
那么:D:\tools\Tomcat 6.0\bin\tomcat6.exe //US//Tomcat6 --JvmMs=1024 --JvmMx=1024
这样应该可以呀!但是提示:windows找不到文件!
那么怎样改...?
你自己看下官方网的说明吧
http://tomcat.apache.org/tomcat-6.0-doc/windows-service-howto.html
myeclipse设置的步骤是:window->preferences->MyEclipse....->Servers->Tomcat->Tomcat 6.X->JDK->Optional Java VM arguments->-Xms128m
-Xmx256m-Dcom.sun.management.jmxremote=true
这样的话每次都要通过MyEclipse来启动server,如果是直接用命令的方式就不需要myeclipse,你可以查看一下,myeclipse是怎么集成tomcat的,有什么启动脚本一类的,看看能不能找到一些线索
int len = -1;
while((len=inputstream.read(temp))!=-1){
outputstram.write(temp,0,len);
}
安装版的一样的可以设置。
你打开3:tomcat6w.exe,找到Java选项卡,找到Miximum memory pool,在里面设置,如果没有那可能是Optional Java VM arguments里面,反正可以设置环境的地方。
你看看。
这个文件中,可以设置内存,中间那个填上1024就ok了