Direct buffer memory
Direct buffer memory:主要应NIO引起的。
原因:
Java8出现了NIO,缓存,通道,选择器。在 写NIO程序的时候,经常使用ByteBuffer来读或者写入数据,这是一种基于通道( Channel)与缓冲区( Buffer)的I/0方式.它可以使用 Native函数库直接分配堆外内存,然后通过一个存做在Java里面的 DirectByteBuffer对作为这块内存的引用进行操作。可以提高性能,因为避免了在Java堆和 Native堆中来回复制数据。
ByteBuffer. allocate(capability)第一种方式是分配java堆内存,属于GC管理范围,由于需要进行拷贝,所以比较慢。
ByteBuffer. allocteDirect (capability)第一种方式是分配操作系统的本地内存,不属于GC管辖范围,由于不需要内存拷贝所以速度相对较快。但如果不断分配本地内存,堆内存很少使用,那么java虚拟机就不需要进行GC, DirectByteBuffer对象们就不会被回收,这个时候堆内存充足,但本地内存可能已经使用光了,在尝试分配本地内存就会出0ut0fMemory Error,那程序就直接奔溃了。
模拟案例:
public class ChaneDemo {public static void main(String[] args) {System.out.println("maxDirectMemorym默认大小"+VM.maxDirectMemory()/1024/1024+"MB");//分配最大本地内存是1000000MBByteBuffer byteBuffer = ByteBuffer.allocateDirect(1000000 * 1024 * 1024);}}
Direct buffer memory相关推荐
- 【Flink】Direct buffer memory taskmanager.memory.task.off-heap.size
文章目录 1.场景1 1.1 概述 2.场景2 1.场景1 1.1 概述 Direct buffer memory. The direct out-of-memory error has occurr ...
- 项目报Direct buffer memory错误
前言 最近项目中出现了Direct buffer memory,然后搜寻网上的资料,大部分的解决方案如下: 网上的解决方案 最近基于Netty的NIO做应用底层通讯架构的实现(服务发现,分布式,高可用 ...
- 【Kafka】kafka OutOfMemoryError: Direct buffer memory Java heap space
1.背景 做实验:[Kafka]Kafka如何开启SSL 控制台消费与生产 代码消费与生产 的时候,因为机器太卡导致内存溢出 java.lang.OutOfMemoryError: Direct bu ...
- jvm性能调优实战 -54Jetty NIO机制导致堆外内存溢出Direct buffer memory OOM
文章目录 Pre 案例 故障分析 关于解决OOM问题的底层技术修为的一点建议 堆外内存是如何申请的,又是如何释放的? 为什么会出现堆外内存溢出的情况? 真正的堆外内存溢出原因分析 Java NIO有这 ...
- 【Flink】Flink报错OutofMemoryError : Direct buffer memory
文章目录 1.背景 3.源码分析 2.场景2 2.1 概述 3.场景3 3.1 概述 M.参考 1.背景 错误如下
- java allocatedirect_Java中的Heap Buffer与Direct Buffer
在使用Java NIO时,会经常和ByteBuffer打交道(吐槽下,每次手动flip切换读写模式太不友好).在空Buffer创建时,有两种方式: ByteBuffer.allocateDirect( ...
- JAVA NIO之Direct Buffer 与 Heap Buffer的区别?
2019独角兽企业重金招聘Python工程师标准>>> 个人总结 Direct Buffer vs. Heap Buffer 1. 劣势:创建和释放Direct Buffer的代 ...
- kafka buffer.memory参数入门
buffer.memory Kafka的客户端发送数据到服务器,不是来一条就发一条,而是经过缓冲的,也就是说,通过KafkaProducer发送出去的消息都是先进入到客户端本地的内存缓冲里,然后把很多 ...
- java direct memory_第一讲 JVM内存四大类型:Heap,Stack,Contant,DirectMemory等
第一讲JVM内存四大类型:Heap,Stack,Contant,DirectMemory等 Stack属于栈的区域,属于每条线程私有的. 方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的 ...
最新文章
- 睡个好觉的 12 条军规
- 1015 德才论 (25分)
- [环境] OpenAI gym经典控制环境CartPole-v0 介绍
- Mac IDEA解决Maven项目命令行报错:command not found: mvn
- neo4j remove
- Node.js学习入门
- Flink CDC + Hudi + Hive + Presto 构建实时数据湖最佳实践
- vmware虚拟机安装jdk
- JAVA汉字转拼音工具类
- 网页中人民币符号的正确输入姿势
- python 保存数据为excel
- 软件配置---重装系统---品牌电脑重启快捷键表
- 季冠携“闪星服务”受邀参加2021连锁企业轻资产论坛
- 海外时事热点|两轮车租赁模式再度升级
- C++ 强制类型转换操作符(static_cast、dynamic_cast、const_cast和reinterpret_cast)
- Java的IO流之File类
- MySQL 之 扩展例子
- 【腾讯Bugly干货分享】Android 进程保活招式大全
- Android股票K线图
- opencv入门之数米粒