Hazelcast动态分配的FencedLocks应该如何销毁

问题描述 投票:0回答:1

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 locking hazelcast
1个回答
0
投票

根据文档,围栏锁相当于标准锁。

java中没有“毁灭者”。

如果没有人持有所创建的锁的任何引用,垃圾收集器将销毁该锁。

根据 POO,Hazelcast 有责任管理自己的锁。

注意不要通过在类中创建字段来保留引用并影响锁的引用。

编辑:文档说:

锁不会自动移除。如果不再使用锁,Hazelcast 不会自动在锁中执行垃圾回收。这可能会导致 OutOfMemoryError。如果您动态创建锁,请确保它们被销毁。

这很奇怪。

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