java direct buffer VS non-direct buffer

伺服系统控制原理深度解析 摘要:本文系统阐述了伺服系统的控制原理与应用。首先介绍了伺服系统的定义、组成及其在工业自动化中的重要性;然后详细分析了反馈控制机制、稳定性判据和性能指标;重点推导了传递函数和状态空间两种数学模型,并通过LaTeX公式展示了二阶系统建模过程;进而对比了PID控制、状态反馈及自适应控制等方法的优缺点;最后结合数控机床等案例,验证了理论方法的有效性,并展望了伺服系统智能化发展趋势。全文兼顾理论深度与实践指导性,为控制工程领域提供了系统的技术参考。 阅读详情

原文:http://eyesmore.iteye.com/blog/1133335

在java NIO中,有两种不同的buffer:direct buffer和non-direct buffer。所谓direct buffer,就是指直接在底层分配的缓存(比如操作系统内核缓存),而non-direct buffer就是在java堆中分配的缓存,即heap buffer。

1、 劣势:创建和释放Direct Buffer的代价比Heap Buffer得要高
2、 区别:Direct Buffer不是分配在堆上的,它不被GC直接管理(但Direct Buffer的JAVA对象是归GC管理的,只要GC回收了它的JAVA对象,操作系统才会释放Direct Buffer所申请的空间),它似乎给人感觉是“内核缓冲区(buffer in kernel)”。Heap Buffer则是分配在堆上的,或者我们可以简单理解为Heap Buffer就是byte[]数组的一种封装形式,查看JAVA源代码实现,Heap Buffer也的确是这样。
3、 优势:当我们把一个Direct Buffer写入Channel的时候,就好比是“内核缓冲区”的内容直接写入了Channel,这样显然快了,减少了数据拷贝(因为我们平时的read/write都是需要在I/O设备与应用程序空间之间的“内核缓冲区”中转一下的)。而当我们把一个Heap Buffer写入Channel的时候,实际上底层实现会先构建一个临时的Direct Buffer,然后把Heap Buffer的内容复制到这个临时的Direct Buffer上,再把这个Direct Buffer写出去。当然,如果我们多次调用write方法,把一个Heap Buffer写入Channel,底层实现可以重复使用临时的Direct Buffer,这样不至于因为频繁地创建和销毁Direct Buffer影响性能。

如果我们构造一个ByteBuffer仅仅使用一次,不复用它,那么Direct Buffer和Heap Buffer没有明显的区别。两个地方我们可能通过Direct Buffer来提高性能:
1、 大文件,尽管我们Direct Buffer只用一次,但是如果内容很大,Heap Buffer的复制代价会很高,此时用Direct Buffer能提高性能。这就是为什么,当我们下载一个大文件时,服务端除了用SendFile机制,也可以用“内存映射”,把大文件映射到内存,也就是MappedByteBuffer,是一种Direct Buffer,然后把这个MappedByteBuffer直接写入SocketChannel,这样减少了数据复制,从而提高了性能。
2、 重复使用的数据,比如HTTP的错误信息,例如404呀,这些信息是每次请求,响应数据都一样的,那么我们可以把这些固定的信息预先存放在Direct Buffer中(当然部分修改Direct Buffer中的信息也可以,重要的是Direct Buffer要能被重复使用),这样把Direct Buffer直接写入SocketChannel就比写入Heap Buffer要快了。

简单的说,我们需要牢记三点:
(1) 平时的read/write,都会在I/O设备与应用程序空间之间经历一个“内核缓冲区”。
(2) Direct Buffer就好比是“内核缓冲区”上的缓存,不直接受GC管理;而Heap Buffer就仅仅是byte[]字节数组的包装形式。因此把一个Direct Buffer写入一个Channel的速度要比把一个Heap Buffer写入一个Channel的速度要快。
(3) Direct Buffer创建和销毁的代价很高,所以要用在尽可能重用的地方。

VS2022编译xlnt库 xlnt是一个用于读写Excel文件的C++库,本文介绍如何用源代码编译静态或动态xlnt库 阅读详情

相关推荐

逆向工程实战:如何一步步破解京东APP的sign签名算法(附Frida脚本)

本文详细解析了京东APP的sign签名算法逆向工程实战,通过Frida脚本动态分析Java层和Native层的多层签名机制,揭示商业应用的加密协议设计。文章提供了完整的逆向工程方法论与工具链,帮助开发者深入理解移动应用安全防护体系,提升安全防御能力。

weixin_28622215的博客 915

java directbuffer_Java中的Heap Buffer与Direct Buffer

在使用Java NIO时,会经常和ByteBuffer打交道(吐槽下,每次手动flip切换读写模式太不友好)。在空Buffer创建时,有两种方式:ByteBuffer.allocateDirect(capacity)ByteBuffer.allocate(capacity)那么这两种Buffer的分配又有什么不一样呢?Heap Buffer字面意思,在java heap上分配的内存。此块内存区域受...

