qq_33022109 2020-05-09 16:42 采纳率: 0%
浏览 269

Java集合中存储基本数据类型以及内存回收的问题

这是我第一次再CSDN上提问,我没有奖励可以给各位大佬,抱歉。


不好意思,我的java并不好,但靠我自己目前的水平确实无法理解java中list的某些“异常现象”,我也无法理解GC的回收机制。


下面是一段异常简单的代码:

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();

        Random random = new Random();
        long s = System.currentTimeMillis();
        long e = 0;
        while ((e - s) < 10000) {
            e = System.currentTimeMillis();
            list.clear();

            // int = random.nextInt();
            for (int i = 0; i < 10000; i++) {
                list.add(random.nextInt());
            }
        }
    }

(这只是我遇到的问题的一个简单但描述清除的模拟)


就是这么一段代码,但是这却会消耗无法想象的内存,我在我电脑上测试是达到了 826M的内存消耗。一开始我并没有注意到这个问题,因为我天真的认为我调用了 clear() ,一段时间后GC 自然就会回收 list 的内存。


我研究了很多种不同的类似版本:如分别测试arraylist和linkedlist、List中存储对象(而不是基本数据类型)、循环调用remove清空List、list中存储单个int值(像注释中那样)、list中存储单个对象引用等等


除了最后一种情况,其他任何情况都会消耗巨大的内存。希望能够有大佬能够为我解释这种情况的原因。(实际上我如果频繁调用 System.gc() 是可以回收部分内存的)以及类似需求我该如何应对?

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-09-25 17:48
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突