use*_*293 3 java performance jvm arraylist hashmap
我正在将XML文档读入HashMaps,ArrayLists,以便关系在内存中保持不变.我的代码完成了我的工作,但我担心我在这个巨大的地图和列表上执行的迭代或函数调用.目前我工作的xml数据并不是那么庞大.但我不知道如果有的话会发生什么.我需要在使用这些哈希映射的逻辑上执行哪些测试用例?将Java集合用于如此庞大的数据有多糟糕?他们有替代品吗?巨大的数据是否会影响JVM崩溃?
Mic*_*rdt 12
Java集合具有一定的开销,当它们是应用程序的主要数据结构并且有效负载数据由大量小对象组成时,可能会大量增加内存使用量(在极端情况下为20次).OutOfMemoryError即使实际数据远小于可用内存,这也可能导致应用程序终止.
ArrayList实际上对于大量元素非常有效,但是当您有大量空列表或仅包含一个元素时效率很低.对于这些情况,您可以使用Collections.emptyList()并Collections.singletonList()提高效率.HashMap对于存储在其中的每个元素,它具有相同的问题以及相当大的开销.所以同样的建议适用于ArrayList.如果您有大量元素,可能会有更高效的替代Map实现,例如Google Guava.int或long集合)存储在集合中时,最大的开销会发生,因为需要将其作为对象包装.在这些情况下,GNU Trove集合提供了另一种选择.