Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 如果有一个始终包含300000个对象的列表,gc的性能会很差吗?_Java_Performance_Garbage Collection - Fatal编程技术网

Java 如果有一个始终包含300000个对象的列表,gc的性能会很差吗?

Java 如果有一个始终包含300000个对象的列表,gc的性能会很差吗?,java,performance,garbage-collection,Java,Performance,Garbage Collection,有一个列表一直保存着300000个对象,gc不会清理这些对象 如果jvm配置“Xmx”的值足够大,那么这个大列表会使gc的性能变差吗 我这样问是因为我想在我的应用程序中使用一个大列表和数据缓存。如果一个大列表不影响GC,那么它是最好的选择,因为jvm中的列表比其他列表(例如memcached、memory db)具有更好的性能,一般来说可能不是。GC将看到这些对象是长寿命的,并将它们移动到堆中设计用于保存长寿命对象的区域。首先,为什么要使用列表作为缓存?我想你需要大量访问这个缓存?如果是这种情况

有一个列表一直保存着300000个对象,gc不会清理这些对象

如果jvm配置“Xmx”的值足够大,那么这个大列表会使gc的性能变差吗


我这样问是因为我想在我的应用程序中使用一个大列表和数据缓存。如果一个大列表不影响GC,那么它是最好的选择,因为jvm中的列表比其他列表(例如memcached、memory db)具有更好的性能,一般来说可能不是。GC将看到这些对象是长寿命的,并将它们移动到堆中设计用于保存长寿命对象的区域。

首先,为什么要使用列表作为缓存?我想你需要大量访问这个缓存?如果是这种情况,可能需要考虑一个Map实现

关于GC性能,如果缓存的对象长时间处于引用状态,它们将自动移动到旧代(堆中的一个位置,包含长寿命对象),并且在这一代中,GC不会经常被调用,因此性能更好

如果您想了解有关JDK6的GC的更多信息,这里有一个很好的链接:

GC每次都会检查列表中对象的引用吗?这次手术要花很多时间吗?我可以在程序中使用一个大列表作为缓存吗?你们的应用程序可能会很好,现代GC非常先进。但是,为了获得完整的答案,您必须测试应用程序,看看它是否满足您的性能目标。在默认GC上,长寿命对象将以更高的时间间隔进行检查。另外,为什么要使用列表(而不是堆)作为缓存?@PaoloVictor,使用堆作为缓存是什么意思?堆中不是列表吗?我指的是堆数据结构:,但它取决于要使用的删除策略。如果您选择LRU,我建议您使用存储映射和堆来决定要删除哪些条目。“jvm中的列表比其他列表性能更好,例如memcached、memory db”——现在我很好奇:什么是列表实现?什么样的基准测试指出了这一点?@PaoloVictor,例如,一个用于简单添加和获取锁的ArrayList。我认为它有更好的性能,因为不需要序列化。那么你只是在猜测,还是做了任何测试来验证你的假设?