Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 大地图冻结了我的程序_Java - Fatal编程技术网

Java 大地图冻结了我的程序

Java 大地图冻结了我的程序,java,Java,我有一张很大的地图,在那里我存储了一些对象。地图很大:大约有200k个对象。当我尝试运行一些需要读取映射值的方法时,程序冻结。当我调试它时,我的IDE似乎正在“收集数据”(图)。它从未完成这项任务 我有16GB内存。 我可以做些什么来加快速度?看看-作为解决方案,您可以增加应用程序的堆大小: java-XMX6GmyProgram 但是它不是很好。我建议您尝试重新设计您的数据处理方法。也许您可以在获取数据之前应用一些过滤,以减小数据大小或在数据库级别执行一些计算。我遇到了大约6100万个元素的

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

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

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

java-XMX6GmyProgram


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

我遇到了大约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));
            }

        }

}

您好,在执行过程中是否在映射中插入元素?映射中存储了什么对象类型?分配给JVM的RAM有多少?你能用jconsole监控RAM的使用情况吗?(你也应该考虑地图上的物体有多大)你的地图是什么?您已经尝试了什么?您正在使用哪个jvm?对象是否正确重写equals和hashcode?这可能是大量冲突的结果。也许可以查看您的哈希代码,并尝试对其进行改进,以避免生成重复项。映射中的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;
    }

}