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

Java中的对象池

东门茂实
2023-03-14
问题内容

维护一个经常使用的对象的池并从池中获取一个而不创建一个新对象的优点和缺点是什么。类似于字符串实习,只是所有类对象都可以使用。

例如,由于节省了gc时间和对象创建时间,因此可以认为它很好。另一方面,如果从多个线程中使用它,则可能是一个同步瓶颈,需要进行显式释放,并可能导致内存泄漏。通过占用可以回收的内存,它对垃圾收集器施加了额外的压力。


问题答案:

除非创建对象昂贵,否则我不会打扰。

好处:

  • 创建的对象更少-如果创建对象很昂贵,这可能很重要。(典型示例可能是数据库连接,其中“创建”包括与服务器建立网络连接,提供身份验证等。)

缺点:

  • 更复杂的代码
  • 共享资源=锁定;潜在的瓶颈
  • 违反了GC对对象寿命的期望(大多数对象将是短期的)

您是否有要解决的实际问题,还是这种推测?除非您的基准测试/配置文件运行表明存在问题,否则我不会考虑这样做。



 类似资料:
  • 问题内容: 我正在自学Java,这本书中的其中一项复习练习要求“对象”和“对象变量”之间的区别。 我知道什么是对象(类的特定实例),但是我似乎无法在书中的任何地方(无答案部分)或在互联网上找到术语“对象变量”。 有人知道这个名词的意思吗? 问题答案: 它是“实例变量”的同义词: 显然,该术语并不常用,最好坚持使用“实例变量”以避免任何潜在的歧义。

  • 问题内容: 我对JNI相对较新,并且掌握了使用JNI处理Java对象中的整数和数组的基本知识。现在,我正在尝试修改/访问Java对象中的Java对象。 我一直在互联网和Stack Overflow上进行搜索,但还没有找到执行该操作的方法。 这是例子。 在Java中: 在JNI中,如何通过ObjectTwo从ObjectOne访问“ buff”?我尝试过这样的事情… 我做错了什么吗? 问题答案: 在

  • 问题内容: 调试时,在Eclipse中对象值附近显示一个对象ID。 例如:28332是会话对象的ID。另一个示例:显示在“调试”面板中。这些ID既不是哈希码,也不是。 有人知道吗-如何获取对象的ID? 问题答案: 我假设它们在内部具有,为每个对象分配一个唯一的(但无意义的)整数。这应该在Eclipse调试器的内部(而不是对象具有的特殊ID)。您在问如何达到目标吗? 编辑 :我会这样设置断点(请注意

  • 问题内容: 我对垃圾收集器在Java中的工作方式有一个大致的了解,但是我销毁对象的原因不是因为我关心释放内存,而是因为功能。我可以用一个例子更好地解释: 假设我正在制作涉及金钱的游戏。当某人从地面上捡起一个物体时,我想调用该物体的方法,该方法涉及为该人的钱包添加一个值。 之后发现,我不希望别人能够把它捡起来。换句话说,我不希望自己或任何其他程序能够不经意间拨打电话: 因此,在Bob拿起钱后,它的价

  • 问题内容: 为对象 声明关键字有什么用?例如: 问题答案: 使用“ final”关键字可使您声明的变量不变。最初分配后,将无法重新分配。 但是,这不一定意味着变量引用的实例状态是不可变的,仅引用本身是不可变的。 在变量上使用“ final”关键字有几个原因。一种是优化,通过将变量声明为final来允许值被记忆。 使用最终变量的另一种情况是方法中的内部类需要访问声明方法中的变量。以下代码说明了这一点

  • 问题内容: 看一下这个例子: 如何从子对象中访问随机对象? 问题答案: 让类将自己的实例传递给该类。 经典Occam剃刀。