On Sat, 21 Apr 2007 02:22:06 +0300, Patricia Shanahan <pats@acm.org> wrote:
[...]I'm assuming you do not have any explicit finalize() calls in the
constructor.
Yes, no explicit finalize() call.
According to the JLS "The completion of an object's constructor
happens-before (?17.4.5) the execution of its finalize method (in the
formal sense of happens-before)."
[12.6 Finalization of Class Instances,
http://java.sun.com/docs/books/jls/third_edition/html/execution.html#12.6]
I would start looking for exactly what resource is involved, and how
actions involved in it are synchronized.
Hm, is it possible that because JNI is involved things might be more
complicated? I'm rather guessing here but the code is pretty simple.
I'll check everything again but to give you an idea - this code fails:
for (int i = 0; i < 100000; ++i)
{
createAndReturnObject();
}
And this code works:
Vector v = new Vector(100000);
for (int i = 0; i < 100000; ++i)
{
v.add(createAndReturnObject());
}
That's why I assume that the garbage collector causes some problems
here. I don't know if JNI functions are or can be invoked on another
thread? Or the garbage collector's thread is not properly synchronized
with JNI calls? If there are any other ideas I'd like to hear them.
Boris
problem. In particular, do you ensure that the JNI work is completely