allocate与allocateDirect的性能测试

article/2025/11/1 14:40:16

allocate与allocateDirect的性能测试

  • 测试工具JMH
    • 测试代码
    • JMH结果
    • 结论

测试工具JMH

java基准测试框架

测试代码

在这里插入图片描述

  1. 直接分配系统内存(allocateDirect) -测试申请内存性能
  2. JVM堆分配内存(allocate)-测试申请内存性能
  3. 直接内存-操作-连续二十次添加(allocateDirect)-测试内存操作性能
  4. JVM堆内内存-操作-连续二十次添加(allocate)-测试内存操作性能

JMH结果

20次分配 20.次内存操作
Benchmark                     Mode  Cnt      Score        Error  Units
BufferTest.allocate           avgt   10   5086.543 ±     68.390  ns/op
BufferTest.directAllocate     avgt   10  63726.426 ± 119718.645  ns/op
BufferTest.useAllocate        avgt   10    302.662 ±     14.705  ns/op
BufferTest.useDirectAllocate  avgt   10   2196.836 ±   2506.495  ns/op50次分配  1000.次内存操作
Benchmark                     Mode  Cnt       Score        Error  Units
BufferTest.allocate           avgt   10   12672.956 ±    141.177  ns/op
BufferTest.directAllocate     avgt   10  165471.838 ± 293936.110  ns/op
BufferTest.useAllocate        avgt   10    5620.181 ±    266.415  ns/op
BufferTest.useDirectAllocate  avgt   10    5276.293 ±   2342.112  ns/op100次分配  10000.次内存操作
Benchmark                     Mode  Cnt       Score        Error  Units
BufferTest.allocate           avgt   10   25726.349 ±    541.906  ns/op
BufferTest.directAllocate     avgt   10  266102.441 ± 390974.870  ns/op
BufferTest.useAllocate        avgt   10   52007.219 ±    564.951  ns/op
BufferTest.useDirectAllocate  avgt   10   38908.686 ±   5446.751  ns/op

结论

其中Score字段代表平均时间 越低越好

可以看出直接内存分配效率相比极低,但在操作方面优于堆内存

20次分配 20.次内存操作
在这里插入图片描述
50次分配 1000次内存操作
在这里插入图片描述

100次分配 10000.次内存操作
在这里插入图片描述


http://chatgpt.dhexx.cn/article/t5nnUmJJ.shtml

相关文章

ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别

在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类。ByteBuffer提供了两种静态实例方式: public static ByteBuffer allocate(int capacity) public s…

8、ByteBuffer(方法演示2(allocate堆内存和allocateDirect直接内存))

ByteBuffer(方法演示2(allocate堆内存和allocateDirect直接内存)) Allocate:java堆内存:读写效率低,收到gc的影响(因为我们的java对象也是存在堆内存的) !!…

03 Java NIO allocateDirect()和allocate()区别

03 Java NIO allocateDirect和allocate区别 allocateDirect()和allocate()区别直接与非直接缓冲区直接与非直接缓冲区 源码分析 allocateDirect()和allocate()区别 allocateDirect:分配直接缓冲区,将缓冲区简历在物理内存中,可以提交效率 all…

ByteBuffer.allocate()与ByteBuffer.allocateDirect()方法的区别。

在Java中当我们要对数据进行更底层的操作时,一般是操作数据的字节(byte)形式,这时经常会用到ByteBuffer这样一个类。ByteBuffer提供了两种静态实例方式: public static ByteBuffer allocate(int capacity) public …

ByteBuffer中的allocate和allocateDirect

1、区别 allocate方法创建的内存在jvm的管理范围,而allocateDirect方法创建的内存不由jvm管理,意思就是allocateDirect创建的内存由系统直接管理 2、释放 allocateDirect创建的内存不归jvm管理,那如何释放呢?虽然这块内存不属于…

NIO ByteBuffer的allocate与allocateDirect区别(HeapByteBuffer与DirectByteBuffer的区别)

参考:https://blog.csdn.net/zhxdick/article/details/81084672 其中allocateDirect分配的字节缓冲区用中文叫做直接缓冲区(DirectByteBuffer),用allocate分配的ByteBuffer叫做堆字节缓冲区(HeapByteBuffer).. 其实根据类名就可…

