Hi Chris,
On 12/11/2016 10:26 AM, Chris Hegarty wrote:
>"Deallocates the underlying memory associated with given directBuffer if the buffer was obtained from either {@link ByteBuffer#allocateDirect} or {@link FileChannel#map} methods. In any other case (when the buffer is not a direct buffer or was obtained by {@link ByteBuffer#duplicate() duplicating} or {@link ByteBuffer#slice(int, int) slicing} a direct buffer), the method throws {@code IllegalArgumentException}.Yes, but given a ByteBuffer it is not possible to determine if it “owns” the memory, or not. So users of the API would have to have full knowledge of the buffers they pass to it. Maybe this is ok? -Chris.
In order for deallocation to be effective and, above all, safe, user has to know the whole story of a buffer (s)he intends to deallocate and the story of all possible derived buffers. I don't believe one can create a safe program by choosing to deallocate a direct buffer for which (s)he does not know where it came from, because then (s)he also doesn't know what other buffers might still be using the same piece of memory.
Regards, Peter
