About passing by reference and value
When you pass data by reference, the information transferred between the Java Proxy and the .NET side is a logical pointer to the underlying .NET object, which continues to reside on the .NET side. When you pass data by value, the transferred information contains a copy of the contents of the .NET object, which might or might not continue to reside on the .NET side after a function call. Passing by reference and value have different advantages.
Because the data object itself is typically bigger than a reference, passing an object by value takes longer than passing it by reference
A little information can be dangerous or just make your head hurt.