code: static long getBufAddress(ByteBuffer theBuffer) {
          /*
           * This only works for DIRECT byte buffers. Direct ByteBuffers have a field called "address" which
           * holds the physical address of the start of the buffer contents in native memory.
           * This method obtains the value of the address field through reflection.
           */
          if (!theBuffer.isDirect()) {
              throw new IllegalArgumentException(AsyncProperties.aio_direct_buffers_only);
          }
  
          try {
              return addrField.getLong(theBuffer);
          } catch (IllegalAccessException exception) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Error getting async provider instance, exception: " + exception.getMessage());
              }
              FFDCFilter.processException(exception, "com.ibm.io.async.AbstractAsyncChannel", "149");
              throw new RuntimeException(exception.getMessage());
          }
      }
docs: Returns the address of the start of the given direct byte buffer in
  OS memory.
  
  @param theBuffer
  the direct byte buffer.
  @return the OS address as a <code>long</code>.
  @throws IllegalArgumentException
  if the buffer is not direct.