【系统分析师】论文

文章目录 一、论文框架二、相关素材概览2.1 常见开发模型2.2 SOA架构 三、注意事项3.1 岗位职责3.2 项目背景3.3 理论部分讨论3.4 主体内容3.5 结论部分 四、范文4.1 开发模型主题反例正例 4.2 需求获取技术反例正例 4.3 系统测试反例正例 4.4反例正例 一、论文框架 二、相关素…

系统分析员论文12篇合集

系分论文1 企业人事信息系统的应用 【摘要】 本文讨论《企业人事信息系统》项目的需求分析方法与工具的选用。该系统的建设目标是帮助该企业管理好企业内部的人员和人员的活动,人事信息管理指的是企业员工从招聘面试到离职退休的全过程,涉及的主要活动…

系统分析师近几年论文走向

下面是整理的近几年的系统分析师考试论文题目

Java小游戏-俄罗斯方块

摘 要 随着时代的不断发展,个人电脑也在不断普及,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或工作之余休闲娱乐的首选,从最开始的Windows系统自带的黑白棋、纸牌、扫雷等游戏开始,到现在目不暇接的各种游戏&#xff0…

Java版本实现俄罗斯方块小游戏

效果预览图 视频预览: 俄罗斯方块 代码部分 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random;public class Block0011 extends JFrame implements KeyListener, ActionListener, MouseListener {// 记分int fenshu…

基于JAVA的俄罗斯方块游戏的设计与实现

目 录 1 引言 1.1 课题研究背景和意义 1.2 国内外现状分析 1.3 课题研究主要内容 1.4 论文组织结构 2 核心技术介绍 2.1 AWT技术介绍 2.2 eclipse编译器介绍 2.3 JAVA集合类技术简介 3 需求分析 3.1 游戏的设计模式 3.2 系统的设计目标 3.3 经济可行…

Java版俄罗斯方块

Java版俄罗斯方块 08年写的一个Java版俄罗斯方块程序 界面做的中规中矩,每种形状颜色都不相同 程序控制还可以,没什么大的Bug 消磨时间的时候可以Down下来玩玩 下载链接:http://download.csdn.net/user/zhaohuihua 菜单选项 也做了不少菜…

Java实现俄罗斯方块

结合网上的资料刚做完课程设计,具体代码如下: public class TetrisPanel extends JPanel{private final int[][] map new int[13][23];// map[列号][行号]。真正的方块区是:21行*10列。边框(2列,1行)// 方块的形状:// 第一维代表…

JAVA编写俄罗斯方块

JAVA编写俄罗斯方块 一.分析游戏界面 首先分析游戏界面,通过游戏界面,抽象出来几种类型。 1.Cell类型 2.Tetromino类型(七种组合的父类) 3.根据父类定义出七种T,O,I,J,L,S,Z子类型(七种组合各自成一个类都继承于父类…

Java简易俄罗斯方块

目前学到Swing第二章,这两天没有学新知识,写了个俄罗斯方块。 写之前想不好怎么实现,找来别人的程序看了一下,再加上自己的想法,做了下面这个半成品,接下来可以加上各种菜单、按钮贴图等美化,都…

使用Java实现小游戏:俄罗斯方块

使用Java实现小游戏:俄罗斯方块 使用一个二维数组保存游戏的地图: // 游戏地图格子,每个格子保存一个方块,数组纪录方块的状态 private State map[][] new State[rows][columns];游戏前先将所有地图中的格子初始化为空&#xf…

JAVA实现经典游戏俄罗斯方块

本文代码来源于B站:尚学堂 博主也在此基础上有些改动,添加了一点提示标签和窗口 本文实现的功能有: 1、 初始化游戏窗口 2、初始化游戏的界面 3、初始化游戏的说明面板 4、随机生成下落方块 5、方块下落速度变化 6、判断方块是否可以下落 7、…

自己的第一个项目--俄罗斯方块(JAVA)

一点一点写出来的程序,想跟大家分享一下自己的心得,可能有错误,还请多多包涵~ Cell类: public class Cell 定义了本游戏最基本的元素:小方块(cell)的基本参数:行,列,小方块图片: private int row;//行数 private int col;//列数 private BufferedImage image;//图片 提供无…