Java中的对象池

问题描述 投票:15回答:7

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

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

java memory-management garbage-collection
7个回答
19
投票

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


21
投票

优化的第一定律:不要这样做。第二定律:除非您已经实际测量并知道需要优化的事实和位置,否则不要这样做。


9
投票

池通常意味着您不能使对象不可变。这会导致防御性复制,因此最终您制作的副本要比仅制作一个新的不可变对象的副本多。


5
投票

不要。


5
投票

这完全取决于对象的创建成本,与创建它们的次数相比


3
投票

对象池通常仅是昂贵的对象(如数据库连接)的好主意。在Java 1.4.2之前,对象池可以提高性能,但是从Java 5.0对象池开始,它比帮助更可能损害性能,并且经常删除对象池以提高性能(和简便性)]


2
投票

我同意乔恩·斯基特的观点,如果您没有创建对象池的特定原因,我不会打扰。

尽管在某些情况下,池确实很有帮助/必要。如果您创建的资源昂贵,但可以重用(例如数据库连接),则使用池可能很有意义。另外,对于数据库连接,池对于防止您的应用打开过多的数据库并发连接很有用。

© www.soinside.com 2019 - 2024. All rights reserved.