Relying on finalize() for native cleanup is pretty sloppy,
Its more then sloppy, its not gauranteed to work. The finalizer gets called when the object is actually collected. There is no gaurantee when
if ever an object will be collected.
Over-user of finalizers can also give you GC problems as it forces obejcts to persist beyonf the eden-space regardless of their actual lifetime.
Finalizers are bad news and really a deprecated feature. If you really need post-mortem cleanup then PhantomReferences are nominally better though even there there are no gaurantees of execution and they suffer similar GC issues.
In terms of finding native leaks there are some natvie tools you could run the VM process under to find them, such as Purify, but they arent cheap.