weixin_35076990的博客 868

Microchip Studio 7.0 从下载到项目调试:AVR开发者的完整入门指南(附常见问题解决)

本文为AVR开发者提供了Microchip Studio 7.0从下载安装到项目调试的完整入门指南。详细介绍了如何获取安装包、创建第一个AVR工程项目,并配置编译与调试环境。同时,文章重点解决了开发过程中常见的编译错误和仿真问题,帮助开发者快速上手并高效使用这一官方集成开发环境。

joy55的博客 332

Java NIO框架中DirectBuffer搞懂只用看这一篇就够了

DirectBuffer使用不当,小心OOM

baidu_41670414的博客 980

别光看文档了!手把手带你用Habitat-Lab跑通第一个PointNav任务(附完整代码与避坑指南)

本文详细介绍了如何使用Habitat-Lab快速跑通第一个PointNav任务,包括环境配置、依赖安装、数据集下载与路径配置等关键步骤,并提供了完整的代码实现与常见问题排查指南。特别适合刚接触Habitat-Lab的开发者,帮助避开官方Quickstart未提及的坑,快速上手具身AI任务。

weixin_42662293的博客 270

VisionMaster图像源模块的5个隐藏功能:从自动切换到二次开发接口

本文深入解析了VisionMaster图像源模块的5个隐藏功能,从基础的自动切换与字符触发过滤,到高级的脚本扩展与基于COM组件的二次开发接口。这些功能能显著提升工业视觉项目的自动化水平、灵活性与系统集成能力,帮助开发者实现更高效的离线测试流水线和外部精确控制。

rgv23456789的博客 651

【Java】DirectByteBuffer 堆外内存源码解读

通过Full gc操作来触发回收堆外内存,不过我想先说的是堆外内存不会对gc造成什么影响(这里的System.gc除外),但是堆外内存的回收其实依赖于我们的gc机制,首先我们要知道在java层面和我们在堆外分配的这块内存关联的只有与之关联的DirectByteBuffer对象了,它记录了这块内存的基地址以及大小,那么既然和gc也有关,那就是gc能通过操作DirectByteBuffer对象来间接操作对应的堆外内存了。所以在后面打代码中,会进行最多9次尝试,看是否有足够的可用堆外内存来分配堆外内存。

smallbirdnq的专栏 1444

实战避坑:在STM32上移植AUTOSAR BSW时,MCAL、ECU抽象层和服务层配置有哪些常见‘雷区’?

本文深入解析在STM32上移植AUTOSAR BSW时MCAL、ECU抽象层和服务层配置的常见陷阱,包括时钟树配置差异、GPIO电气特性问题、定时器资源冲突等实战经验。特别针对AUTOSAR架构在资源受限MCU上的特殊挑战,提供具体解决方案和优化策略,帮助开发者规避移植过程中的典型错误。

weixin_30258901的博客 561

【Java】 DirectByteBuffer堆外内存回收

当GC检测到对象的可达性发生变化时,会根据是否关联了引用队列来决定是否将状态更改为Pending或者Inactive,虚引用必须与引用队列结合使用,所以对于虚引用来说,如果它实际引用的对象需要被回收,垃圾回收器会将这个虚引用对象加入到一个Pending列表中,此时处于Pending状态。引用队列结合使用,在GC进行垃圾回收的时候,如果发现一个对象只有虚引用在引用它,则认为该对象需要被回收,会将引用该对象的虚引用加入到与其关联的。

S-H_A-N 780

报错:subprocess.CalledProcessError: Command ‘[‘where‘, ‘cl‘]‘ returned non-zero exit status 1.

右键此电脑--属性--高级系统设置--环境变量--系统变量--找到Path。Enterprise是企业版,如果你是社区版就找Community。2.安装的时候,c++桌面那个需要勾选。

2301_77554343的博客 1506

Autosar MCAL-S32K324 Fls配置-基于EB

Autosar MCAL Flash配置,基于S32K324,EB软件

赞的博客 1512

Java 堆外内存及调优

直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,并非Java虚拟机规范中定义的内存区域。但是这部分内存的频繁使用,也可能导致 OutOfMemoryError 异常。直接内存的分配不受Java堆大小的限制,但是受限于本机总内存大小和处理器寻址空间。一般服务器运维人员会根据实际内存设置-Xmx等参数,但经常忽略直接内存,使得动态扩展时出现 OutOfMemeoryError 异常。JDK 1.4中加入了NIO类,引入一种基于通道(Channel)与缓冲区(Buffer)

wzz2333的博客 2094

保边滤波之Mean shift filter

