关于何时应该将直接缓冲区与 Java NIO 一起用于网络 I/O 的简单规则?

2023-11-22

具有以简单直接的方式解释复杂事物的天赋的人可以解决这个问题吗?使用 Java NIO 进行网络 I/O 时,为了获得最佳性能,何时应使用直接 ByteBuffer 与常规 ByteBuffer?


例如:我应该读入堆缓冲区并从那里解析它,执行多次 get() (逐字节)还是应该将其读入直接缓冲区并从直接缓冲区解析?


使用 Java NIO 进行网络 I/O 时,为了获得最佳性能,何时应使用直接 ByteBuffer 与常规 ByteBuffer?

直接缓冲区有许多优点

  • 避免在 Java 和本机内存之间传递额外的数据副本。
  • 如果重新使用它们,则只有使用过的页面才会变成真实内存。这意味着您可以将它们设置得比需要的大得多,而且它们只会浪费虚拟内存。
  • 您可以有效地按本机字节顺序访问多字节原语。 (基本上是一条机器代码指令)

我应该读入堆缓冲区并从那里解析它,执行多次 get() (逐字节)还是应该将其读入直接缓冲区并从直接缓冲区解析?

如果您一次读取一个字节,您可能不会获得太多优势。但是,使用直接字节缓冲区,您可以一次读取 2 或 4 个字节,并一次有效地解析多个字节。

[实时] [选择器]

如果您正在解析实时数据,我会避免使用选择器。我发现使用阻塞 NIO 或忙等待 NIO 可以为您提供最低的延迟性能(假设您的连接数量相对较少,例如最多 20 个)

编辑:这是一个相对易于使用的高性能库,它使用您可以利用的阻塞 NIOhttps://github.com/OpenHFT/Chronicle-Wire/tree/ea/src/main/java/net/openhft/chronicle/wire/channel

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于何时应该将直接缓冲区与 Java NIO 一起用于网络 I/O 的简单规则? 的相关文章

  • Eclipse 在源代码管理中保存操作

    我们希望找到一种在签入之前执行代码标准的 轻量级 方法 我们真的很喜欢使用 Eclipse 内置的想法保存操作 go to Preferences gt gt Java gt gt Editor gt gt Save Actions 其中有
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • react-native run-android 失败并出现错误:任务 ':app:dexDebug' 执行失败

    我使用的是 Windows 8 1 和react native cli 1 0 0 and react native 0 31 0 添加后react native maps对于该项目 我运行了命令react native upgrade并给
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • hashcode 的默认实现为以相同方式构造的对象返回不同的值

    我在这里编写一个示例代码 public class Test private int i private int j public Test TODO Auto generated constructor stub public Test
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话

