堆内存溢出--OutofMemoryError:Java heap space

本文介绍了作者在解决Java程序内存溢出问题的过程中,通过VisualVm工具分析内存使用情况,发现程序在处理大数据量时导致内存占用过高。解决方案包括调整JVM参数-Xms和-Xmx以增加分配内存,并提供了在Linux环境下部署时的命令行参数示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:这是我踩了两天的坑,得到的最终的结论,希望这篇文章能够给像我这样的小白程序猿一点帮助


原因分析:

就我当前的错误而言,我的错误在于当前运行的程序得到的内存,不支持我的程序的运行,例如:当前分给我的程序只有2G,而我的程序运行起来却用了1.8G,当运行的程序达到最大内存百分之80的时候就会出现溢出的异常

还有就是死循环,一直出创建新的对象,没有进行垃圾回收导致的溢出异常

先看一下我报的错误异常信息:


在我的思路中----------------

首先你得知道你当前运行程序用了当前内存的多少,才能知道你所需要的内存大小

这里使用的是jdk中的一个小插件----VisualVm,这个插件可以看到线程信息,内存大小,cpu等

这个插件在你本机安装jdk/bin/VisualVm.exe目录下,双击打开。

你就会看到线上运行的程序,

1.点击你的程序(1),

2.点击监视你就会看到你的内存信息(红色框框中的信息),当前内存分到。最大值为         2G,

在看蓝色的条条你就能看出当前最顶峰的时候占用的内存是多少,这也是你下边需要扩展的内存大小

怎么判断你的程序占用了多少,点击右上堆Dump ----表 ----大小 你就能看到当前操作的信息

我的是在进行byte[]添加数据库时引发的,内存溢出,你看看这个狗东西一下就用了百分之84的内存,害得我搞了两天,

现在错误原因找到了,那么就想办法进行解决吧

提示:前边说了一大堆的废话,下边就是解决办法

已经知道了,是因为分发的内存不够导致的那么就进行扩大内存

我在网上找了好多都是让我在idea路径下 help--Edit Custom Vm Options中修改 -Xms 以及 -Xmx 这两个值,当前我进行修改后并没有生效,这也是让我困惑的原因(有知道为什么的大佬请指点一下小弟

解决方案

线上解决方案:

我这个分的内存是4G,你可能根据我上边所得你的顶峰值来计算得处你的扩展的内存大小

部署环境下:Liunx下

java  -jar -Xms -Xmx  jar包

在使用 Maven 构建项目时,如果遇到 `java.lang.OutOfMemoryError: Java heap space` 错误,这通常意味着 JVM 在执行构建过程中没有足够的堆内存来完成任务。该问题的解决方法主要围绕增加 Maven 所使用的 JVM 堆内存设置。 ### 调整 Maven 的 JVM 堆内存设置 Maven 默认使用的 JVM 堆内存大小可能不足以处理大型项目或复杂的构建任务。可以通过设置 `MAVEN_OPTS` 环境变量来调整 Maven 使用的堆内存大小。例如,要将初始堆大小设置为 512MB 并将最大堆大小设置为 2GB,可以在命令行中执行以下命令: ```bash export MAVEN_OPTS="-Xms512m -Xmx2g" ``` 在 Windows 系统上,可以使用 `set` 命令代替: ```cmd set MAVEN_OPTS=-Xms512m -Xmx2g ``` 此设置将在当前的终端会话中生效。为了使设置永久生效,可以将其添加到系统的环境变量配置中。 ### 在 IDE 中调整 Maven 构建的内存设置 如果是在 Eclipse 或其他 IDE 中运行 Maven 构建,需要注意的是,`eclipse.ini` 文件中的内存设置仅影响 IDE 自身的内存分配,而不是 Maven 插件所使用的内存[^1]。因此,对于在 Eclipse 中运行的 Maven 构建,应该通过修改 Eclipse 的运行配置来增加 Maven 构建使用的内存。具体操作是点击 Eclipse 菜单中的 `Run -> Run Configurations...`,选择目标 Java 应用程序,然后在 `Arguments` 标签页下更新 VM 参数[^3]。 ### 配置 Maven Surefire 插件以避免测试阶段的内存溢出 有时候,内存不足的问题可能仅出现在执行测试阶段。在这种情况下,可以通过配置 Maven Surefire 插件来增加用于运行测试的 JVM堆内存大小。在项目的 `pom.xml` 文件中添加如下配置: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <argLine>-Xmx1024m</argLine> </configuration> </plugin> </plugins> </build> ``` 上述配置将确保每个测试用例运行时至少可以获得 1GB 的堆内存。 ### 配置 Maven Failsafe 插件以避免集成测试阶段的内存溢出 对于集成测试阶段,可以采用类似的方法配置 Maven Failsafe 插件来增加 JVM堆内存大小: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <version>3.0.0-M5</version> <configuration> <argLine>-Xmx1024m</argLine> </configuration> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ``` 通过以上方法,可以有效地解决 Maven 构建过程中遇到的 `OutOfMemoryError: Java heap space` 错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA-YYEDS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值