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