保边滤波之Mean shift filter 目录 保边滤波之Mean shift filter 一、算法原理 二、练手实现的算法代码如下: 三、实现结果 一、算法原理 在OpenCV中,meanshift filter函数为 p...

大熊 1561

SenseVoice-Small语音模型在Java项目中的调用方法

本文介绍了如何在星图GPU平台自动化部署sensevoice-small-语音识别-onnx模型(带量化后),实现高效的语音识别能力。该模型专为Java项目设计,通过JNI接口集成,可广泛应用于语音指令控制、实时语音转文字等场景,提升应用交互体验与处理效率。

weixin_30336531的博客 91

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

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Ryujinx 安装教程:3 阶段从零跑通到游戏主菜单

这篇 Ryujinx 安装教程面向第一次接触模拟器的朋友,跟完你能在 3 个阶段内完成构建包解压、系统文件配置并进入某款游戏的主菜单;想读源码的开发者也可以直接复现文末的从源码编译路径。 ## 🖥️ 准入判断:什么配置能跑 先给结论:Windows 10 / macOS / Linux 的 **x64** 系统、**8 GiB** 内存、驱动至少支持 **OpenGL 4.5**,是能跑起来

gitblog_06810的博客 71

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Direct vs non-direct ByteBuffer

转载于:http://crmky.spaces.live.com/Blog/cns!8C989768DB1A6B14!458.entry?sa=254330365这两种类型的ByteBuffer相信大家都知道,但是两者的区别在什么地方呢?在不同的环境下采用哪种类型的ByteBuffer会更有效率呢?先解释一下两者的区别: Non-direct ByteBuffer内存是分配在堆上的,直接由

分布式应用与服务器架构专栏 3245

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java directbuffer_JAVA NIO之Direct Buffer 与 Heap Buffer的区别?

个人总结Direct Buffer vs. Heap Buffer1、 劣势:创建和释放Direct Buffer的代价比Heap Buffer得要高;2、 区别:Direct Buffer不是分配在堆上的,它不被GC直接管理(但Direct Buffer的JAVA对象是归GC管理的,只要GC回收了它的JAVA对象,操作系统才会释放Direct Buffer所申请的空间),它似乎给人感觉是“内...

weixin_29611239的博客 335

小师妹学JavaIO之:Buffer和Buff

小师妹在学习NIO的路上越走越远,唯一能够帮到她的就是在她需要的时候给她以全力的支持。什么都不说了,今天介绍的是NIO的基础Buffer。老铁给我上个Buff。

程序那些事 1万+

Direct Buffer vs. Heap Buffer

1、 劣势:创建和释放Direct Buffer的代价比Heap Buffer得要高; 2、 区别:Direct Buffer不是分配在堆上的,它不被GC直接管理(但Direct Buffer的JAVA对象是归GC管理的,只要GC回收了它的JAVA对象,操作系统才会释放Direct Buffer所申请的空间),它似乎给人感觉是“内核缓冲区(buffer in kernel)”。Heap Buffe

August_1989 1606

JAVA NIO之Direct Buffer 与 Heap Buffer的区别?

Direct Buffer  vs.  Heap Buffer  1、 劣势:创建和释放Direct Buffer的代价比Heap Buffer得要高;  2、 区别:Direct Buffer不是分配在堆上的,它不被GC直接管理(但Direct Buffer的JAVA对象是归GC管理的,只要GC回收了它的JAVA对象,操作系统才会释放Direct Buffer所申请的空间),它似乎给

shibushiyouwenti的专栏 5721

Direct Buffer介绍

Direct Buffer 前言 上篇文章Buffer末尾中谈到堆内Buffer(Heap Buffer)和直接Buffer(Direct Buffer)的概念,但是却一笔带过,并未涉及其细节,这篇文章继续聊聊Buffer——Direct Buffer。 Direct Buffer是什么 Direct Buffer和Heap Buffer的区别 用来干什么 Direct Buffer和JVM ...

weixin_34261739的博客 959

GitHub热榜深度观察:从项目筛选到部署发布的完整避坑指南

开源项目已成为开发者获取技术资源和工具的重要途径,GitHub Trending作为发现热门项目的窗口,其每日榜单背后反映了技术社区的真实需求。面对大量星标项目,如何科学评估其健康度?从项目更新频率、Issue活跃度、License合规性等维度入手,能为后续使用降低风险。与此同时,将项目落地运行涉及依赖管理、环境配置等关键环节,借助虚拟环境、浅克隆等技巧可规避常见陷阱。结合GitHub Pages部署静态站点及AI辅助编程工具的应用,开发者能构建从阅读到发布的高效工作流。这些方法在一次热榜观察案例中得到了完

weixin_34198881的博客 426
上一篇: 豆瓣备份工具
下一篇: 基于map-reduce的并行最短路径算法
inte_sleeper
博客等级 码龄21年 73粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值