当前位置: 首页 > article >正文

11.直接内存

直接内存 Direct Memory

不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。

直接内存是在Java堆外的、直接向系统申请的内存区间。

来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存

通常,访问直接内存的速度会优于Java堆。即读写性能高。

  • 因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。
  • Java的NIO库允许Java程序使用直接内存,用于数据缓冲区

使用下列代码,直接分配本地内存空间

int BUFFER = 1024*1024*1024; // 1GB
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);

非直接缓存区和缓存区

原来采用BIO的架构,我们需要从用户态切换成内核态

image-20200709170907611

NIO的方式使用了缓存区的概念

存在的问题

也可能导致outofMemoryError异常

由于直接内存在Java堆外,因此它的大小不会直接受限于-xmx指定的最大堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。 缺点

  • 分配回收成本较高
  • 不受JVM内存回收管理

直接内存大小可以通过MaxDirectMemorySize设置

如果不指定,默认与堆的最大值-xmx参数值一致

image-20200709230647277


http://www.kler.cn/a/540617.html

相关文章:

  • 深度学习之神经网络框架搭建及模型优化
  • Avnet RFSoC基于maltab得5G 毫米波 开发工具箱
  • 工作中常用的jmeter自带函数有哪些?
  • JS中|=是什么意思?
  • 【CubeMX-HAL库】STM32F407—无刷电机学习笔记
  • 了解“/linux-5.4.31/drivers/of/device.c”中的of_device_get_match_data()
  • RabbitMQ 在 Spring Boot中使用方式
  • 分桶函数的使用
  • 深入理解概率密度函数和概率的关系
  • redis高级数据结构Stream
  • 控制论与信息论:维纳和香农的核心分歧在于对「信息本质」的理解
  • AntDesign X 报错:Cannot read properties of undefined (reading ‘_context‘)
  • 一个树形结构表格数据库建表语句
  • Json-RPC项目框架(二)
  • 宝珀乾坤卡罗素(Blancpain Carrousel of Yin and Yang):故宫收藏的机械艺术瑰宝
  • 【浏览器多开】Google Chrome 谷歌浏览器分身术
  • 2.4 异步回调参数捕获技巧详解
  • 使用LangChain自定义tools的三种方式
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>不同路径 III
  • c/c++蓝桥杯经典编程题100道(19)质因数分解
  • 博客项目-day02(登录功能)
  • Django在终端创建项目(pycharm Windows)
  • Ollama+Chatbox本地部署运行deepseek
  • MySQL主从同步+binlog
  • ffmpeg -demuxers
  • 《optee系统架构从入门到精通》