Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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_Memory_Heap Memory - Fatal编程技术网

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一个正确的开始大小,那么增加一百万的值会非常慢。