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