首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android studio日志中等待阻塞的GC

在Android studio日志中等待阻塞的GC
EN

Stack Overflow用户
提问于 2020-06-03 05:43:07
回答 2查看 11.6K关注 0票数 6

我有一个相当大的双数组,比如1710万个元素。我需要遍历数组,将数组划分为每个10k点的较小数组,其余的点(如果有的话)划分到最后一个片段中。

我有一个基本代码:

代码语言:javascript
运行
复制
public static boolean getSliceOfArray(double[] arr,int slice_len)
    {
        //arr: big array
        //slice_len: 10,000
        System.out.println(arr.length);
        int n_times=(arr.length/slice_len);
        int i=0;
        for(int n=0;n<n_times;n++)
        {
            Arrays.copyOfRange(arr,i,i+slice_len);
            i=i+slice_len;

        }
        System.out.println(n_times);

        if(i!=arr.length)
        {
            System.out.println( Arrays.copyOfRange(arr,i,arr.length).length);

        }

        return true;
    }

它给了我以下输出:

代码语言:javascript
运行
复制
I/System.out: 17100000
I/xample.styleap: Waiting for a blocking GC Alloc
I/xample.styleap: WaitForGcToComplete blocked Alloc on HeapTrim for 13.428ms
    Starting a blocking GC Alloc
I/xample.styleap: Waiting for a blocking GC Alloc
I/xample.styleap: WaitForGcToComplete blocked Alloc on HeapTrim for 36.867ms
I/xample.styleap: Starting a blocking GC Alloc
I/xample.styleap: Waiting for a blocking GC Alloc
I/xample.styleap: WaitForGcToComplete blocked Alloc on HeapTrim for 26.012ms
    Starting a blocking GC Alloc
I/xample.styleap: Waiting for a blocking GC Alloc
I/xample.styleap: WaitForGcToComplete blocked Alloc on HeapTrim for 32.625ms
    Starting a blocking GC Alloc
I/xample.styleap: Waiting for a blocking GC Alloc
I/xample.styleap: WaitForGcToComplete blocked Alloc on HeapTrim for 21.645ms
    Starting a blocking GC Alloc
I/System.out: 1710

当我对小得多的数组也这样做时,输出就不是这样了。为什么它显示“等待阻塞的GC分配”和这些消息?这是个严重的问题吗?JVM问题还是我的逻辑错误?

EN

Stack Overflow用户

发布于 2022-01-01 18:03:12

您的应用程序正在使用过多的堆内存(可能是动态创建对象,而不是垃圾收集),因此Java不断地尝试释放内存,但是它无法这样做,因为应用程序正在产生大量的“泄漏”。因此,基本上,您的应用程序内存需求在不断增加,因此GC警告您,因为它最终会导致崩溃。

您应该:

使用Android内存分析器分析内存allocation

  • Analyze,
  1. 对内存泄漏进行堆转储
  2. 检查(原因之一可能是太多的静态变量!)

System.gc() (如前面有人建议的那样)不会有帮助,因为您无法保证/强制GC。

与其使用标志来增加JVM args中的堆大小,我建议首先改进/编辑自己的代码基。

票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62165994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档