java直接内存与堆内存的比较
来源:互联网 发布:私有密码算法范畴 编辑:程序博客网 时间:2024/04/30 03:23
对于nio这个库可以直接操作内存的使用,可以做个对比,看哪种情况下适合使用。
import java.nio.ByteBuffer;public class AccessDirectBuffer { //直接分配内存 public static void directAccess() { long startTime = System.currentTimeMillis(); ByteBuffer b = ByteBuffer.allocateDirect(500); for (int i = 0; i < 100000; i++) { for (int j = 0; j < 99; j++) b.putInt(j); b.flip(); for (int j = 0; j < 99; j++) b.getInt(); b.clear(); } long endTime = System.currentTimeMillis(); System.out.println("directAccess:" + (endTime - startTime)); } //分配堆内存 public static void bufferAccess() { long startTime = System.currentTimeMillis(); ByteBuffer b = ByteBuffer.allocate(500); for (int i = 0; i < 100000; i++) { for (int j = 0; j < 99; j++) b.putInt(j); b.flip(); for (int j = 0; j < 99; j++) b.getInt(); b.clear(); } long endTime = System.currentTimeMillis(); System.out.println("bufferAccess" + (endTime - startTime)); } public static void main(String args[]) { bufferAccess(); directAccess(); bufferAccess(); directAccess(); }}
输出结果:
bufferAccess57
directAccess:28
bufferAccess55
directAccess:10
可以看到直接内存读写有较大优势,但是看看下面的情况:
/** * Alipay.com Inc. * Copyright (c) 2004-2015 All Rights Reserved. */import java.nio.ByteBuffer;/** * * @author yunmo.hl * @version $Id: AllocDirectBuffer.java, v 0.1 2015-12-15/12/14-15:02 yunmo.hl Exp $$ */public class AllocDirectBuffer { public static void directAllocate() { long startTime = System.currentTimeMillis(); for (int i = 0; i < 200000; i++) { ByteBuffer.allocateDirect(1000); } long endTime = System.currentTimeMillis(); System.out.println("directAllocate:" + (endTime - startTime)); } public static void bufferAllocate() { long startTime = System.currentTimeMillis(); for (int i = 0; i < 200000; i++) { ByteBuffer.allocate(1000); } long endTime = System.currentTimeMillis(); System.out.println("bufferAllocate:" + (endTime - startTime)); } public static void main(String[] args) { bufferAllocate(); directAllocate(); bufferAllocate(); directAllocate(); }}
输出结果:
bufferAllocate:38
directAllocate:282
bufferAllocate:71
directAllocate:403
可以看到在内存空间申请上,直接内存毫无优势。
如果内存空间本身需要频繁申请,则不适合使用直接内存。
1 0
- java直接内存与堆内存的比较
- Java直接内存和堆内存的性能比较
- Java直接内存和堆内存的性能比较
- 直接内存和堆内存的性能比较
- 直接内存和堆内存的性能比较
- 堆内存和堆外内存(又名直接内存)比较
- JAVA内存中堆与栈的比较
- JAVA直接内存(堆外内存)
- Java的堆与非堆内存
- java 堆内与堆外内存;java的栈内存和堆内存
- java中内存的栈与堆
- JAVA 堆内存的分析与配置
- JAVA的堆内存
- java中堆内存与栈内存的区别
- java虚拟机中栈内存与堆内存的区别
- Java中的栈内存与堆内存
- 栈内存与堆内存(Java)
- Java中堆内存与栈内存
- MacOS 10.11 cocoaPods 安装报错解决方案
- C#——委托
- DEX文件格式
- 高效自动化工具之在线json
- Extjs4.2 自定义window panel 标题
- java直接内存与堆内存的比较
- 使用ViewHolder模式优化ListView
- udev模型管理hotplug
- “大数据前沿技术分析及安全防范”技术分享圆满结束!
- canvas.save() canvas.restore() 作用
- 关于ssl通道的建立服务器端keystore的操作
- 网络应用分析框架
- 【C++】静态成员函数小结
- Eclipse 导入项目乱码问题