直接内存

直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,直接内存是JVM堆外的直接向操作系统申请的内存空间。通常直接内存的读写性能更高,因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java进程占用的总内存,基本等于虚拟机堆内存+直接内存(虚拟机栈等空间消耗相比之下就很少了,可以忽略)。

JDK8的HotSpot中,元数据区就位于直接内存,我们也可以使用NIO中的Direct Buffer相关API手动分配直接内存空间来处理数据。

直接内存相关JVM参数

之前章节我们介绍过-Xms-Xmx能够指定JVM的堆内存大小,而直接内存不包含在这个参数指定的空间中,直接内存的最大值可以通过-XX:MaxDirectMemorySize参数指定。

-XX:MaxDirectMemorySize:指定直接内存的上限,默认情况下直接内存限制为最大堆内存的85%,此外直接内存的分配也受到物理内存的限制,如果分配失败会报错OutOfMemoryError

此外还需要注意的是,由于直接内存不受JVM管理,jmap等工具也无法直接查看其内存使用的情况,我们只能用Linux下的top工具或是Windows的任务管理器来查看。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap