使用软引用的“实际后果”是什么?
根据番石榴的文档MapMaker.softValues()
:
警告:在大多数情况下,最好设置每个缓存的最大大小,而不要使用软引用。仅当您熟悉软引用的实际结果时,才应使用此方法。
我对软引用有一个中间的了解-
它们的行为,用途以及它们与垃圾回收的约定。但是,我想知道文档所暗示的这些实际后果是什么。为什么最好使用最大大小而不是软引用?就实现缓存而言,软引用的算法和行为是否不使它们的使用效率比硬编码上限高?
回答:
我认为他们所暗示的也是如果使用软引用映射,则应该为最大的内存使用做好准备,并且可能会有更多的gc活动,因为仅释放内存需要对gc进行引用。
如果您知道只需要高速缓存中的最后n个值,则使用LRU高速缓存是一种更精简的方法,可为正在运行的应用程序提供更多可预测的资源使用情况。
此外,根据这个,好像有-server和-client
JVM的之间行为的细微差别。
Sun
JRE确实将SoftReference与WeakReferences区别对待。如果可用内存没有压力,我们尝试保留由SoftReference引用的对象。一个细节:“-client”和“
-server” JRE的策略不同:-client JRE倾向于通过清除SoftReferences而不是扩展堆来减小占用的空间,而-server
JRE试图保持您的占用空间。通过扩大堆(如果可能)而不是清除SoftReferences,可以提高性能。一种尺寸并不适合所有尺寸。
以上是 使用软引用的“实际后果”是什么? 的全部内容, 来源链接: utcz.com/qa/403351.html