有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java大地图冻结了我的程序

我有一张很大的地图,在那里我存储了一些对象。地图很大:大约有200k个对象。当我尝试运行一些需要读取映射值的方法时,程序冻结。当我调试它时,我的IDE似乎正在“收集数据”(图)。它从未完成这项任务

enter image description here

我有16GB内存。 我能做些什么来加快速度


共 (2) 个答案

  1. # 1 楼答案

    查看this-作为解决方案,您可以增加应用程序的堆大小:

    java -Xmx6g myprogram.

    但是它不是很好。我建议您尝试重新设计您的数据处理方法。也许您可以在获取数据之前应用一些过滤,以减小数据大小或在数据库级别实现一些计算

  2. # 2 楼答案

    我遇到了大约6100万个元素的性能问题

    import java.util.*;
    
    public class BreakingMaps{
    
    
        public static void main(String[] args){
    
                int count = Integer.MAX_VALUE>>5;
                System.out.println(count + " objects tested");
                HashMap<Long, String> set = new HashMap<>(count);
                for(long i = 0; i<count; i++){
                    Long l = i;
                    set.put(l, l.toString());
                }
    
                Random r = new Random();
                for(int i = 0; i<1000; i++){
                    long k = r.nextInt()%count;
                    k = k<0?-k:k;
                    System.out.println(set.get(k));
                }
    
            }
    
    }
    

    我用java -Xms12G -Xmx13G BreakingMaps运行程序

    我怀疑你的问题不是地图,而是地图周围的环境。如果我写的是同一个程序,但是使用了一个带有hashcode colion的类,那么这个程序就不能处理200K个元素

    static class Key{
        final long l;
        public Key(long l){
            this.l = l;
        }
    
        @Override
        public int hashCode(){
            return 1;
        }
    
        @Override
        public boolean equals(Object o){
            if(o!=null && o instanceof Key){
                return ((Key)o).l==l;
            }
            return false;
        }
    
    }