创建图片时内存溢出---java.lang.OutOfMemoryError: bitmap size exceeds VM budget

Android图片内存溢出解决方案
本文介绍了在Android应用开发过程中遇到的图片内存溢出问题及其解决方案。通过在自定义View中适当地释放Bitmap资源,避免了因图片占用过多内存而导致的java.lang.OutOfMemoryError异常。


android系统中读取位图Bitmap时.分给虚拟机中图片的堆栈大小只有8M。所以不管是如何调用的图片,太多太大虚拟机肯定会报那个错误。超出图片内存预算那个错误.:java.lang.OutOfMemoryError: bitmap size exceeds VM budget

遇到这个问题是因为没有回收资源.

public void distoryBitmap(){
    if(null!=bmb&&!bmb.isRecycled())
        bmb.recycle();
}
 

调用上面的代码可以基本解决这个问题.但是千万不要在view中的onDraw()中调用.因为onDraw()方法是系统循环调用.只要图片打开.

系统就不停的调用该方法.

最好的解决方案是在自定义的View中添加一个init()初始化方法的头部调用.或者在构造函数的顶部调用:

public class GifView extends View implements Runnable {
    private Bitmap bmb;
 
    public GifView(Context context, InputStream inputStream) {
        super(context);
        distoryBitmap();
        bmb = BitmapFactory.decodeStream(is);
    }
}
 
