Java 映射大小大于分配的内存

Java 映射大小大于分配的内存,java,memory,map,size,out-of-memory,Java,Memory,Map,Size,Out Of Memory,我有8GB的内存。我使用 -Xmx7000m 比如说,我有一个12GB的文件作为输入。我读了文件,把每个单词放在地图上,每个键的值就是单词的频率。假设大多数单词都是唯一的,那么映射的大小是否会比我分配的内存大小更大 如果不是,这一错误背后可能的原因是什么 Exception in thread "Thread-0" java.lang.OutOfMemoryError: GC overhead limit exceeded at java.lang.AbstractStringBuil

我有8GB的内存。我使用

-Xmx7000m
比如说,我有一个12GB的文件作为输入。我读了文件,把每个单词放在地图上,每个键的值就是单词的频率。假设大多数单词都是唯一的,那么映射的大小是否会比我分配的内存大小更大

如果不是,这一错误背后可能的原因是什么

Exception in thread "Thread-0" java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.lang.AbstractStringBuilder.<init>(Unknown Source)
    at java.lang.StringBuilder.<init>(Unknown Source)
    at com.test.assignment2.WordCountJ.startCounting(WordCountJ.java:63)
    at com.test.assignment2.WordCountJ.prepareToCount(WordCountJ.java:35)
    at com.test.assignment2.WordCountJ.run(WordCountJ.java:23)
    at java.lang.Thread.run(Unknown Source)
线程“thread-0”java.lang.OutOfMemoryError中出现异常:超出GC开销限制 位于java.lang.AbstractStringBuilder。(未知源) 位于java.lang.StringBuilder。(未知源) 位于com.test.assignment2.WordCountJ.startCounting(WordCountJ.java:63) 在com.test.assignment2.WordCountJ.prepareToCount(WordCountJ.java:35)上 在com.test.assignment2.WordCountJ.run上(WordCountJ.java:23) 位于java.lang.Thread.run(未知源)
您可以使用内存探查器确定答案。不过,您似乎已经很好地理解了这个问题。您想知道12GB是否适合7GB?这难道不是不言自明的吗?@Jeff我的问题是——即使在一个集合中,每个字符也会占用2个字节,或者对象作为一个整体会占用更少的空间?我相当肯定这些对象实际上占用了更多的空间,尽管我目前没有任何来源支持这一说法。但是与
字符串
对象相关联的信息远远不止一组字符。