Fix max size per direct buffer

Direct buffer allocation size contains the page size in addition to
user specified size accoding to the environment. If user specify
Integer.MAX_VALUE to ByteBuffer#allocateDirect(int), the actual
size of direct buffer may be greater than size_t. So control direct
buffer size is taken account of the page size.
Add direct buffer deallocator

prevent user from encounting OOME(direct buffer).