From 32433af35e2ff0ebee3ffc6413c243a4fa0148eb Mon Sep 17 00:00:00 2001 From: sunshine7058 <2564255161@qq.com> Date: Sat, 11 May 2024 18:04:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E7=BC=96=E5=86=99=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=B1=BB=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/lijie/ByteBufferCompare.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 muyu-modules/muyu-data-source/muyu-data-source-server/src/test/java/com/lijie/ByteBufferCompare.java diff --git a/muyu-modules/muyu-data-source/muyu-data-source-server/src/test/java/com/lijie/ByteBufferCompare.java b/muyu-modules/muyu-data-source/muyu-data-source-server/src/test/java/com/lijie/ByteBufferCompare.java new file mode 100644 index 0000000..d6f838d --- /dev/null +++ b/muyu-modules/muyu-data-source/muyu-data-source-server/src/test/java/com/lijie/ByteBufferCompare.java @@ -0,0 +1,64 @@ +package com.lijie; + +import java.nio.ByteBuffer; + +/** + * 直接内存 与 堆内存的比较 + */ +public class ByteBufferCompare { + + public static void main(String[] args) { + allocateCompare(); //分配比较 + operateCompare(); //读写比较 + } + + /** + * 直接内存 和 堆内存的 分配空间比较 + */ + public static void allocateCompare() { + int time = 10000000; //操作次数 + long st = System.currentTimeMillis(); + for (int i = 0; i < time; i++) { + + ByteBuffer buffer = ByteBuffer.allocate(2); //非直接内存分配申请 + } + long et = System.currentTimeMillis(); + System.out.println("在进行" + time + "次分配操作时,堆内存:分配耗时:" + (et - st) + "ms"); + long st_heap = System.currentTimeMillis(); + for (int i = 0; i < time; i++) { + ByteBuffer buffer = ByteBuffer.allocateDirect(2); //直接内存分配申请 + } + long et_direct = System.currentTimeMillis(); + System.out.println("在进行" + time + "次分配操作时,直接内存:分配耗时:" + (et_direct - st_heap) + "ms"); + } + + /** + * 直接内存 和 堆内存的 读写性能比较 + */ + public static void operateCompare() { + //如果报错修改这里,把数字改小一点 + int time = 1000000000; + ByteBuffer buffer = ByteBuffer.allocate(2 * time); + long st = System.currentTimeMillis(); + for (int i = 0; i < time; i++) { + buffer.putChar('a'); + } + buffer.flip(); + for (int i = 0; i < time; i++) { + buffer.getChar(); + } + long et = System.currentTimeMillis(); + System.out.println("在进行" + time + "次读写操作时,堆内存:读写耗时:" + (et - st) + "ms"); + ByteBuffer buffer_d = ByteBuffer.allocateDirect(2 * time); + long st_direct = System.currentTimeMillis(); + for (int i = 0; i < time; i++) { + buffer_d.putChar('a'); + } + buffer_d.flip(); + for (int i = 0; i < time; i++) { + buffer_d.getChar(); + } + long et_direct = System.currentTimeMillis(); + System.out.println("在进行" + time + "次读写操作时,直接内存:读写耗时:" + (et_direct - st_direct) + "ms"); + } +}