使用Android OSS最新版本库com.aliyun.dpa:oss-android-sdk:2.9.12,流式异步下载440多兆的文件下载57%左右,会导致内存溢出,无法继续下载,SDK没有报任何异常。
系统异常: Throwing OutOfMemoryError with VmSize 2623704 kB "Failed to allocate a 536870924 byte allocation with 25165824 free bytes and 236MB until OOM, max allowed footprint 313698656, growth limit 536870912"
使用如下: OSSCredentialProvider credetialProvider = SmarthomeApplication.getCredetialProvider(); OSSClient oss = new OSSClient(getApplicationContext(), endPoint, credetialProvider);
GetObjectRequest get = new GetObjectRequest(bucketName, fileName);
get.setProgressListener((request, currentSize, totalSize) -> {
});
oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {}
这个错误是由于内存溢出导致的。根据错误信息,系统尝试分配了536870924字节的内存,但是只有25165824字节可用,而且系统允许的最大_footprint为313698656字节,增长限制为536870912字节。
由于这个错误发生在使用OSSClient的getObjectRequest方法时,建议您尝试使用以下几种方法来解决这个问题:
增加OSSClient的内存分配量。您可以通过设置ossClient的设置项来增加内存分配量。例如,您可以使用以下代码设置OSSClient的内存分配量:
java
Copy code
ossClient.setConnectionPoolMaxSize(1000000);
这将设置OSSClient的最大连接池大小为1000000。
减少OSSClient的缓存。您可以通过设置OSSClient的缓存设置项来减少缓存。例如,您可以使用以下代码设置OSSClient的缓存大小:
java
Copy code
ossClient.setConnectionPoolMaxSize(1000000);
这将设置OSSClient的最大连接池大小为1000000,同时还可以设置缓存大小为0,以减少缓存。
希望这些信息能够帮助您解决问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
对象存储 OSS 是一款安全、稳定、高性价比、高性能的云存储服务,可以帮助各行业的客户在互联网应用、大数据分析、机器学习、数据归档等各种使用场景存储任意数量的数据,以及进行任意位置的访问,同时通过丰富的数据处理能力更便捷地使用数据。