JVM--Java堆外内存--使用/作用
原文网址:JVM--Java堆外内存--使用/作用_IT利刃出鞘的博客-CSDN博客
简介
本文介绍Java的堆外内存。包括:堆外内存介绍、创建/回收方法、为什么堆外内存能够提升IO效率。
堆外内存简介
JVM启动时分配的内存,称为堆内存。代码中还可使用堆外内存。Memcached等等很多缓存框架都会使用堆外内存,Netty、Mina等框架提供的接口也是基于ByteBuffer封装的
堆外内存优点
提升了IO效率(减少了从堆内到堆外的数据拷贝);减小了GC压力(不参与GC,有特定的回收机制);
堆外内存缺点
分配和回收堆外内存比较耗时(解决方案:通过对象池避免频繁地创建和销毁堆外内存);
创建/回收方法
创建
ByteBuffer buffer = ByteBuffer.allocateDirect(10 * 1024 * 1024);
底层通过unsafe.allocateMemory(size)实现
设置
可指定JVM参数来确定堆外内存大小限制: -XX:MaxDirectMemorySize=512m (JVM默认64M,JRocket默认无限)。对于这种direct buffer,内存不够的时候会抛出错误: java.lang.OutOfMemoryError: Direct buffer memory
堆外内存回收
方法1:cleaner().clean()
((DirectBuffer)byteBuffer).cleaner().clean();
内部还是调用System.gc()。所以一定不要-XX:+DisableExplicitGC
方法2:调用System.gc进行full gc。
堆外内存并不直接控制于JVM,因此只能等到full GC的时候才能垃圾回收!(direct buffer归属的的JAVA对象是在堆上且能够被GC回收的,一旦它被回收,JVM将释放direct buffer的堆外空间。前提是没有关闭DisableExplicitGC)
为什么堆外内存能够提升IO效率?
因为从堆内向磁盘/网卡读写数据时,数据会被先复制到堆外内存,然后堆外内存的数据被拷贝到硬件,如下图所示,直接写入堆外内存可避免堆内到堆外的一次数据拷贝。
其他网址
Java堆外内存:堆外内存回收方法_java_hellozhxy的博客-CSDN博客
JVM--Java堆外内存--使用/作用相关推荐
- Java堆外内存泄露分析
查看堆内存占用正常,jvm垃圾回收也没有异常.而top出来显示java占用内存是几个G,那么可能想到了是堆外内存泄漏. 需要安装google-perftools工具进行分析 1.先安装g++ 不然编译 ...
- java堆外内存泄漏分析排查
JAVA堆外内存分析 文章目录 JAVA堆外内存分析 1.前言 2.准备 3.具体分析 3.1堆外溢出风险判断 3.1.1确认java进程号 3.1.2查看此java进程的jvm参数 3.1.3查看j ...
- Cassandra Java堆外内存排查经历全记录
背景 最近准备上线cassandra这个产品,同事在做一些小规格ECS(8G)的压测.压测时候比较容易触发OOM Killer,把cassandra进程干掉.问题是8G这个规格我配置的heap(Xmx ...
- 记一次Cassandra Java堆外内存排查经历
背景 最近准备上线cassandra这个产品,同事在做一些小规格ECS(8G)的压测.压测时候比较容易触发OOM Killer,把cassandra进程干掉.问题是8G这个规格我配置的heap(Xmx ...
- java 堆外内存 查看_超干货!Cassandra Java堆外内存排查经历全记录
背景 最近准备上线cassandra这个产品,同事在做一些小规格ECS(8G)的压测.压测时候比较容易触发OOM Killer,把cassandra进程干掉.问题是8G这个规格我配置的heap(Xmx ...
- Java堆外内存:堆外内存回收方法
一.JVM内存的分配及垃圾回收 对于JVM的内存规则,应该是老生常谈的东西了,这里我就简单的说下: 新生代:一般来说新创建的对象都分配在这里. 年老代:经过几次垃圾回收,新生代的对象就会放在年老代里面 ...
- java堆外内存详解(又名直接内存)和ByteBuffer
堆内内存 java的内存分为堆内内存和堆外内存,在了解堆外内存之前,先看看堆内内存是啥,堆内内存是受jvm管控的,也就是说,堆内内存由jvm负责创建和回收:创建和回收都是自动进行的,不需要人为干预: ...
- java堆外内存6_Java堆外内存排查小结
简介 JVM堆外内存难排查但经常会出现问题,这可能是目前最全的JVM堆外内存排查思路.之前的文章排版太乱,现在整理重发一下,内容是一样的. 通过本文,你应该了解: pmap 命令 gdb 命令 per ...
- Java堆外内存:堆外内存溢出问题排查
一.堆外内存组成 通常JVM的参数我们会配置 -Xms 堆初始内存 -Xmx 堆最大内存 -XX:+UseG1GC/CMS 垃圾回收器 -XX:+DisableExplicitGC 禁止显示GC ...
最新文章
- 基于OpenCV的条形码区域分割
- 3位格雷码的顺序编码_FPGA 设计之 跨时钟域(四 - 格雷码)
- 机器学习者应知的五大深度学习框架
- JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean,类中有集合类型的属性...
- mysqld已删除但仍占用空间的_Windows 10删除备份文件方法
- 程序员因拒绝带电脑回家工作被开除!获赔19.4万元
- python 量化交易_基于Python的量化交易工具清单(上)
- 3.3栈与递归的实现
- Python3 协程 + 正则 批量爬取斗鱼美女图片
- ai的预览模式切换_深耕基础办公领域,永中软件云端远程办公新模式助力企业复工复产...
- java集合详解_「软帝学院」Java进阶者专栏:集合框架详解3
- 运行elasticsearch时报错:could not find java; set JAVA_HOME or ensure java is in PATH
- python set dict tuple and list
- GRACE数据介绍及下载
- Python修改Word文件设置所有图片都居中对齐
- 世界在变化刷脸支付一直奋进
- Linux下自动重启系统
- 什么是3D摄影机,与普通摄影机有什么不同?
- js对文件和二进制操作的一些方法汇总
- python脚本模式_python脚本怎么执行