随机推荐

  • 如何使用 Three.js 和 jsonLoader 制作加载屏幕?

    我有大量的纹理文件和模型要加载到我的项目中 我试图在所有内容加载时显示状态栏或某种加载屏幕 如果有人能给我任何关于如何做到这一点的信息 那就太棒了 Thanks 所需的最低代码如下 THREE DefaultLoadingManager o
  • 我如何处理帆中的独特场?

    我在模型中定义了一个独特的字段 但是当我尝试测试时 似乎它没有被帆检查 因为我得到了一个Error E UNKNOWN Encountered an unexpected error MongoError E11000 duplicate
  • 更改 TabWidget 中的文本颜色和选择器

    I ve a TabWidget 独立于 actionBar in aFragmentTabHost 我想定制的外观和感觉TabWidget但我不明白 我的目的是更改文本颜色和选择器颜色 正如您在图像中看到的那样 我可以更改文本的背景Tab
  • css 浮动及其堆栈顺序

    我正在回顾之前学过的 float 属性 我发现了一个关于浮动元素及其自己的堆叠顺序的简单问题 代码如下 示例1 box 1 background teal width 100px height 100px float left div cl
  • 有没有办法在正则表达式中执行动态替换?

    有没有办法在 C 4 0 中使用匹配中包含的文本函数进行正则表达式替换 在php中有这样的东西 reg replace hello world yay s randomfunction 0 它为每场比赛提供独立的结果 并在找到每场比赛的地方
  • “DS:[40207A]”在汇编中是什么意思?

    0040103A CALL DWORD PTR DS 40207A USER32 MessageBoxA 什么是DS mean 该指令正在从内存加载新的 EIP 值ds 40207A 即地址处有一个函数指针40207A 它推送一个返回地址
  • 将内容插入 iFrame

    我试图将一些内容插入到 空白 iFrame 中 但是没有插入任何内容 HTML JS iframe ready function var doc iframe contentWindow document var body text Tes
  • Kendo-ui MVC PopUp 编辑器:如何隐藏字段

    我正在使用 Kendo ASP NET MVC 我想对编辑表单进行一些控制 我想做的事情 隐藏我的 ID 字段 将我的属性代码和平方英尺更改为常规 TextBoxFor 字段 将购买日期和销售日期更改为 Kendo DatePickerFo
  • 使用 Comet/XMPP 与 Microsoft 堆栈上的 WebSocket 技术进行实时 Web 通知和更新的选项?

    我正在为一个项目确定架构选项 该项目将呈现用户活动 登录 照片等 的实时更新 如 Facebook 该项目的两个主要 UI 组件是一个自动更新滚动区域 其中将列出新通知 照片 等 以及一个将更新消息计数等内容的工具栏 其竞争者是基于 Jab
  • 仅允许大写和小写字母

    我只想接受用户的小写和大写字母 我尝试了下面的代码 它回显了无效字符消息 但不起作用 我的意思是它不检查 它只是显示消息 有什么帮助吗
  • d3.js 中折叠/展开树的子节点?

    我正在构建一个树结构 或者更确切地说 使用我自己的 json 中的一组数据修改其中一个示例 并且我正在尝试创建一些功能 我的树的布局是树示例中的布局 http mbostock github com d3 ex cluster html 我
  • Mathematica 快速 2D 分箱算法

    我在 Mathematica 中开发适当快速的分箱算法时遇到一些麻烦 我有一个很大的 100k 元素 数据集 其形式为 T x1 y1 z1 x2 y2 z2 我想将其分入大约 100x100 个 bin 的 2D 数组中 bin 值由每个
  • super 函数在 Maya python 模块中不起作用

    不知何故 这在 Maya Python 脚本编辑器中工作正常 但在我的模块代码内部时失败 有人有主意吗 class ControlShape object def init self args kwargs print Inside Con
  • mysql 别名的未知列问题

    我不明白为什么当该列是创建的别名时我会得到一个未知列 任何帮助都会很棒 code SELECT DISTINCT c id SUM c width feet 12 SUM c width inches AS width SUM c heig
  • 通过多个活动传递数据

    1 是我的第一个活动 主要 2 是我的第二项活动 3 是我的第三项活动 我想从 1 运行 2 然后形成 2 运行 3 然后从 3 获取数据并将其返回到 1 希望大家能理解 这是我的代码 像这样运行 2 form 1 Intent inten
  • Java RSA 中字符串中的密钥

    我在我的应用程序中使用 RSA 加密技术 为了存储生成的公钥 我将其转换为字符串 然后将其保存在数据库中 Key publicKey null Key privateKey null KeyPair keyPair RsaCrypto ge
  • 删除子图中的死角,同时保留标题和标签

    您好 我在 matlab 中遇到问题 我想创建一个包含 10 个子图的图形 2X5 方向 但问题是我想减少它们之间的死角区域 我还需要保留第一行图像的标题 xlabel 和第二行图像的 xlabel 仅 不需要 ylabel 到目前为止 我
  • Visual Studio 2015 无法与 Apache Cordova 工具一起使用

    我完整安装了 VS 2015 Enterprise Tools for Apache Cordova 当我打开或创建任何项目时 它不会构建 甚至不会在 运行 按钮上显示 Ripple 模拟器或设备信息 我已经完全重新安装了 但还是一样 当我
  • 使用网络音频 api 播放简单的声音

    我一直在尝试按照一些教程中的步骤使用按钮通过网络音频 API 播放简单的编码本地 wav 或 mp3 文件 我的代码如下 testAudioAPI js window AudioContext window AudioContext win
  • 关于何时应该将直接缓冲区与 Java NIO 一起用于网络 I/O 的简单规则?

    具有以简单直接的方式解释复杂事物的天赋的人可以解决这个问题吗 使用 Java NIO 进行网络 I O 时 为了获得最佳性能 何时应使用直接 ByteBuffer 与常规 ByteBuffer 例如 我应该读入堆缓冲区并从那里解析它 执行多