相关疑难解决方法(0)

Java垃圾收集如何与循环引用一起使用?

根据我的理解,如果没有其他东西"指向"该对象,Java中的垃圾收集会清除一些对象.

我的问题是,如果我们有这样的事情会发生什么:

class Node {
    public object value;
    public Node next;
    public Node(object o, Node n) { value = 0; next = n;}
}

//...some code
{
    Node a = new Node("a", null), 
         b = new Node("b", a), 
         c = new Node("c", b);
    a.next = c;
} //end of scope
//...other code
Run Code Online (Sandbox Code Playgroud)

a,bc应该是垃圾收集,但它们都被其他对象引用.

Java垃圾收集如何处理这个问题?(或者它只是一个内存消耗?)

java garbage-collection

148
推荐指数
6
解决办法
5万
查看次数

原子引用计数共享不可变数据是否需要内存屏障?

我有一些不可变的数据结构,我想使用引用计数来管理,在SMP系统上的线程之间共享它们.

这是发布代码的样子:

void avocado_release(struct avocado *p)
{
    if (atomic_dec(p->refcount) == 0) {
        free(p->pit);
        free(p->juicy_innards);
        free(p);
    }
}
Run Code Online (Sandbox Code Playgroud)

是否atomic_dec需要在它的内存屏障?如果是这样,什么样的记忆障碍?

附加说明:应用程序必须在PowerPC和x86上运行,因此欢迎任何特定于处理器的信息.我已经知道GCC原子内置.至于不变性,refcount是唯一在对象持续时间内发生变化的字段.

c multithreading atomic refcounting memory-barriers

12
推荐指数
2
解决办法
4968
查看次数