<think> 根据用户问题,需要解决在Maven构建的resources-production阶段(具体模块是core)出现的Java内存溢出错误(OutOfMemoryError)。该错误表明JVM分配的堆内存不足以处理当前任务。 结合引用[1]和[2],解决方案主要集中在增加内存分配上。以下将系统化地整理解决方案,并参考引用中的有效方法。 解决方案步骤: 1. **增加Maven的堆内存(针对构建过程)** 在IntelliJ IDEA中配置Maven Runner的VM选项: - 打开设置:File > Settings (Windows/Linux) 或 IntelliJ IDEA > Preferences (macOS) - 导航到:Build, Execution, Deployment > Build Tools > Maven > Runner - 在`VM Options`字段中添加:`-Xmx2048m`(或根据需要设置为4096m等更大值,例如:`-Xmx4096m`) 这样会为Maven构建过程分配更多内存。 2. **增加IDEA的堆内存(如果整个IDE运行缓慢)** 修改IDEA的虚拟机选项文件(idea64.vmoptions): - 找到该文件(通常位于IDEA安装目录的bin目录下,或用户配置目录,例如:`C:\Users\<用户名>\AppData\Roaming\JetBrains\<IDEA版本>`) - 修改或添加以下行:`-Xmx2048m`(或更高,如4096m) - 重启IDEA使配置生效。 3. **在命令行中为Maven指定内存参数** 如果不在IDEA中运行,而是使用命令行构建,可以在mvn命令中指定内存参数: ```bash mvn clean install -DargLine="-Xmx2048m" ``` 或者使用Maven的环境变量配置: ```bash export MAVEN_OPTS="-Xmx2048m" mvn clean install ``` 4. **针对资源处理插件的配置优化** 在项目的pom.xml文件中,可以对maven-resources-plugin进行配置,以增加内存或跳过资源处理(不推荐跳过): ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <!-- 使用最新版本 --> <configuration> <!-- 增加内存设置(如果插件支持) --> <useDefaultDelimiters>false</useDefaultDelimiters> <!-- 或者调整其他参数,例如过滤大文件时避免一次性加载 --> </configuration> </plugin> ``` 另外,检查是否有大量资源文件(如图片、视频等)被包含在资源目录中。如果有,考虑排除非必要的资源文件。 5. **并行构建(加快构建速度并可能减少内存峰值)** 使用Maven的并行构建功能(-T参数): ```bash mvn -T 1C clean install # 1C表示每个CPU核心一个线程 ``` 6. **检查资源文件大小和类型** 如果资源目录中包含非常大的文件(如超过几MB的二进制文件),则资源处理可能会消耗大量内存。考虑: - 将这些大文件移出资源目录,或者 - 在pom.xml中配置maven-resources-plugin来排除这些文件(使用excludes) 7. **更新Maven和插件版本** 确保使用的maven-resources-plugin版本是最新的,因为新版本可能优化了内存使用。 8. **分析内存使用** 如果上述方法都不奏效,可以使用内存分析工具(如VisualVM或Eclipse MAT)来监控Maven构建时的内存使用情况,找出内存消耗大的原因。 9. **设置环境变量(全局Maven配置)** 在系统环境变量中设置`MAVEN_OPTS`(如引用[2]中所示): - Windows: 在系统环境变量中添加变量名`MAVEN_OPTS`,值为`-Xms512m -Xmx2048m -XX:ReservedCodeCacheSize=2048m ...`(参考引用[2]中的参数) - Linux/macOS: 在`~/.bashrc`或`~/.zshrc`中添加:`export MAVEN_OPTS="-Xms512m -Xmx2048m ..."` 注意:在引用[2]中,不仅有堆内存设置(-Xmx2048m),还有其他JVM参数(如代码缓存大小、垃圾回收器等),这些参数也可以借鉴。 根据错误信息中出现的模块(core),可以尝试单独为该模块增加配置(如果它是一个子模块),或者在父pom中配置。 最后,请按照以下步骤验证: - 每次修改后重新运行构建命令。 - 如果问题仍然存在,逐步增加内存(例如从2048m增加到4096m)并再次尝试。 如果以上方法都无法解决,可能需要考虑拆分模块或优化资源文件。 相关问题: 1. 如何监控Maven构建过程中的内存使用情况? 2. 除了增加堆内存,还有哪些方法可以避免Maven构建时出现内存溢出? 3. 在大型多模块项目中,如何优化Maven构建的内存使用? </think> ### 解决 Maven `resources-production:core` 阶段内存溢出Java Heap Space)的方法 当 Maven 在 `resources-production:core` 阶段抛出 `java.lang.OutOfMemoryError: Java heap space` 错误时,表明资源处理消耗的堆内存超出 JVM 限制。以下是系统化解决方案: --- ### **1. 增加 Maven 构建内存(推荐首选)** 在 IntelliJ IDEA 中配置: 1. 打开设置: **File → Settings** (Windows/Linux) 或 **IntelliJ IDEA → Preferences** (macOS) 2. 导航路径: **Build, Execution, Deployment → Build Tools → Maven → Runner** 3. 在 **VM Options** 添加: `-Xmx4096m`(将堆内存上限设为 4GB,根据机器配置调整,如 `-Xmx2048m`) ```bash # 示例:典型配置 -Xms1024m -Xmx4096m -XX:MaxMetaspaceSize=1024m ``` --- ### **2. 增加 IntelliJ IDEA 全局内存** 修改 IDE 的 JVM 配置: 1. 找到 `idea64.vmoptions` 文件: - Windows:`C:\Users\<用户名>\AppData\Roaming\JetBrains\<IDEA版本>\idea64.vmoptions` - macOS:`/Users/<用户名>/Library/Application Support/JetBrains/<IDEA版本>/idea64.vmoptions` 2. 添加/修改以下参数: ```bash -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m ``` 3. **重启 IDEA** 生效 [^1]。 --- ### **3. 命令行构建时指定内存参数** 在终端运行 Maven 命令时添加 JVM 参数: ```bash mvn clean install -Dmaven.compiler.fork=true -DargLine="-Xmx4096m" ``` 或全局设置环境变量: ```bash # Windows set MAVEN_OPTS="-Xmx4096m -XX:+TieredCompilation" # Linux/macOS export MAVEN_OPTS="-Xmx4096m -XX:+TieredCompilation" ``` --- ### **4. 优化资源处理配置** 检查 `core` 模块的 `pom.xml`: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.0</version> <!-- 使用新版优化内存 --> <configuration> <useDefaultDelimiters>false</useDefaultDelimiters> <!-- 排除大文件 --> <excludes> <exclude>**/*.zip</exclude> <exclude>**/*.jar</exclude> </excludes> </configuration> </plugin> </plugins> </build> ``` --- ### **5. 其他关键措施** - **启用并行构建**: `mvn -T 1C clean install`(使用 CPU 核心数加速构建)[^1]。 - **检查资源文件**: 移除 `src/main/resources` 中非必需的大文件(如图片/视频)。 - **跳过资源过滤**: `mvn install -DskipTests -Dmaven.resources.skip=true`(临时验证是否资源导致)。 --- ### **验证流程** 1. 应用上述任一修改后,执行构建命令: `mvn clean install -U` 2. 监控内存使用: 添加 JVM 参数 `-XX:+PrintGCDetails` 查看 GC 日志。 3. 持续优化: 若仍失败,逐步增加 `-Xmx` 值(如 `8192m`)。 > 提示:堆内存上限(`-Xmx`)不应超过物理内存的 70%,避免系统卡顿。 --- ### 相关问题 1. Maven 多模块项目中如何为特定子模块单独配置堆内存? 2. 除了增加堆内存,还有哪些方法优化 Maven 构建速度? 3. 如何分析 Maven 构建过程中的内存泄漏问题?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值