Java eclipse内存不足,已分配8G堆大小

Java eclipse内存不足,已分配8G堆大小,java,eclipse,memory,xml-parsing,out-of-memory,Java,Eclipse,Memory,Xml Parsing,Out Of Memory,我有一个1.5G xml文件,我使用一个DOM java解析器(解决了这个问题后,我知道DOM不是一个用于大数据的好工具,但我仍然对下面的问题感到好奇)。我的问题是“OutOfMemoryError:Java堆空间”,基于已经存在的答案,我将eclipse.ini-xms和-xmx大小都更改为8096m,并在eclispe窗口中显示堆状态,以监视使用了多少堆大小。当我运行这段代码时,它只使用了“80m/8096m”,然后抛出了“out memory”错误,我想知道为什么明显有巨大的空间没有使用,

我有一个1.5G xml文件,我使用一个DOM java解析器(解决了这个问题后,我知道DOM不是一个用于大数据的好工具,但我仍然对下面的问题感到好奇)。我的问题是“OutOfMemoryError:Java堆空间”,基于已经存在的答案,我将eclipse.ini-xms和-xmx大小都更改为8096m,并在eclispe窗口中显示堆状态,以监视使用了多少堆大小。当我运行这段代码时,它只使用了“80m/8096m”,然后抛出了“out memory”错误,我想知道为什么明显有巨大的空间没有使用,即“8096m-80m”,但仍然会导致内存不足

我想知道为什么明显有巨大的空间没有被使用,即“8096m-80m”,但仍然无法使用内存

你误解了什么。(IMO)最有可能的想法是,您混淆了IDE(Eclipse)使用的内存和用于运行应用程序的内存

除非您正在做一些奇怪的事情(而且是不可取的),否则您的应用程序将在一个单独的JVM中运行,该JVM的堆参数独立于IDE堆参数。(对我来说)EclipseIDE进程的实际内存使用量很小,这并不奇怪。。。因为那不是你的应用程序运行的地方

调整Eclipse的堆参数对应用程序JVM堆参数没有影响!实际上,您需要做的是在Eclipse启动器配置中为应用程序设置堆参数。在Eclipse中。或者,从命令提示符手动启动应用程序


但在这种情况下,我怀疑它是否会起作用。如果您可以在8GB Java堆中将1.5GB XML文件表示为DOM,我会非常惊讶。这种表现形式的开销太大了


1-如果EclipseIDE本身内存不足,它会变得非常慢,然后崩溃。我去过那里。我看到了。如果您正在开发或检查非常大的代码库,通常会发生这种情况

我想知道为什么明显有巨大的空间没有被使用,即“8096m-80m”,但仍然无法使用内存

你误解了什么。(IMO)最有可能的想法是,您混淆了IDE(Eclipse)使用的内存和用于运行应用程序的内存

除非您正在做一些奇怪的事情(而且是不可取的),否则您的应用程序将在一个单独的JVM中运行,该JVM的堆参数独立于IDE堆参数。(对我来说)EclipseIDE进程的实际内存使用量很小,这并不奇怪。。。因为那不是你的应用程序运行的地方

调整Eclipse的堆参数对应用程序JVM堆参数没有影响!实际上,您需要做的是在Eclipse启动器配置中为应用程序设置堆参数。在Eclipse中。或者,从命令提示符手动启动应用程序


但在这种情况下,我怀疑它是否会起作用。如果您可以在8GB Java堆中将1.5GB XML文件表示为DOM,我会非常惊讶。这种表现形式的开销太大了



1-如果EclipseIDE本身内存不足,它会变得非常慢,然后崩溃。我去过那里。我看到了。如果您正在开发或检查非常大的代码库,通常会发生这种情况。

“Bug”?不,您的代码正在执行此操作。尝试使用Visual VM之类的工具分析代码,以查看内存消耗的位置。如果是您的程序使用了所有内存,而不是eclipse,则需要更改eclipse用于运行您的程序的VM参数,而不是eclipse本身的VM参数。请参阅如何为1.5 GB xml和-Xmx8096m执行此操作。如果您的代码仍然抛出OOME,那么我几乎可以肯定代码中存在需要改进的地方。通常对于大型数据类型,SAX解析更好。另外,如何指定Xmx?你能告诉我们吗?你说,你需要修改运行你的程序的JVM,而不是运行EclipseA1.5GB xml文件的JVM?SAX解析器可能是更好的选择。DOM解析器必须将所有数据和元数据加载到内存中。这可能会占用大量内存。另一方面,SAX是一个事件驱动的解析器。因此,它一次只需将该xml文件的一部分加载到内存中。如果没有特殊的理由让你将整个文件加载到内存中,我会避免它…“Bug”?不,您的代码正在执行此操作。尝试使用Visual VM之类的工具分析代码,以查看内存消耗的位置。如果是您的程序使用了所有内存,而不是eclipse,则需要更改eclipse用于运行您的程序的VM参数,而不是eclipse本身的VM参数。请参阅如何为1.5 GB xml和-Xmx8096m执行此操作。如果您的代码仍然抛出OOME,那么我几乎可以肯定代码中存在需要改进的地方。通常对于大型数据类型,SAX解析更好。另外,如何指定Xmx?你能告诉我们吗?你说,你需要修改运行你的程序的JVM,而不是运行EclipseA1.5GB xml文件的JVM?SAX解析器可能是更好的选择。DOM解析器必须将所有数据和元数据加载到内存中。这可能会占用大量内存。另一方面,SAX是一个事件驱动的解析器。因此,它一次只需将该xml文件的一部分加载到内存中。如果没有特殊的理由让你将整个文件加载到内存中,我会避免它…感谢你的解决方案,这是有意义的!我仍然有两件困惑的事情:1。如何在eclipse中设置jvm内存,请具体说明2。jvm和eclipse内存的区别是什么,存储在jvm内存中的变量,然后eclipse内存用于什么?1)。2) 就像你有两辆车一样。他们有两个油箱。你把汽油放在一辆车的油箱里,而它不在另一辆车的油箱里。运行Eclipse的JVM与运行应用程序的JVM不同