- 浏览: 1020772 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
更小、更普通、更易上手 简介: Trove 是一种开放源代码的 Java 集合包,提供了核心 Java 集合类的高效替代品,特别针对于实现其键或值是基本类型的集合。本期 性能观察文章中,性能优化专家 Jack Shirazi 和 Kirk Pepperdine 考察了 Trove 类与传统的 Java 集合的区别,以及何时使用 Trove 类。 几年前,也就是 2001 年后期,我们收到了 Eric Friedman 的电子邮件。他说他已经决定构造一组开放源代码的集合类,用于取代 事实上,当时我们对是否能够直接取代 Java 平台的集合类并不特别感兴趣。Joshua Bloch 的工作做得很好,创建的通用集合框架非常有用、快捷而且能够扩展。但是通用与高效常常是互斥的两个目标。创建 专门的 集合类来处理 这样说有点离题了。 Eric 建议创建不通过包装和解包就直接处理数据原型的集合类。这是性能优化人员的梦想,而且可以改进类型安全性,但却是架构师的恶梦。比方说 这样就有 9 种键和 9 种值,组成 81 种不同类型的 在 2001 年,我们为 Eric 提供的支持很少。在“Java Performance Tuning” 12 号时事通讯中(请参阅 参考资料),我们看到了 Eric 关于 Trove 项目的宣告。除了偶尔的 bug 修复外,Eric 都是一个人在所有这些不同的集合版本中埋头苦干。他做了一项了不起的工作,今天我们可以欣然享受他艰苦劳作的成果了。Trove 集合可以使用了,而且确实非常有用。 好了,上面是一段小插曲,您到底能够从 Trove 中得到什么呢?许许多多的高效集合。除了那 81 种不同的 此外,Eric 还实现了 Smalltalk 范型,就是说集合能够对自己的元素执行过程。这种处理不同于 Java 平台中一般的集合元素遍历,需要稍微讨论一下。在 Java 编程中,如果需要处理集合中的所有元素,通常要有一个迭代器(Iterator)来访问和处理每个元素,如清单 1 所示: Trove 也支持这种迭代模式,但是还支持向集合传递过程,然后集合在内部迭代每个元素,依次将该过程应用于每个元素。尽管这种技术不一定能提高效率 —— 如果迭代器对象不能像集合本身那样高效地遍历元素,则可以提高效率 —— 但是有助于提高清晰性和灵活性。清单 2 是上述例子改写后的版本: Trove 映射是采用开放选址而不是链接来实现的。在 Java 核心集合类中,多数映射都是使用链接实现,就是说如果多个键映射到表中的同一索引位置,则索引位置保存一个链表,其中存放映射到该位置的所有元素。开放选址映射则假设表中邻近的位置存在没有使用的索引。如果目标位置已经被占用,映射实现就查看附近的几个位置找到一个没有使用的位置。这种方法不需要链表节点,因此 Trove 映射和相同的核心集合类相比占用的内存更少。使用开放选址必须保证有足够的空闲索引,否则可能影响性能。(Trove 保持装载因子小于 0.5。)否则的话,开放选址的效率与链接基本相当,但多数情况下要好于后者。 开放选址的另一个优点是实现中不需要链表节点对象,链表节点需要靠链接来实现。为什么特别强调这一点呢?基本上每个 JVM 版本都会改进对象创建和无用单元回收的性能,但是较多的对象总会带来更多的开销。对于任何特定的问题,Java 编程中能够减少对象数量的解决方案通常都有更好的效率,这是一个标准的性能权衡问题,每个有经验的性能优化人员都知道。开放选址使用更少的对象来维护映射结构,这意味着 Trove 映射在多数情况下比核心 Java 映射更有效,也更小。值得一提的是,最近越来越多的 Java 核心 Trove 本身提供了一个小的基准测试,用于跟核心 Java 集合进行性能比较。Dion Almaer 所进行的独立比较测试(请参阅 参考资料)说明了 Trove 在性能和大小上的优势。结果表明,Trove 执行 Java 5.0 平台引入了泛化(generics)和自动装箱机制(Autoboxing)。这意味着您可以编写下面这样的代码: 注意,通过使用泛化, 需要强调指出:Java 5.0 平台中的自动装箱可能造成高效的假象。在代码层上看起来基本数据类型的使用效率很高,但是在运行时,基本数据包装器类型的使用效率则会变得很低。Heinz Kabutz 博士最近撰文表明,如果不小心在循环中使用自动装箱机制,有可能使性能降低一个数量级(请参阅 参考资料)。 自动装箱的效率比不上使用直接保存基本数据类型的集合,比如值为 将 Trove 加到您的项目中吧。我们并不建议在每个需要集合的地方都使用 Trove,因为 Trove 毕竟还年轻,使用的还不多,所以很可能会出现一些 bug。但是 Trove 提供了一种选择,如果需要效率更高的类,就可以使用它,当您在调优应用程序时会遇到这种情况。 Jack Shirazi 是 JavaPerformanceTuning.com的董事, Java Performance Tuning, 2nd Edition (O'Reilly) 一书的作者。 Kirk Pepperdine 是 Java Performance Tuning.com 的首席技术官,过去 15 年中一直专注于对象技术和性能优化。 Kirk 是 Ant Developer's Handbook (MacMillan) 一书的作者之一。java.util
类。而且这些类执行速度更快、更轻巧、更灵活。是的,Eric 要创建 Six Million Dollar集合!int
或 boolean
这类基本类型,对于我们而言即使在 2001 年也不是多么不寻常的事。否则,在 Java 平台通用集合框架中存储基本类型的集合都需要通过 Integer
和Boolean
之类的包装器类进行包装和解包,这样做不但非常麻烦,而且大量的包装和解包很容易成为性能瓶颈。Map
吧,它包括键和值,每个键或者值都可以是 Object
或者 8 种基本数据类型之一: byte
、 short
、 char
、 int
、 long
、 float
、 double
和 boolean
。Map
!更糟的是,只要其中一个存在缺陷,就意味着其他 80 种很可能也存在缺陷,而能够共用的代码很有限,因为为了有效地处理每种数据类型,需要分别实现算法,从而,维护的工作量太大了。我非常钦佩 Eric,但是并不期望这种集合能够很快出现,因为开发和调试需要大量的时间。HashMap
版本之外(比如 TIntIntHashMap
、 TIntObjectHashMap
等),还有 List
和 Set
类可以存储基本类型(如 TIntHashSet
、 TFloatArrayList
等)。这种体系结构甚至允许您插入自己的散列策略,以便选择对您的数据集而言可能更有效(或者更灵活)的算法。当然,支持灵活的散列算法也要付出性能代价 —— 如果散列映射成为瓶颈,很可能是因为大量地使用它,这意味着散列函数被反复不断地调用。因此,散列函数中每一点多余的开销都可能成为瓶颈。(顺便说一下,如果散列函数足够简单,JIT 编译器就可能将其编译成内联函数,这样在支持灵活的散列策略的同时又不会带来额外的开销 —— 真是免费的午餐!)
清单 1. 集合的遍历
Iterator iterator = collection.iterator();
while (iterator.hasNext())
{
Object o = iterator.next();
... //do something with 'o'
}
清单 2. 向集合传递过程
Procedure procedure = new DoSomethingWithOProcedure();
collection.forEach(procedure);
Map
实现开始使用开放选址(比如 IdentityHashMap
类)。现有的其他核心 Java Map
实现最终也可能改为使用开放选址,虽然我们可能不那么关心,因为如果需要开放选址的实现,使用 Trove 就可以了。Map.put()
操作的速度要快三倍,而占用的内存只有核心 Map
所需要的一半。
清单 3. 使用自动装箱机制
mymap.put("201",201);
mymap.put("202",202);
int sum = mymap.get("201") + mymap.get("202")
mymap.put("sum",sum);
mymap
甚至可以限制为仅保存 Integer
对象。但是也要注意在幕后仍然会进行自动装箱,清单 3 代码中的所有 int
都在运行时使用 Integer
对象包装(通常每次都使用新的对象),并使用存取方法来访问(虽然 JIT 编译器可能将访问编译成内联函数)。int
、键为 Object
的 Trove TObjectIntHashMap
类型不需要包装和解包 int
值。对于其他基本数据类型和集合组合,Trove 都有等价的集合,如 TIntIntHashMap
( int
键和 int
值)、TLongArrayList
(保存 long
的列表)、 TIntSet
(保存 int
的集合)等等。Dion Almaer 对 TIntIntHashMap
和 HashMap
的比较测试也表明 Trove 的速度要快一个数量级。
发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1060调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1085Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 18341、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 944“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 9501、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 1000概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 897下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 932<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1657安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1163Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 1027///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 1072J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1277六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1594HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2128最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 979Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 979在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1053maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 132324小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 108313.9. 使用Spring的 ...
相关推荐
Trove是一款高效、开源的Java库,主要用于提供高性能的数据结构,比如集合类(如List、Set、Map)和散列类。Trove的目标是为Java程序员提供与Java内置集合类等效但性能更高的替代品,尤其在处理大量数据时,其优势...
当你需要基本数据类型的集合时,你需要自定义集合类,或使用第三方库,如 Trove 。出于性能考虑,使用TIntObjectHashMap,效率会高于直接使用JDK的HashMap,因为略去了基本类型自动包装和解包的动作。该资源为源码包...
在Java的标准库中,虽然已经包含了丰富的集合类,如ArrayList、HashSet等,但在处理大量数据时,Trove库以其优秀的性能表现脱颖而出。它是由Rob Eden开发并维护的,可以在...
Trove是一个开源的Java集合框架,专注于提供高性能的数据结构,如固定大小的数组、哈希表和集合。这个库被设计用来替代Java标准库中的数据结构,尤其是当性能成为关键因素时。Trove的目标是通过使用原生类型(如int...
宝库3.0.3 Trove库的修补版本-更改Collections语义以匹配适当的java.util.Map语义Palantir... 分支由Palantir Gotham 4.x使用: 此版本添加了数组,列表,集合和映射的实现,这些实现利用了sun.misc.Unsafe类分配的堆外
OpenStack Trove是OpenStack平台中的一个核心组件,专门用于提供数据库即服务(Database as a Service,简称DBaaS)。Trove的设计目标是让用户能够轻松地在云端管理和部署数据库,享受到数据库管理和云计算的双重...
《Trove Mod Loader:解锁Trove游戏的无限可能》 Trove是一款深受玩家喜爱的沙盒风格网络游戏,其中丰富的模组系统为游戏增添了无尽的趣味性和可玩性。然而,传统的模组安装过程通常需要通过Glyph客户端进行,这...
无法直接在mapStateToProps内部访问state属性,必须使用getStatePropertyX(state)类的函数 无法直接在createSelector内部访问state属性 expect-gen-run 使用expectGen时必须调用run或toJSON module-boundary 该...
10. **维护与更新**:阐述Trove的维护技巧,如升级、性能调优以及故障排查方法。 通过学习OpenStack Trove Essentials,读者不仅能掌握Trove的基本用法,还能深入了解OpenStack云环境下的数据库管理,从而在实际...
OpenStack Trove is your step-by-step guide to set up and run a secure and scalable cloud Database as a Service (DBaaS) solution. The book shows you how to set up and configure the Trove DBaaS ...
Trove一个快速、轻量级针对java原子类型(byte,int,float,long等)的Collection 类的集合。
基于 trove4j 的源代码生成器的 maven 插件。 为每个配置的原语复制每个模板文件并替换占位符。 这有点像原始类型的编译时泛型。 版权所有 (c) 2013, Wolf480pl < > 来源 可以在找到最新最好的资源。 执照 模板 ...
java高性能容器库,Trove 是一个快速、轻量级 Collection 类的集合。Trove 提供所有标准 java.util Collections 类的更快的版本以及能够直接在原语(primitive)(例如包含 int 键或值的 Map 等)上操作的 ...
trove.jar
资源来自pypi官网。 资源全名:trove_dashboard-9.0.0.0b2-py2-none-any.whl
Trove 是一个快速、轻量级 Collection 类的集合。Trove 提供所有标准 java.util Collections 类的更快的版本以及能够直接在原语(primitive)(例如包含 int 键或值的 Map 等)上操作的 Collections 类的版本。
openstack中trove模块的mysql数据库表脚本
OpenStack Trove,简化IT操作流程,降低使用数据库使用门槛举个例子,曾经我搭建一个LAMP网站,数据库要自己安装,创建,授权,必要的话,还要自己做主从很繁琐,而且不是专业人员也搞不定,有了Dbaas后,我只需要在...
《Trove:最终的Trove游戏》是一款基于VGD(Video Game Development)原型设计的平台类游戏,旨在提供一个充满挑战性的寻宝体验。玩家在游戏中的主要任务是穿越各种由预定义房间随机生成的关卡,尽可能多地搜集宝藏。...