I'm thinking of all the problems that can come up because of C generated temporaries. I guess that if all the C code is required to always refer to the objects through a global indirection table (so the C compiler can see that its entries could change after calls to Java functions) then you would be safe. Still, the C code is not going to be very idiomatic C.