Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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 ConcurrentHashMap中的条目数是否有上限?_Java_Eclipse_Map - Fatal编程技术网

Java ConcurrentHashMap中的条目数是否有上限?

Java ConcurrentHashMap中的条目数是否有上限?,java,eclipse,map,Java,Eclipse,Map,我正在努力阅读一个大约有200万条记录的文件。不是所有的行都是有效的,但这是上限。我使用映射来存储文件中的键值对。然而,我发现最后一个术语在第1932513行。我正在用Java编写eclipse代码,并在eclipse.ini中增加了Xmx参数。这并没有解决问题。以下是我正在使用的代码: BufferedReader bufferedRead = new BufferedReader(inputStream); String data; try {

我正在努力阅读一个大约有200万条记录的文件。不是所有的行都是有效的,但这是上限。我使用映射来存储文件中的键值对。然而,我发现最后一个术语在第1932513行。我正在用Java编写eclipse代码,并在eclipse.ini中增加了Xmx参数。这并没有解决问题。以下是我正在使用的代码:

BufferedReader bufferedRead = new BufferedReader(inputStream);
        String data;
        try {
            while((data = bufferedRead.readLine()) != null) {
                String[] meterReadings = data.split(";");
                if("Date".equals(meterReadings[0])) continue;
/*
 *  Creating the key object using concatenation of date-time        
 */
                if(newApp.isEmpty(meterReadings)) continue;
                List<Object> valueList = new ArrayList<Object>();
                String[] subDate = meterReadings[0].split("/");
                StringBuffer dateTime = new StringBuffer();
                for(String s : subDate) {
                    dateTime.append(s + ":");
                }

                dateTime.append(meterReadings[1]);
                for(int i=2; i < meterReadings.length -1; ++i) {            
                    valueList.add(meterReadings[i]);
                }
                newApp.textMap.put(dateTime.toString(), valueList);
            }
        } catch (IOException e) {
            log.error("Unable to read from file: ", App.DATA_DIR + App.FILENAME);
            e.printStackTrace();
        }
/*
 *  Checking to see if Map has been created      
 */
        System.out.println("*****************************************");
        Set<String> newSet = newApp.textMap.keySet();
        Object[] setArray = newSet.toArray();
        System.out.println("The last term's key is : " + (String) setArray[setArray.length - 1]);
        System.out.println(newApp.textMap.size());
        log.info("The size of the reading is : ", newApp.textMap.size());
        System.out.println("*****************************************");

    }

您不想将所有这些存储在RAM中。取而代之的是,使用一个合适的可以刷新到磁盘的缓存库,比如EhCache或Infinispan。如果您进行搜索,您可以在web上的某个地方找到ConcurrentHashMap的源。检查它并找出它们在主存储设施中使用了什么—无论是单个阵列还是多个链接阵列或其他什么。然后请注意,大多数JVM对单个数组的大小都有限制,从16MB到2GB,引用数组中的一个条目通常是8字节,因此该数组的条目限制在2M到256M之间。尽管算法如何处理溢出是另一个问题。当然,整个堆是有限制的。谢谢Luiggi。我最终不打算这样做。最终目标是编写一个应用程序,因此这是一个增量。我觉得我可以处理这种效率低下的问题,因为我有一台12gb的电脑。我只想在本地测试一下我的解决方案,然后再编写一个在hadoop集群上运行的解决方案。我将查看缓存,但时间紧迫。您认为RAM是原因吗?对您的实现执行测试,并发现RAM是否真的是问题的原因。1:-Xmx和eclipse.ini中的其他JVM设置适用于运行eclipse的JVM;运行应用程序的JVM的设置位于运行/调试配置条目或应用程序使用的条目中,如果未设置,则默认设置为JRE或其他执行环境的设置。2:HashMap中的键和条目是按俗称的随机顺序排列的;它不是真正随机的,但它是不透明的,不是固定的,也不是按时间顺序或按值排列的,因此您显示的数组[length-1]条目不是最后插入的条目,也不是具有最高值的条目。