- 浏览: 145340 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 2868为避免GC的负效应, 使用DirectByteBuffer管理 ... -
基于DSL风格的代码重构
2010-10-29 09:32 206什么样代码是简洁易懂, 这很难有个统一的标准, 因为它很 ... -
netty应用中接收缓存覆写的陷阱
2010-08-17 13:31 6425version : netty-3.2.1.final ... -
GWT应用经验小结
2009-03-16 18:29 38931. pendingSrc 问题描述:Image的set ... -
解读《使用Jencks实现Hibernate与Jackrabbit的分布式事务》
2009-01-15 18:15 5554前言 本文是针对《使用Jencks实现Hibernate与 ... -
使用Jencks实现Hibernate与Jackrabbit的分布式事务
2009-01-13 10:40 4366前言 这是一篇用Spring和Jencks ... -
从Erlang看高并发可容错系统设计原则
2008-12-25 18:30 2557《面对软件错误构建可靠的分布系统》 写道 Erlang 的世 ... -
Lucene索引文件解析之“项”
2008-12-23 17:25 1889接上文Lucene索引文件解析之“域”。 关于项(Ter ... -
Mockito入门
2008-12-17 18:35 11455简介 InfoQ-使用Mockito 1.5监视普通对象 ... -
开源让我兴奋
2007-01-08 11:47 865一直在设想自己设计一个java过程自动化的工具,但苦于经验、技 ... -
对象的创建和销毁
2008-08-31 05:23 1036考虑用静态工厂方法代替构造器 静态工厂方法的名字使得调用者 ... -
Jackrabbit 索引配置说明
2008-09-02 00:35 3570从1.4版本之后,jackrabbit开始支持节点的属性索引配 ... -
关于Spring嵌套事务
2008-09-03 05:34 13645不久前,为了避免事务的嵌套,刻意去修改以前的设计,导致各部分之 ... -
教练Marc Lammers语录
2008-09-09 02:06 1087本文摘之InfoQ:世界顶尖 ... -
速度计算有偏差
2008-09-18 01:24 1158团队有4个开发人员,3个测试人员,试行了4天的小迭代,完成的工 ... -
任务板用起来了
2008-09-25 00:53 2294好久就知道任务是个项 ... -
用例编写推荐守则
2008-10-08 07:52 1120没有最佳的用例模板,格式和章节是为用例的内容服务的,它们 ... -
Lucene索引文件解析之“域”
2008-12-12 00:42 2977引言 目前最新的Lucene的版本是2.4.0,但关于索引 ... -
GWT中RequestBuilder使用贴士
2008-12-09 13:35 7657GET请求 String url = // 动态生成 ... -
Failed to resolve artifact
2008-11-30 03:58 6856使用GWT-Maven Archetype (maven-go ...
相关推荐
对于像本钢电能量计量管理系统这样复杂的系统,由于应用系统设计难以修改,基于性能调整准则的方法更为实用。通过对内存参数的分析和调整,如数据高速缓存的大小,可以有效地提高数据库系统对内存的利用率,进而提升...
Buffer Cache是数据库管理系统中至关重要的一个组件,尤其是在Java应用程序中,它对于提升系统性能起着决定性作用。Buffer Cache深度分析涉及到内存管理、缓存命中率优化、并发控制等多个方面,是理解Java数据库连接...
【系统稳定性——OutOfMemoryError常见原因及解决方法】 在Java应用程序中,系统稳定性的一个关键因素是避免出现`...通过理解和应用上述方法,可以有效地预防和解决这类问题,从而提升应用的性能和可用性。
JVM内存主要分为两大块:Java堆内存和直接内存映射(DirectBuffer占用)。推荐配置如下: - **堆内存**: 建议保持适中大小,例如在一个拥有16GB内存的服务器上,可以将Mycat的堆内存设置为4GB。 - **直接内存映射**...
- **零拷贝**:Agrona利用NIO的Direct Buffer,实现了零拷贝技术,减少了数据在内存层次间的复制,提升了I/O性能。 - **内存预分配**:通过预先分配并管理内存,Agrona避免了动态内存分配的开销,特别是在高并发...
Heap Buffer存储在Java堆中,而Direct Buffer存储在系统内存中,直接与硬件交互,减少了Java虚拟机(JVM)的内存拷贝,提高了性能。然而,Direct Buffer可能会占用更多的系统资源,因此在选择时需要权衡性能和资源...
在绘制时,我们可以通过索引缓冲(Index Buffer)进行批处理渲染,进一步提升性能。 对于喷泉效果,粒子的发射位置通常设定为固定点,如水面。为了模拟水花四溅,可以设定一定的随机偏移。粒子的颜色可以随着高度...
通过理解并熟练应用上述知识点,开发者可以在RT-Thread Studio环境下高效地利用RingBuffer解决实际问题,提升系统性能。在实际项目中,务必根据需求进行适当的优化和调整,确保RingBuffer的使用既安全又高效。
在IT领域,特别是嵌入式系统和图形用户界面开发中,DirectFB是一个重要的库,它提供了高效的帧缓冲管理,使得开发者能够轻松地处理图形、...理解DataBuffer的使用对于提升DirectFB应用程序的性能和用户体验至关重要。
2.2.3. **零拷贝技术**:Netty通过直接缓冲区(Direct Buffer)和FileChannel的transferTo方法等手段,尽可能减少数据在内存中的复制,进一步提高性能。 通过以上策略,Netty能够轻松支持10万TPS的跨节点远程服务...
8. **零拷贝技术**:通过DirectBuffer和FileRegion实现零拷贝,减少CPU内存复制操作,提升系统性能。 9. **异常处理**:Netty 提供了统一的异常处理机制,方便开发者处理各种网络异常。 10. **易于调试**:Netty ...
6. **内存管理**:MINA使用DirectBuffer和ByteBuffer进行内存管理,减少了Java对象创建和垃圾收集的开销,提升了性能。 7. **API设计**:MINA的API设计简洁且易于使用,提供了丰富的接口和类,帮助开发者快速开发...
MySQL作为一种广泛使用的开源关系型数据库管理系统,其性能调优成为了提高应用响应速度、提升用户体验的关键环节。本文将详细介绍MySQL数据库性能调优的方法和技术,包括操作系统层面的优化、文件系统的选择、硬件...
内存管理对DB2的性能至关重要,合理的内存分配可以显著提升性能。 ##### 内存使用 - **EDM Pool**:专门用于存储执行计划和其他临时数据的内存池。 - **目录缓存/包缓存**:用于缓存目录信息和编译好的SQL语句,...
3. **内存零拷贝**:通过Direct Buffer支持Zero-Copy机制,减少了CPU上下文切换,提升了效率。 4. **协议支持**:对高性能序列化协议如Protobuf的内置支持,加速了数据的序列化和反序列化过程。 Netty 的高可靠性则...
Direct3D是微软开发的一种图形应用程序接口(API),主要用于创建高性能的三维图形,尤其是在游戏开发、虚拟现实和专业可视化领域。本篇文章将深入探讨Direct3D的核心概念、关键技术和应用场景。 一、Direct3D概述 ...
8. **性能优化**:如何通过优化资源管理、减少状态切换和提升渲染效率来提升Direct3D应用程序的性能。 压缩包中的`description.html`可能是教程的详细说明,`license.rtf`包含了使用条款,而`description`可能是...