JVM教程-11-直接内存

JVM 11 的优化指南:如何进行JVM调优,JVM调优参数有哪些 在实际的Java应用开发中,JVM(Java Virtual Machine)调优是提升应用性能的关键步骤。合理的调优可以显著提升应用的响应速度、吞吐量,并且减少内存消耗和GC(Garbage Collection)停顿时间。本文将详细介绍JVM 11的优化指南,包含如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。 阅读详情

转载:
https://www.bilibili.com/video/BV1PJ411n7xZ
参考:
https://gitee.com/moxi159753/LearningNotes/tree/master/JVM,
https://www.cnblogs.com/yanl55555/p/12623447.html

直接内存

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

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

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

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

    因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。
    Java的NIO库允许Java程序使用直接内存,用于数据缓冲区
    
/**
 * IO                  NIO (New IO / Non-Blocking IO)
 * byte[] / char[]     Buffer
 * Stream              Channel
 * <p>
 * 查看直接内存的占用与释放
 */
public class BufferTest {
    private static final int BUFFER = 1024 * 1024 * 1024;//1GB

    public static void main(String[] args) {
        //直接分配本地内存空间
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);
        System.out.println("直接内存分配完毕,请求指示!");

        Scanner scanner = new Scanner(System.in);
        scanner.next();

        System.out.println("直接内存开始释放!");
        byteBuffer = null;
        System.gc();
        scanner.next();
    }
}

在这里插入图片描述

简单理解: java process memory = java heap + native memory

非直接缓存区和缓存区

非直接缓存区(IO)

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

在这里插入图片描述

直接缓存区(NIO)

NIO的方式使用了缓存区的概念
在这里插入图片描述

直接内存异常

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

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

直接内存大小可以通过MaxDirectMemorySize设置
如果不指定,默认与堆的最大值-xmx参数值一致

在这里插入图片描述

JVM学习(11)直接内存(Direct Memory) 直接内存(Direct Memory)一、直接内存概述 一、直接内存概述 阅读详情

相关推荐

2020 宋红康 JVM 08 堆.pptx

2020 宋红康 JVM 第 08 章 学习记录PPT。本章主要是讲述 堆空间划分、分配和回收。另外包括逃逸分析相关内容

宋红康版JVM笔记

JVM上篇:内存与垃圾回收篇: 链接:https://pan.baidu.com/s/1FjOSkdf2u0K57Ord6MPXpA 提取码:cp6h 声明:该PPT文档制作者为 哔哩哔哩用户@中二黄大仙,如果PPT中缺少某页,请务必私信我,我来添加上,然后在重新分享给大家,谢谢! JVM中篇:字节码与类的加载篇: 持续更新中,敬请期待 JVM下篇:性能监控与调优篇: 持续更新中,敬请期待 ...

qq_42449963的博客 5万+

CodeBuddy 接入 MCP,一键生成网站!

2024 年 11 月,Anthropic 公司搞了个挺有意思的新玩意 - Model Context Protocol(模型上下文协议)简称为 MCP 协议。简单来说,它就是给 AI 和各类工具数据之间搭了个标准化的”桥梁”,让开发者不用再为对接问题头疼了。mcp.so如下图所示,这是 mcp.so 网站中的 MCP Server。使用百度/高德地图分析旅线计算时间接 Puppeteer 自动操作网页使用 Github/Gitlab 让大模型接管代码仓库。

悟空聊架构的专栏 1943

JVM笔记(B站宋红康课件)

JVM笔记(B站宋红康课件)

记录开发中常见的问题以及技术等 1019

U盘 未知USB设备 设定地址失败 由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案(做过系统装机盘而无法解决的必看)

U盘由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案 我们在使用U盘的时候偶尔会碰到下列情况 一般是因为传输数据的过程中,死机或未响应直接断点或拔掉设备导致的,U盘再次插上之后出现设定地址失败。无法再次读取设备的数据。 解决方案: 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损伤导致的!!! 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损...

qq_39123987的博客 13万+

绿盾注册机 使用手册

