当前位置: 首页 > 面试题库 >

使用软引用的“实际后果”是什么?

华知
2023-03-14
问题内容

根据番石榴的文档MapMaker.softValues()

警告:在大多数情况下,最好设置每个缓存的最大大小,而不要使用软引用。仅当您熟悉软引用的实际结果时,才应使用此方法。

我对软引用有一个中间的了解-
它们的行为,用途以及它们与垃圾回收的约定。但是,我想知道文档所暗示的这些实际后果是什么。为什么最好使用最大大小而不是软引用?就实现缓存而言,软引用的算法和行为是否不使它们的使用效率比硬编码上限高?


问题答案:

我认为他们所暗示的也是如果使用软引用映射,则应该为最大的内存使用做好准备,并且可能会有更多的gc活动,因为仅释放内存需要对gc进行引用。

如果您知道只需要高速缓存中的最后n个值,则使用LRU高速缓存是一种更精简的方法,可为正在运行的应用程序提供更多可预测的资源使用情况。

此外,根据这个,好像有-server和-client
JVM的之间行为的细微差别。

Sun
JRE确实将SoftReference与WeakReferences区别对待。如果可用内存没有压力,我们尝试保留由SoftReference引用的对象。一个细节:“-client”和“
-server” JRE的策略不同:-client JRE倾向于通过清除SoftReferences而不是扩展堆来减小占用的空间,而-server
JRE试图保持您的占用空间。通过扩大堆(如果可能)而不是清除SoftReferences,可以提高性能。一种尺寸并不适合所有尺寸。



 类似资料:
  • 假设我的代码是这样的: 简而言之,使用add()将对象添加到ArrayList时: ArrayList是“对对象的引用”的列表,还是“实际对象”的列表???

  • 问题内容: 我有时讨厌文档(当您是初学者时)的一件事是它实际上并没有用英语描述事物。有人介意为我翻译这份文档吗?我想知道这到底如何使黑客更难以插入字符。 http://php.net/manual/zh/function.mysql-real-escape- string.php 此外,如果是这种情况,黑客将如何尝试插入字符? 问题答案: 该函数在传递给该函数的字符串中的某些潜在危险字符之前添加转

  • 问题内容: ECMAScript 6中引入的数据结构的实际用途是什么? 由于弱映射的键会对其对应的值建立强引用,因此确保只要弱键仍处于活动状态,插入到弱映射中的值就 永远不会 消失,因此不能将其用于备忘录表,缓存或通常使用弱引用,具有弱值的映射等的其他任何内容。 在我看来,这是: …只是一种回旋的说法: 我缺少哪些具体用例? 问题答案: 从根本上 WeakMaps提供了一种从外部扩展对象而不干扰垃

  • ECMAScript 6中引入的数据结构的实际用途是什么? 由于弱映射的键创建对其对应值的强引用,确保插入到弱映射中的值在其键仍处于活动状态时永远不会消失,因此它不能用于备注表、缓存或您通常使用弱引用、具有弱值的映射等的任何其他内容。 在我看来: …只是一种迂回的说法: 我缺少哪些具体的用例?

  • 问题内容: 我正在尽最大的努力来解决JavaScript闭包问题。 通过返回一个内部函数,我可以访问其直接父级中定义的任何变量。 这对我有用吗?也许我还没有完全解决这个问题。我在网上看到的大多数示例都没有提供任何真实的代码,只是模糊的示例。 有人可以告诉我现实世界中使用闭包吗? 例如这个吗? 问题答案: 我用闭包来做类似的事情: 如您所见,现在有一个对象,带有一个方法()调用,该方法仅存在于闭包内

  • 当function.identity()返回与它接收到的相同的东西时,我为什么要使用它,而不使用输入或以某种方式修改输入? 这一定有一些实际的用法,但我不知道。