- 浏览: 143581 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
95546772:
我的QQ是 95546772
使用Jencks实现Hibernate与Jackrabbit的分布式事务 -
95546772:
您好,我正在学习jackrabbit.谷歌的连接失效了.能否发 ...
使用Jencks实现Hibernate与Jackrabbit的分布式事务 -
chenjson_chen:
楼主的这个说明,解答了现在项目中遇到的问题
关于Spring嵌套事务 -
beykery:
没必要这么写。。。。
回收DirectByteBuffer -
lc_windson:
楼主,关于这一块,我遇到了一个很困惑的问题,分析.tii文件的 ...
Lucene索引文件解析之“项”
Java 2 SE 6 doc :
Given a direct byte buffer, the Java virtual machine will make a best effort to perform native I/O operations directly upon it. That is, it will attempt to avoid copying the buffer’s content to (or from) an intermediate buffer before (or after) each invocation of one of the underlying operating system’s native I/O operations.
- DirectBuffer通过免去中间交换的内存拷贝, 提升IO处理速度;
Java 2 SE 6 doc :
The contents of direct buffers may reside outside of the normal garbage-collected heap, and so their impact upon the memory footprint of an application might not be obvious.
- DirectBuffer在-XX:MaxDirectMemorySize=xxM大小限制下[1], 使用Heap之外的内存, GC对此"无能为力"[2], 也就意味着规避了在高负载下频繁的GC过程对应用线程的中断影响.
因此, 当系统应用场景满足:
- 大量原生类型数据使用
- 频繁IO操作
- 系统处理响应速度要求快且稳定
典型场景是网络数据传输, 可考虑合理应用DirectBuffer.
- MappedByteBuffer不受-XX:MaxDirectMemorySize=xxM大小限制.
- 下面的代码可验证程序运行中GC不尝试回收DirectBuffer:
- 程序运行命令
java -XX:MaxDirectMemorySize=11M cn.cafusic.direct.buffer.gc.DirectBufferGCTest <mode> <size>
- GC监控命令
jstat -gcutil <pid> 1000 60
- 代码
package cn.cafusic.direct.buffer.gc; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel.MapMode; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; /** * DirectBufferGCTest * * @author <a href=mailto:jushi@taobao.com>jushi</a> * @created 2010-8-19 * */ public class DirectBufferGCTest { /** * @param args * @throws Exception */ public static void main(final String[] args) throws Exception { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { running = false; } }); final char mode = args[0].charAt(0); final int size = Integer.parseInt(args[1]); Callable<?> callable = null; switch (mode) { case RELEASE: callable = new Callable<Object>() { @Override public Object call() throws Exception { final ByteBuffer[] buffers = new ByteBuffer[size]; int i = 0; while (running) { if (i == buffers.length) i = 0; final ByteBuffer buffer = newBuffer(true); buffers[i++] = buffer; TimeUnit.SECONDS.sleep(1); } return null; } }; break; case HEAP: callable = new Callable<Object>() { @Override public Object call() throws Exception { final ByteBuffer[] buffers = new ByteBuffer[size]; int i = 0; while (running) { if (i == buffers.length) i = 0; final ByteBuffer buffer = newBuffer(false); buffers[i++] = buffer; TimeUnit.SECONDS.sleep(1); } return null; } }; break; case MAPPED: callable = new Callable<Object>() { @Override public Object call() throws Exception { final RandomAccessFile file = new RandomAccessFile("raf.test", "rw"); file.setLength(size * CAPACITY); final MappedByteBuffer map = file.getChannel().map(MapMode.READ_WRITE, 0, file.length()); while (running) { while (map.hasRemaining()) { map.put((byte) 4); } map.clear(); TimeUnit.SECONDS.sleep(1); } file.close(); return null; } }; break; case KEEP: callable = new Callable<Object>() { @Override public Object call() throws Exception { final ByteBuffer[] buffers = new ByteBuffer[size]; for (int i = 0; i < buffers.length; i++) { buffers[i] = newBuffer(true); } while (running) { TimeUnit.SECONDS.sleep(1); } return null; } }; break; default: throw new RuntimeException("error mode : " + mode); } callable.call(); } static ByteBuffer newBuffer(final boolean direct) { final ByteBuffer buffer = direct ? ByteBuffer.allocateDirect(CAPACITY) : ByteBuffer.allocate(CAPACITY); while (buffer.hasRemaining()) { buffer.put((byte) 5); } return buffer; } private static final int CAPACITY = 1024 * 1024; private static final char HEAP = 'h'; private static final char KEEP = 'k'; private static final char MAPPED = 'm'; private static final char RELEASE = 'r'; private static boolean running = true; }
发表评论
-
回收DirectByteBuffer
2011-03-03 10:33 2833为避免GC的负效应, 使用DirectByteBuffer管理 ... -
基于DSL风格的代码重构
2010-10-29 09:32 206什么样代码是简洁易懂, 这很难有个统一的标准, 因为它很 ... -
netty应用中接收缓存覆写的陷阱
2010-08-17 13:31 6346version : netty-3.2.1.final ... -
GWT应用经验小结
2009-03-16 18:29 38581. pendingSrc 问题描述:Image的set ... -
解读《使用Jencks实现Hibernate与Jackrabbit的分布式事务》
2009-01-15 18:15 5507前言 本文是针对《使用Jencks实现Hibernate与 ... -
使用Jencks实现Hibernate与Jackrabbit的分布式事务
2009-01-13 10:40 4318前言 这是一篇用Spring和Jencks ... -
从Erlang看高并发可容错系统设计原则
2008-12-25 18:30 2522《面对软件错误构建可靠的分布系统》 写道 Erlang 的世 ... -
Lucene索引文件解析之“项”
2008-12-23 17:25 1849接上文Lucene索引文件解析之“域”。 关于项(Ter ... -
Mockito入门
2008-12-17 18:35 11400简介 InfoQ-使用Mockito 1.5监视普通对象 ... -
开源让我兴奋
2007-01-08 11:47 812一直在设想自己设计一个java过程自动化的工具,但苦于经验、技 ... -
对象的创建和销毁
2008-08-31 05:23 978考虑用静态工厂方法代替构造器 静态工厂方法的名字使得调用者 ... -
Jackrabbit 索引配置说明
2008-09-02 00:35 3538从1.4版本之后,jackrabbit开始支持节点的属性索引配 ... -
关于Spring嵌套事务
2008-09-03 05:34 13613不久前,为了避免事务的嵌套,刻意去修改以前的设计,导致各部分之 ... -
教练Marc Lammers语录
2008-09-09 02:06 1060本文摘之InfoQ:世界顶尖 ... -
速度计算有偏差
2008-09-18 01:24 1086团队有4个开发人员,3个测试人员,试行了4天的小迭代,完成的工 ... -
任务板用起来了
2008-09-25 00:53 2270好久就知道任务是个项 ... -
用例编写推荐守则
2008-10-08 07:52 1096没有最佳的用例模板,格式和章节是为用例的内容服务的,它们 ... -
Lucene索引文件解析之“域”
2008-12-12 00:42 2935引言 目前最新的Lucene的版本是2.4.0,但关于索引 ... -
GWT中RequestBuilder使用贴士
2008-12-09 13:35 7625GET请求 String url = // 动态生成 ... -
Failed to resolve artifact
2008-11-30 03:58 6828使用GWT-Maven Archetype (maven-go ...
相关推荐
提升I/O速度,对提升系统整体性能有着很大的好处。在Java的标准I/O中,提供了基于流的I/O实现,即InputStream和OutputStream。这种基于流的实现以字节为单位处理数据,并且非常容易建立各种过滤器。NIO是NewI/O的...
buffer应用缓冲区 socket应用层
oracle性能调优之buffer cache
有哪些初始化参数最影响Oracle系统的性能?具体影响Oracle系统性能的初始化参数有:SGA(系统全局区);db_block_buffers;share_pool_size ;Log_buffer;sort_area_size;processes;global_names;db_block_size...
bytebuf - 高性能替换bytes.Buffer,可以在性能敏感的部分或Go程序中使用它
DB2性能监控和调优入门练习之三(Bufferpool篇)。
file_nobuffer 源代码 资料 thanks
MySQL性能优化InnoDB buffer pool flush策略
1.4 数字电视传输系统的主要性能指标 1.4.1 数字传输系统的有效性指标 1.4.2 数字传输系统的可靠性指标 1.4.3 数字传输系统的抗干扰能力指标 1.4.4 信道容量 1.4.5 编码效率 1.4.6 频带利用率和功率利用率 1.5 数字...
一、SGA 1、Shared pool tunning 2、Buffer Cache 3、其他SGA对象 1. 监控事例的等待 2. 回滚段的争用情况 12. 监控当前数据库谁在运行什么SQL语句
Vertex buffer 在ogre中的应用
“3S”技术综合应用 GIS 及其在3S技术中的应用 GPS及其在3S技术中的作用 RS及其在3S技术中的作用 GIS、RS、GPS系统集成 8.1 3S应用概述 1 GIS 及其在3S技术中的应用 基本概念 地理信息系统(GIS)是在计算机硬件和...
1. Java heap space 2. GC overhead limit exceeded 3. Permgen space 5. Unable to c
Herm是一套快速开发高性能的网络应用的C++库。比如开发网络游戏、即时通信、流媒体、文件下载、P2P等基于TCP/IP网络应用。 Herm包括三个组件: (1)Utilities 最基础的组件,提供线程、一读一写线程不加锁的...
收集性能数据、优化SQL语句和应用程序、调整共享池(Shared Pool)的性能、调整缓冲区高速缓存(Buffer Cache)的性能、调整重做有关的性能、共享(多线程)服务器(MTS)、调整磁盘I/O的性能、调整闩(latch)和锁定(lock)...
21 生产经验:如何通过多个Buffer Pool来优化数据库的并发性能.pdf
Linux操作系统中内存buffer和cache的区别.docx
C语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC语言头文件 BUFFERC...
Protocol Buffers被定义为一种数据描述语言(Data Description Language,DDL),广泛的应用于Google内部,用于结构化数据的描述、传输和存储。尽管其功能和用途与XML基本相似,但是 Protocol Buffers更为轻便。...