在很多涉及工程设计的单位(如建筑、模具、电路、广告等),电子图纸的应用极为普遍,而电子图纸的丢失、被盗对企业利益的影响是显而易见的,如果被竞争对手获取,甚至可能造成致命的打击。因此,对于这类企业,电子图纸的保密显得至关重要。绿盾信息安全管理软件充分考虑了电子图纸的各种可能传播途径,制定了针对性的解决方案,从而保证了电子图纸的安全。 我们总结了电子图纸的各种传播途径以及相应的对策,有如下几点:

996

【jvm】《尚硅谷宋红康JVM全套教程(详解java虚拟机)》上篇 笔记

是一个很小的内存空间,几乎可用忽略不记。也是运行速度最快的存储区域在jvm规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致任何时间一个线程都只有一个方法执行,也就是所谓的当前方法。程序计数器会存储当前方法正在执行的java方法的jvm指令地址;或者,如果是在执行native方法,则是未指定值(undefined)他是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。............

liangjiayy的博客 4035

【深大计算机网络】实验三 可靠传输机制 实验报告 附代码

【内附代码】【深大计算机网络】实验三 可靠传输机制 实验报告 附代码

m0_74268508的博客 1653

尚硅谷-宋红康-JVM上中下篇完整笔记

尚硅谷-康师傅-jvm详细笔记,欢迎转载,放心食用。

ctflq的博客 1万+

Python爬虫应对Cloudflare防护:5秒盾+Turnstile验证码实战(AST反混淆+指纹模拟,成功率95%)

Cloudflare 5秒盾+Turnstile验证码的防护核心,是通过“前端JS挑战+多维度指纹校验”确认请求来源的真实性。用AST反混淆还原CF的验证逻辑,避免执行无用代码导致的验证失败;基于真实浏览器采集指纹,确保指纹维度100%匹配真人环境;结合轻量级JS引擎和自动化工具,模拟完整的浏览器执行环境。该方案的绕过成功率可达95%(剩余5%主要是IP或请求频率导致的风控),适用于绝大多数部署CF防护的网站。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1714

《UDS协议从入门到精通(UDS速查手册)》(完结撒花版)

专栏总目录,文中介绍了UDS协议相关的基础知识和一些术语,给出了详细介绍6大类26种服务的跳转目录。

车载系统攻城狮 9万+

JVM笔记

尚硅谷宋红康JVM笔记

weixin_45979976的博客 996

[ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429

[ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429 可以使用一些编码字符来制作URI,以访问WEB-INF目录的内容和/或绕过一些安全限制。默认合规模式允许带有包含 %u002e 段的 URI 的请求访问WEB-INF目录中的受保护资源。

qq_51577576的博客 3208

JVM直接内存

04-JVM内存模型:直接内存 1.1.什么是直接内存(Derect Memory)   在内存模型最开始的章节中,我们画出了JVM的内存模型,里面并不包含直接内存,也就是说这块内存区域并不是JVM运行时数据区的一部分,但它却会被频繁的使用,原因是NIO这个包。 NIO(New input/output)是JDK1.4中新加入的类,引入了一种基于通道(channel)和缓冲区(buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过堆上的DirectByteBuffer对象对这块内

周小东 467

基于STM32的设计智慧超市管理系统(带收银系统+物联网环境监测)_167

本系统主要由超市环境监测部分和商品管理部分组成。环境监测部分主控芯片采用STM32F103C8T6,主要包括温湿度传感器、烟雾传感器和空调制热开关、空调制冷开关,采集的数据通过ESP8266模块+MQTT协议上传至OneNet云平台,在OneNet云平台设计手机和电脑版本可视化页面,能够在页面上查看超市的环境信息,还能在页面上手动打开空调制热开关和空调制冷开关。商品管理部分主要由RC522-RFID读卡器、上位机组成,实现商品选购、结算、顾客的VIP会员卡注册管理等功能。

6067

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JVM 直接内存溢出

在企业开发中可能会遇到这样一种情况,服务器报out of memory异常了,堆Dump文件却看不出问题,这个时候可考虑直接内存溢出问题,也是很容易被忽略的一个点! 直接内存 《Java虚拟机规范》并没有定义直接内存这块区域,且它也不属于语虚拟机运行时数据区 直接内存是一块由操作系统直接管理的内存,也叫堆外内存; 可以使用Unsafe或ByteBuffer分配直接内存; 可用-XX:MaxDirectMemorySize控制,默认是0,表示不限制。 ...

如切如磋,如琢如磨 976

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jvm学习——11.JVM直接内存(Direct Memory)

107 直接内存 1.直接内存不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。 2.直接内存是Java堆外的、直接向系统申请的内存区间。 3.简单理解: java process memory = java heap + native memory 示例代码: /** * IO NIO (New IO / Non-Blocking IO) * byte[] / char[] Buffer * Stream .

知北行的博客 2850

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

6. JVM直接内存

《Java直接内存解析》 直接内存是Java绕过JVM堆直接访问操作系统本地内存的机制,不受-Xmx参数限制。相较于堆内存,直接内存通过NIO操作实现高效IO(减少数据复制),但需手动管理回收。其本质是JVM向OS申请的本机内存(如Linux的mmap),适用于高频IO、大数据处理等场景。与JVM堆内存的关键区别在于:直接内存由用户代码管理,存于本机内存,不受GC管控;而堆内存由JVM管理,受GC自动回收。典型应用包括NIO网络编程和本地代码交互场景。

weixin_73692078的博客 438

JVM与直接内存分析

前言 之前在看netty的时候,不断的提到直接内存与零拷贝,所以就想看看JVM与直接内存的之间的关系; 环境准备 系统:macOS 11+ Jdk:jdk1.8 内存:16G 直接内存分析 1.直接内存与heap空间、meta空间之间的关系 Code-1:申请直接内存 //-Xmx2g -XX:+PrintGCDetails public class BufferTest1 { private static final int BUFFER = 1024 * 1

586

JVM--11---直接内存

文章目录直接内存 直接内存

时光里的博客 535

解决Netty直接内存溢出问题:从JVM参数到Netty调优指南

摘要:文章分析了Netty服务出现DirectBuffer内存耗尽的问题。虽然JVM参数MaxDirectMemorySize设置为512MB,但监控显示内存仅使用160MB就报错。原因在于Netty的PooledByteBufAllocator内存池默认配置限制。解决方案包括:调整Netty内存分配器的nDirectArena数量、maxOrder参数以增大内存池容量,关闭缓存优化内存使用,同时通过JMX和Netty内置接口进行内存监控。最终通过综合调整JVM参数和Netty配置,使内存使用稳定在300M

taizhuangzhuang的博客 1328

jvm-第11章:直接内存

1、直接内存概述 直接内存 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。 直接内存是在Java堆外的、直接向系统申请的内存区间。 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存 通常,访问直接内存的速度会优于Java堆。即读写性能高。 因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。 Java的NIO库允许Java程序使用直接内存,用于数据缓冲区 /** * IO NIO (New IO / N

u014692224的博客 241

11_直接内存

直接内存1、概述2、代码3、OOM与内存大小设置4、优缺点 1、概述 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域 直接内存是Java堆外的、直接向系统申请的内存区间 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存 通常,访问直接内存的速度会优于Java堆。即读写性能高. 因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。 Java的NIO库允许Java程序使用直接内存,用于数据缓冲区 2、代码 /** * IO

root_zhb的博客 474

【JVM】十一、直接内存

大家好,我是被白菜拱的猪。 一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy。 假如你喜欢我的文字,欢迎关注公众号“放开这颗白菜让我来”。 文章目录11-直接内存(Direct Memory)直接内存概述非直接缓冲区直接缓冲区直接内存概述 11-直接内存(Direct Memory) 直接内存概述 不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。 直接内存是在 Java 堆外的、直接向系统申请的内存空间。 来源于 NIO,通

放开这颗白菜让我来 173
上一篇: JVM教程-10-对象实例化内存布局与访问定位
下一篇: JVM教程-12-执行引擎
zgcadmin
博客等级 码龄9年 174粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值