Java 包含一百万个字符串的映射
我想知道这样一张地图的总大小Java 包含一百万个字符串的映射,java,memory,heap-memory,Java,Memory,Heap Memory,我想知道这样一张地图的总大小 Map<String, String> map = new HashMap<>(); map.put(string1, string1); map.put(string2, string2); //many more lines following until 1 million entries populated to map Map Map=newhashmap(); map.put(string1,string1); map.put(
Map<String, String> map = new HashMap<>();
map.put(string1, string1);
map.put(string2, string2);
//many more lines following until 1 million entries populated to map
Map Map=newhashmap();
map.put(string1,string1);
map.put(string2,string2);
//接下来还有更多的行,直到100万个条目填充到地图
如您所见,键和值始终指向同一个字符串,并且每个字符串保证为24个字符长,仅包含小写字母和数字(0-9)。为长期查找表存储此映射(我假定为堆)是否可行?这张地图有多大?假设您的计算机有足够的可用内存,是的。hashmap可以存储超过10亿个条目(230==1073741824)。如果您想查看Java中对象的大致大小,可以查看以下问题:
您还可以使用分析工具在运行时查看大小。VisualVM、Java飞行记录器或Java任务控制您好如果您想知道Java应用程序消耗了多少内存,请尝试Java visual vm。如果JDK位于它的bin文件夹中 对于您的问题,这是一个非常糟糕的主意(如果不是为了测试目的),它将存储(地图大小)*(每个字符串中有24个字符)*(2个字符大小),
因为您的键和值总是相同的,字符串是不可变的(所有相等的字符串指针指向内存中的同一对象)。在用一百万个值填充映射后,您想对它做什么?
map.size()
正好是1000000。@Manu,因为它被标记为内存和堆内存,我假设他是在内存大小之后如果你没有给你的hashMap一个正确的开始大小,那么增加一百万的值会非常慢。