Why do I get an OutOfMemoryError when inserting 50,000 objects into HashMap?

前端 未结 10 1955
猫巷女王i
猫巷女王i 2021-02-01 08:12

I am trying to insert about 50,000 objects (and therefore 50,000 keys) into a java.util.HashMap. However, I keep getting an OutOfMemo

10条回答
  •  猫巷女王i
    2021-02-01 08:57

    By default, the JVM uses a limited heap space. The limit is JVM implementation-dependent, and it's not clear what JVM you are using. On OS's other than Windows, a 32-bit Sun JVM on a machine with 2 Gb or more will use a default maximum heap size of 1/4 of the physical memory, or 512 Mb in your case. However, the default for a "client" mode JVM is only 64 Mb maximum heap size, which may be what you've run into. Other vendor's JVM's may select different defaults.

    Of course, you can specify the heap limit explicitly with the -Xmxm option to java, where is the number of megabytes for the heap.

    As a rough guess, your hash table should only be using about 16 Mb, so there must be some other large objects on the heap. If you could use a Comparable key in a TreeMap, that would save some memory.

    See "Ergonomics in the 5.0 JVM" for more details.

提交回复
热议问题