uni-app中遇到java.lang.OutOfMemoryError: Failed to allocate a 310726600 byte allocation with 25165824

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app中遇到java.lang.OutOfMemoryError: Failed to allocate a 310726600 byte allocation with 25165824

信息类别 详情
开发环境
版本号 DISPLAY: NAM-AL00 4.2.0.135(C00E100R2P5)
ID: HUAWEINAM-AL00
TIME: 1730194739000
TAGS: release-keys
TYPE: user
项目创建方式


BOARD: NAM  
BOOTLOADER: unknown  
BRAND: HUAWEI  
CPU_ABI: arm64-v8a  
CPU_ABI2:  
DEVICE: HWNAM  
DISPLAY: NAM-AL00 4.2.0.135(C00E100R2P5)  
FINGERPRINT: HUAWEI/NAM-AL00/HWNAM:12/HUAWEINAM-AL00/104.2.0.135C00:user/release-keys  
FINGERPRINTEX: HUAWEI/NAM-AL00/HWNAM:12/HUAWEINAM-AL00/104.2.0.135C00:user/release-keys  
HARDWARE: qcom  
HOST: cn-central-hcd-2a-7785375be1730192898703-7494f9d9dc-rhfll  
HWFINGERPRINT: /NAM-LGRP1-CHN 4.2.0.135/NAM-AL00-CUST 4.2.0.100(C00)/NAM-AL00-PRELOAD 4.0.0.5(C00R2)/  
ID: HUAWEINAM-AL00  
IS_DEBUGGABLE: false  
IS_EMULATOR: false  
MANUFACTURER: HUAWEI  
MODEL: NAM-AL00  
ODM_SKU: NAM-AL00  
PERMISSIONS_REVIEW_REQUIRED: true  
PRODUCT: NAM-AL00  
RADIO: unknown  
SERIAL: unknown  
SKU: unknown  
SOC_MANUFACTURER: QTI  
SOC_MODEL: SM7325  
SUPPORTED_32_BIT_ABIS: [Ljava.lang.String;@6b31351  
SUPPORTED_64_BIT_ABIS: [Ljava.lang.String;@bc817b6  
SUPPORTED_ABIS: [Ljava.lang.String;@82fbcb7  
TAGS: release-keys  
TIME: 1730194739000  
TYPE: user  
UNKNOWN: unknown  
USER: test  


2 回复

把webpack的vuecli版本升级到5.x,node版本升级到20之后,对项目做分包优化处理。
使用自定义基座运行到安卓手机,出现了内存爆满溢出,而云打包的apk运行到手机则不会。

想到解决方案

  1. 配置app的分包优化
    https://ask.dcloud.net.cn/question/132263
    https://blog.csdn.net/qq_23207707/article/details/132080844
  2. 增加堆内存大小,不知道在哪配置

在uni-app开发中遇到java.lang.OutOfMemoryError: Failed to allocate a 310726600 byte allocation with 25165824错误,通常意味着应用试图分配的内存超出了当前可用的内存限制。这种问题可能由多种原因引起,比如一次性加载大量数据、内存泄漏、或者设备本身的内存限制较低等。

以下是一些针对此问题的代码优化和解决方案,旨在帮助减少内存使用,避免内存溢出错误:

1. 分批加载数据

如果你的应用需要处理大量数据,考虑实现分页或分批加载数据。以下是一个示例,假设你正在从服务器获取数据列表:

function loadData(page = 1, pageSize = 100) {
    uni.request({
        url: 'https://example.com/api/data',
        data: { page, pageSize },
        success: (res) => {
            const newData = res.data.items;
            // 处理新数据,例如添加到现有数据列表中
            // 注意:这里应该考虑如何有效管理内存,避免直接拼接大数据数组
        },
        fail: (err) => {
            console.error('加载数据失败', err);
        }
    });
}

2. 使用弱引用(Weak References)管理对象

虽然JavaScript本身不支持弱引用,但你可以通过设计数据结构来模拟这种效果,比如使用Map来存储临时对象,并在不需要时手动清除引用。

const cache = new Map();

function cacheData(key, data) {
    cache.set(key, data);
}

function getData(key) {
    return cache.get(key);
}

// 清除不再需要的缓存
function clearCache(key) {
    cache.delete(key);
}

3. 优化图片资源

如果错误与图片加载有关,考虑优化图片资源的大小和质量,或者实现图片懒加载。

<image v-if="showImage" :src="imageSrc" mode="widthFix"></image>
data() {
    return {
        showImage: false,
        imageSrc: ''
    };
},
methods: {
    loadImage(src) {
        this.imageSrc = src;
        this.$nextTick(() => {
            this.showImage = true; // 延迟加载图片
        });
    }
}

4. 检查和修复内存泄漏

确保在组件销毁时清理所有定时器、事件监听器和不必要的全局引用。

beforeDestroy() {
    clearTimeout(this.timer);
    this.$off('someEvent');
    // 其他清理操作
}

通过上述方法,你可以有效地管理和优化uni-app的内存使用,从而避免java.lang.OutOfMemoryError错误。如果问题依旧存在,可能需要更深入地分析应用的内存使用情况,使用工具如Android Studio的Profiler进行内存分析。

回到顶部