gpt4 book ai didi

java - 服务程序 : OutOfMemory Error

转载 作者:太空宇宙 更新时间:2023-11-04 15:06:40 31 4
gpt4 key购买 nike

我正在编写一个Servlet。这是我的代码:

private LinkedList <HashSet> completeHashList;
private LinkedList<String>hashStr;

@Override
public void init(ServletConfig config)
{
completeHashList = new LinkedList<HashSet>();
hashStr = new LinkedList<String>();

System.out.println("Hash Loading started");

try
{
//Read the Hash File
String str = "";
File inputFile = new File("E:/Amazon HashFile/Hash.txt");

BufferedReader br = new BufferedReader(new FileReader(inputFile));
int hashNumber=1;

while((str=br.readLine())!=null)
{
HashSet<String>lineCollector = new HashSet<String>();
int lastIndex = 0;

hashStr.add(str);

for(int i=0;i<=str.length();i=i+3)
{
lastIndex = i;
try
{
String stringPiece = str.substring(i, i+3);
// pw.println(stringPiece);
lineCollector.add(stringPiece);
}
catch(Exception arr)
{
String stringPiece = str.substring(lastIndex, str.length());
// pw.println(stringPiece);
lineCollector.add(stringPiece);
}
}

completeHashList.add(lineCollector);

System.out.println(hashNumber);
hashNumber++;
}

System.out.println("Hash Loading Done");
}
catch(Exception e)
{
e.printStackTrace();
}
}

这里我收到以下错误。

    Exception in thread "http-apr-8080-exec-2" Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: Java heap space
at java.lang.String.substring(String.java:1960)
at analyzer.SiteAnalizer.init(SiteAnalizer.java:74)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1228)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1147)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:836)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1824)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
java.lang.OutOfMemoryError: Java heap space
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:116)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1242)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1400)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1389)
at java.lang.Thread.run(Thread.java:722)

我正在读取的文件大小为77MB,Java可以轻松地将这种文件存储在内存中。我也使用该应用程序的桌面 Java 版本执行此操作。但在这里,它崩溃了!!

它的目标是代码段

如果这里错了怎么办?

除此之外,我需要在 Servlet 加载后立即运行此代码。但是一旦从 JSP 页面调用 Servlet 就会运行。这不是我需要的,Servlet 应该运行此代码并等待 doGet()doPost() 请求。

更新

我在 Netbeans 中运行它。那么如何调整Tomcat的VM Heap大小呢?

最佳答案

查看您的代码后,它非常简单,不应该引发此类错误,它可能会发生。所以我建议你看看JVM内存参数

你需要看看这个。实际上,您可以根据需要为 JVM 设置尽可能多的内存:

-Xmx2048m -> this param to set the max memory that the JVM can allocate
-Xms1024m -> the init memory that JVM will allocate on the start up
-XX:MaxPermSize=512M -> this for the max Permanent Generation memory
-XX:MaxNewSize= -> this need to be 40% from your Xmx value
-XX:NewSize=614m -> this need to be 40% from your Xmx value

而且它不是一个77MB,会加载到内存中,从你的代码中,你有3个集合

  • 完整哈希列表
  • hashStr
  • 行收集器

所有这些集合都加载相同的数据并缓存它们。

关于java - 服务程序 : OutOfMemory Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21907659/

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