内存提升后 java.lang.ref.Finalizer OutOfMemory

标签 java memory out-of-memory finalizer

提取堆转储后,我发现它有很多对象等待最终确定,其中大多数是来自 jdbc 连接等库的实例。

知道队列中的这些实例基本上都是实现 finalize() 的类,为什么它们根本没有被最终确定?

几天前,我想起了这样的例子。最初它有 1GB,新一代设置为 256 MB (-Xmx1g -XX:NewSize=256m -XX:MaxNewSize=256m)。当我们添加一些重型缓存功能时,我们将分配给该实例的内存提高到 3 GB (-Xmx3G -XX:NewSize=512m -XX:MaxNewSize=512m)。从那一刻起,我们开始看到一些内存中的东西。经过一番调查,我发现了很多 java.lang.ref.Finalizer 和等待终结的对象。

这怎么可能相互关联呢?甚至可能有关联吗?

最佳答案

why would they simply not be finalized?

某些组件需要更长的时间才能完成,尤其是涉及 IO 的任何组件。 JDBC 连接是相对较重的网络资源,因此需要更长的时间。

我建议您使用连接池(大多数 JDBC 库都内置了它们),这样您就不会一直创建/销毁它们。

注意:澄清 1Gb = 1 gig-bit 或 128 MB(兆字节)256 mb 是 256 毫位或大约 1/4 位。 -XX:NewSize=512m 是 512 MB,而不是 256 MB。并且 -XX:MaxNewSize=512 不起作用,因为它只有 512 字节,很可能您使用了 -XX:MaxNewSize=512m

3Gb 是 3 GB,但假设您指的是 3 GB,它不是 -Xmx1G,即 1 GB 或 8 Gb。

关于内存提升后 java.lang.ref.Finalizer OutOfMemory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39790902/

相关文章:

c - 如何在标准 C 中创建一个新的 char*

java - Android Java Switch 语句失败 - 堆大小?

java - 在 Android 中使用 color 和 color.darker?

java - 使用Lombok的@Cleanup时如何捕获异常?

java - java中年轻代和终身代内存的统计

android - Android 内存不足错误

C#内存不足的困惑

java - 从 jforum 2.1.6 升级到 2.1.9 后主题丢失

java - java中使用mongodb的createIndex()和ensureIndex()的区别

iphone - 尝试更改标签时出现 iOS 错误 : 'message sent to dealllocated instance' ,