我有一个简单的 pojo 类,包含 20 多个字段和性能敏感的代码段。为了减少分配,我重用了该类的同一实例。 如何以最高效(不安全)的方式清理对象?

如果我没有误解字段数据存储为连续的字节序列,那么我希望一定有像 System.arraycopy 一样快的东西。

类本身是稳定 API 的一部分,不可修改。

请您参考如下方法:

调用 20 个简单的 setter 是一个廉价的操作。只需要几纳秒。我很确定这不是值得优化的东西。

直接一一设置字段就已经足够优化了。理论上,使用 SIMD 指令可以更快地清除对象,但在 Java 中无法做到这一点。

有一个方法Unsafe.setMemory,但它仅适用于原始数组。这种限制是很容易理解的:通过批量操作清除具有引用字段的对象是无效的,因为不同的 GC 可能需要单独跟踪引用字段的更新。

如果你看Arrays.fill实现中,它使用一个简单的循环来逐个存储元素,并且由于上述原因,该方法甚至不是 JVM 固有的。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!