Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.servlet.ServletException:java.lang.OutOfMemoryError:java堆空间_Java_Jsp_Out Of Memory_Opennlp - Fatal编程技术网

javax.servlet.ServletException:java.lang.OutOfMemoryError:java堆空间

javax.servlet.ServletException:java.lang.OutOfMemoryError:java堆空间,java,jsp,out-of-memory,opennlp,Java,Jsp,Out Of Memory,Opennlp,我想从网页上选定的文本中提取名词,并在文本显示时突出显示它们。因此,我使用OpenNLP库解析并获取名词列表。它在java类中运行良好,没有内存问题,尽管在显示输出之前花费了6-7秒,但当我在jsp页面中运行代码时,我得到以下错误: javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space org.apache.jasper.runtime.PageContextImpl.doHandl

我想从网页上选定的文本中提取名词,并在文本显示时突出显示它们。因此,我使用OpenNLP库解析并获取名词列表。它在java类中运行良好,没有内存问题,尽管在显示输出之前花费了6-7秒,但当我在jsp页面中运行代码时,我得到以下错误:

    javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:909)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:838)
    org.apache.jsp.highlightText_jsp._jspService(highlightText_jsp.java:294)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因

java.lang.OutOfMemoryError: Java heap space
    opennlp.model.AbstractModelReader.getParameters(AbstractModelReader.java:144)
    opennlp.maxent.io.GISModelReader.constructModel(GISModelReader.java:75)
    opennlp.model.GenericModelReader.constructModel(GenericModelReader.java:59)
    opennlp.model.AbstractModelReader.getModel(AbstractModelReader.java:87)
    opennlp.tools.util.model.GenericModelSerializer.create(GenericModelSerializer.java:35)
    opennlp.tools.util.model.GenericModelSerializer.create(GenericModelSerializer.java:31)
    opennlp.tools.util.model.BaseModel.loadModel(BaseModel.java:231)
    opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:181)
    opennlp.tools.postag.POSModel.<init>(POSModel.java:82)
    opennlp.tools.parser.ParserModel$POSModelSerializer.create(ParserModel.java:49)
    opennlp.tools.parser.ParserModel$POSModelSerializer.create(ParserModel.java:45)
    opennlp.tools.util.model.BaseModel.finishLoadingArtifacts(BaseModel.java:303)
    opennlp.tools.util.model.BaseModel.loadModel(BaseModel.java:240)
    opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:181)
    opennlp.tools.parser.ParserModel.<init>(ParserModel.java:152)
    model.parser.parserAction(parser.java:59)
    org.apache.jsp.highlightText_jsp._jspService(highlightText_jsp.java:143)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
所以我将它设置为-Xmx2g,但它仍然给出相同的错误。我认为我不需要修改JVM堆大小(右键单击Netbeans>Properties>Run>VM Options>set-Xmx中的project),但还是尝试了一下,但没有成功


我以前从未犯过这个错误,所以我不知道该怎么办。感谢您的帮助。

对于此类问题,您可以(也应该)使用类似的工具。它与JDK捆绑在
jdk1.8.0\u xxx\bin\jvisualvm.exe下,您可以连接到本地JVM而无需任何配置。使用该工具,您应该能够找出应用程序内存不足的位置和原因。

对于此类问题,您可以(也应该)使用类似的工具。它与JDK捆绑在
jdk1.8.0\u xxx\bin\jvisualvm.exe下,您可以连接到本地JVM而无需任何配置。使用该工具,您应该能够找出应用程序内存不足的位置和原因。

java.lang.OutOfMemoryError:当应用程序尝试向堆空间区域添加更多数据时,会触发java堆空间错误, 但空间不够。 解决java中OutOfMemoryError的一个简单方法是使用JVM选项“-Xmx512M”, 你已经试过了

在Java中解决OutOfMemoryError的第二种方法是,您可以使用Eclipse内存分析器检查堆转储,也可以使用任何探查器 比如Netbeans或JProbe

在您的例子中,当您试图从网页中提取名词并突出显示它们时。所以试着找出答案
您的代码中是否有任何循环在特定条件下会变成无限循环。

java.lang.OutOfMemoryError:当应用程序尝试向堆空间区域添加更多数据时,会触发java堆空间错误, 但空间不够。 解决java中OutOfMemoryError的一个简单方法是使用JVM选项“-Xmx512M”, 你已经试过了

在Java中解决OutOfMemoryError的第二种方法是,您可以使用Eclipse内存分析器检查堆转储,也可以使用任何探查器 比如Netbeans或JProbe

在您的例子中,当您试图从网页中提取名词并突出显示它们时。所以试着找出答案
在您的代码中是否有任何循环在特定条件下被证明是无限循环。

因为您提到即使将堆内存增加到2gb,您仍然存在问题,很明显您的代码中存在内存泄漏。未使用的对象不会取消引用,以便垃圾收集器将其删除

使用比实际需要更多的堆内存会对性能产生影响。
过度提供堆内存并不能解决您的问题。相反,它的性能会很差(暂停时间过长)。您需要使用任何探查器(Java任务控制、Java Visual VM、工具包Java探查器等)来评测代码,以查看哪个对象占用堆中更多的内存空间。如果您可以共享您的代码,那么我们将能够找到内存泄漏的确切位置。

因为您提到即使将堆内存增加到2gb,您仍然存在问题,很明显您的代码中存在内存泄漏。未使用的对象不会取消引用,以便垃圾收集器将其删除

使用比实际需要更多的堆内存会对性能产生影响。
过度提供堆内存并不能解决您的问题。相反,它的性能会很差(暂停时间过长)。您需要使用任何探查器(Java任务控制、Java Visual VM、工具包Java探查器等)来评测代码,以查看哪个对象占用堆中更多的内存空间。如果您可以共享您的代码,那么我们将能够找到内存泄漏的确切位置。

您是否尝试分析您的代码,并查看创建了哪些对象以及哪些对象使用了最大内存、内存泄漏的可能性等?您的OracleJDK附带了VisualVM,它可以让您开始使用。我猜这样做会增加NetBeans堆空间,但不会增加Tomcat堆空间。尝试使用jconsole或visualvm连接到tomcat,看看堆中有多少内存。这是否回答了您的问题?您是否尝试过分析您的代码,并查看创建了哪些对象,哪些对象使用了最大内存,内存泄漏的可能性等等?您的OracleJDK附带了VisualVM,它可以让您开始使用。我猜这样做会增加NetBeans堆空间,但不会增加Tomcat堆空间。尝试使用jconsole或visualvm连接到tomcat,看看堆中有多少内存。这是否回答了您的问题?如果应用程序可能正在泄漏内存,则增加堆大小只会延迟问题,而不会解决问题。如果应用程序可能正在泄漏内存,则增加堆大小只会延迟问题,而不会解决问题。
set CATALINA_OPTS=-Xms256m -Xmx512m