Hazelcast
FencedLocks
应该被销毁以避免内存泄漏,但是当这些锁事先未知并且按需创建/分配(可能由多个进程)时,应该如何/何时完成?或者这些锁不应该这样使用吗?
示例:
// this method can be called by multiple concurrent processes
public void updateClient(ClientId id, ClientData data) {
var lock = this.hz.getCPSubsystem().getLock(id.toString());
lock.lock();
try {
// update the client
} finally {
lock.unlock();
}
// where should lock.destroy() be called?
}
根据文档,围栏锁相当于标准锁。
java中没有“毁灭者”。
如果没有人持有所创建的锁的任何引用,垃圾收集器将销毁该锁。
根据 POO,Hazelcast 有责任管理自己的锁。
注意不要通过在类中创建字段来保留引用并影响锁的引用。
编辑:文档说:
锁不会自动移除。如果不再使用锁,Hazelcast 不会自动在锁中执行垃圾回收。这可能会导致 OutOfMemoryError。如果您动态创建锁,请确保它们被销毁。
这很奇怪。