文章目录

  • 直接内存 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. leetcode 387 C++数组做法
  2. invoke 按钮点击_h5+ app内点击按钮实现复制功能 实现方法
  3. Socket中如何设置连接超时
  4. 首发骁龙665 小米CC9e 4+128G版到手价1199元
  5. 深入浅出CChart 每日一课——第十六课 实习之旅,百年老店之新锐WTL
  6. Cocos2dx中利用双向链表实现无限循环滚动层
  7. 计算机主机箱外面有什么区别吗,电脑主机箱后面有三个插头空 都是干什么用的啊?...
  8. 基本的 HTML 标签
  9. Building a LAMP Server
  10. java square类_java – 处理大类
  11. 二维码的制作之根据Excel数据批量制作二维码
  12. android的sd卡分区,AndroidSD卡做磁盘分区图文教程
  13. word文档自动保存方法
  14. 基于Android Q的OTA包制作/签名(包含差分包)
  15. oracle output语句,Oracle Returning 语句用法总结
  16. 组合模式 -- 树形结构处理
  17. 发票扫一扫,OCR识别功能
  18. 2020复工后刷脸支付将迎来高潮
  19. java内部模型,13 张图拆解 Java 中的内存模型
  20. Tableau豆瓣电影项目实战作业 Day4

热门文章

  1. 20170227玩呗娱乐
  2. Xcode7常见问题汇总
  3. java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContextAware
  4. php 扩展apc 参数优化
  5. 手动清除后门程序Iexplores.exe
  6. Spring学习(十)Spring常见面试题汇总
  7. Python中关于使用正则表达式相关的部分笔记
  8. 关于JavaScript处理字符串的常见操作
  9. 5月9日 python学习总结 外键、表之间的关联关系、修改表、清空表内容、复制表...
  10. ubuntu18安装mysql遇到的root密码问题