1、jconsole中
当前堆大小: (实际使用)
103,645 Kb
分配的内存: (提交给操作系统的)
236,368 Kb
堆大小的最大值:
506,816 Kb
可以参考java.lang.management.MemoryUsage
引用
MemoryUsage 对象包含四个值:
init 表示 Java 虚拟机在启动期间从操作系统请求的用于内存管理的初始内存容量(以字节为单位)。Java 虚拟机可能在运行过程中从操作系统请求更多的内存,也可能将内存释放给系统。init 的值可以是不明确的。
used 表示当前已经使用的内存量(以字节为单位)。
committed 表示保证可以由 Java 虚拟机使用的内存量(以字节为单位)。已提交的内存量可以随时间而变化(增加或减少)。Java 虚拟机可能会将内存释放给系统,committed 可以小于 init。committed 将始终大于或等于 used。
max 表示可以用于内存管理的最大内存量(以字节为单位)。可以不定义其值。如果定义了该值,最大内存量可能随时间而更改。已使用的内存量和已提交的内存量将始终小于或等于 max(如果定义了 max)。如果内存分配试图增加满足以下条件的已使用内存将会失败:used > committed,即使 used <= max 仍然为 true(例如,当系统的虚拟内存不足时)。
以下是内存池的示例图:
+----------------------------------------------+
+ | +
+ | +
+----------------------------------------------+
|--------|
init
|---------------|
used
|---------------------------|
committed
|----------------------------------------------|
max
2、还有就是NIO中的Buffer 将文件部分或者全部映射到内存后进行读写 还有它的实现不是纯java的代码,而是本地(native)代码.它内存的分配不在Java的堆栈中,不受java内存回收的影响