文章目录

  • 直接内存 Direct Memory
    • 非直接缓存区和缓存区
    • 存在的问题

直接内存 Direct Memory

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

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

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

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

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

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

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

非直接缓存区和缓存区

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

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

存在的问题

也可能导致outofMemoryError异常

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

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

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

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

11-直接内存 Direct Memory相关推荐

  1. JVM学习笔记之-对象的实例化,内存布局与访问定位,直接内存(Direct Memory)

    对象的实例化 对象的内存布局 图解 对象的访问定位 句柄访问 好处 reference中存储稳定句柄地址,对象被移动(垃圾收集时移动对象很普遍)时只会改变句柄中实例数据指针即可,reference本身 ...

  2. Thrift Direct Memory OOM问题解决方法 内存溢出问题

    Thrift Direct Memory OOM问题解决方法 内存溢出问题 参考文章: (1)Thrift Direct Memory OOM问题解决方法 内存溢出问题 (2)https://www. ...

  3. 直接内存访问 (Direct Memory Access, DMA)

    Table of Contents 直接内存访问 (Direct Memory Access, DMA) DMA 模型 设备 DMA 的类型 总线主控器 DMA 第三方 DMA 第一方 DMA 主机平 ...

  4. Tricks with Direct Memory Access in Java

    2019独角兽企业重金招聘Python工程师标准>>> Java was initially designed as a safe, managed environment. Nev ...

  5. CUDA内存类型memory

    CUDA内存类型memory 2013-09-30 10:34 4224人阅读 评论(1) 收藏 举报 分类: CUDA(106) http://www.cnblogs.com/traceorigin ...

  6. 11.JDK8内存模型、本地方法栈、虚拟机栈、栈帧结构(局部变量表、操作数栈、方法出口、虚拟机栈与本地方法栈的关系、寄存器、方法区、堆(Heap)、jvm中的常量池、Metaspace(元空间))

    11.JDK8内存模型 11.1.本地方法栈(Native Method Stacks) 11.2.虚拟机栈(Java Virtual Machine Stacks) 11.3.栈帧结构 11.3.1 ...

  7. linux 内存管理 ppt,Linux内存管理 Memory Manager.ppt

    <Linux内存管理 Memory Manager.ppt>由会员分享,可在线阅读,更多相关<Linux内存管理 Memory Manager.ppt(24页珍藏版)>请在人人 ...

  8. SQL Server 内存泄露(memory leak)——游标导致的内存问题

    原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...

  9. 内存屏障 Memory Barriers

    内存屏障 Memory Barriers 在上一篇文章中我们提到了编译时的内存序重排导致的问题以及解决方法,即添加编译器屏障或处理器屏障指令.这篇文章将探讨内存屏障的语义. 内存屏障的类型 Types ...

最新文章

  1. 2022-2028年中国碲化镉薄膜太阳能电池行业发展现状分析及投资前景趋势报告
  2. Linux中crontab定时执行python程序
  3. 《预训练周刊》第40期: 量子预训练、千层BERT与GPT
  4. rabbitmq 限制速度_技术干货分享:RabbitMQ消息积压的几种解决思路
  5. 关于select—页面中的ListBox的Javascript
  6. [shell] if else以及大于、小于、等于逻辑表达式
  7. 如果现在还要设计一个新系统,为什么选择 Kafka 而不是 RabbitMQ?
  8. 8266串口调试助手_200行Python代码实现串口调试助手(2) 界面构建
  9. Java 网络编程1
  10. Linux 文件编辑命令 详细整理
  11. java divide 用法_java中BigDecimal加减乘除基本用法
  12. 干货分享 | 史上最全Oracle体系结构整理
  13. php的类图怎么生成_PHP网站怎么划UML类图?
  14. html5画图论文结束语,基于HTML5 Canvas的画图板的设计与实现.doc
  15. linux pid t 头文件_Linux中 pid_t 类型的定义.
  16. 网站开发从陌生到了解
  17. linux发行版_看一看2020年最漂亮的Linux发行版
  18. python中减号怎么打_我的python将减号与破折号混淆
  19. nginx 配置443端口
  20. C4D学习笔记3-动画-动画渲染流程案例

热门文章

  1. C#语法之Linq查询基础一
  2. 【转载】Gradle学习 第一章:引言
  3. 跨平台移动开发_PhoneGap 使用Accelerometer 加速器
  4. android开发------Activity生命周期
  5. PHP中集成PayPal标准支付
  6. 【UESTC 594】我要长高
  7. 美团笔试最大矩形面积
  8. 洛谷 2777 [AHOI2016初中组]自行车比赛
  9. Spring MVC 向前台页面传值-ModelAndView
  10. Python -- 循环技巧(Looping Techniques)