9/6/2013 - 3:57 AM

Direct ByteBuffer的内存查看

Direct ByteBuffer的内存查看

Java应用中经常用ByteBuffer.allocateDirect()或者Unsafe.allocateMemory()分配一段内存。 MAT等内存查看器看不到native的内存, 所以需要借助gdb等工具来查看.

ByteBuffer bb = ByteBuffer.allocateDirect(capacity)


long address = (DirectBuffer) bb).address();

$sudo gdb /home/min/software/jdk1.7.0_25/bin/java `pgrep java`
(gdb) help x
Examine memory: x/FMT ADDRESS.
ADDRESS is an expression for the memory address to examine.
FMT is a repeat count followed by a format letter and a size letter.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
  t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed
according to the format.

Defaults for format and size letters are those previously used.
Default count is 1.  Default address is following last thing printed
with this command or "print".

(gdb) x/x 140527036522496
0x7fcf0017e000: 0x00000003