org.apache.commons.collections.FastHashMap是java.util.HashMap的一个实现。
其适用的环境是有大量的读,而很少有map结构的改动的环境,并且在这种环境下为线程安全。
它之所以快,是因为在读取的时候是不加锁的。
而改动分三步:1 克隆现有map 2 改动克隆map 3 用克隆map替换现有map。
FastHashMap是有两种运行模式的,fast和slow,其初始的模式是slow的,所有的操作都要获得锁才能进行,以保证其线程安全。若在FastHashMap初始化之后不设置成fast模式,则没有利用FastHashMap的高速只读功能。
这个是测试结果
mapsize, thread number, read time, time(ms)
-------------result--------------
10000 50 10000 1921
10000 50 100000 18435
10000 50 200000 36274
10000 50 500000 89853
10000 100 10000 3718
10000 100 100000 36291
10000 100 200000 71922
10000 100 500000 181487
-------------result--------------
10000 50 10000 359
10000 50 100000 1187
10000 50 200000 2250
10000 50 500000 5671
10000 100 10000 390
10000 100 100000 2765
10000 100 200000 5952
10000 100 500000 19120
可以看出
1 fast模式比slow模式的性能高的多。
2 slow模式下时间是线性增长的,而fast模式下时间是非线性增长的。
分享到:
相关推荐
- 在UI线程安全地加载数据,避免阻塞主线程。 - `LoaderManager`负责管理`Loader`,`CursorLoader`用于加载`Cursor`数据。 10. **适配器和ListView显示数据** - 将`Cursor`数据绑定到`CursorAdapter`,然后将`...
在编程领域,不可变对象(Immutable Object)是一种重要的设计模式,尤其在多线程和并发环境中,它提供了安全性和性能优化。在这个初学者教程中,我们将深入探讨C#中的不可变对象,包括“内部不变性”和“观察不变性...
6. **并发与同步**:在多线程环境中,搜索内存需要考虑线程安全。如果多个线程同时操作同一块内存,可能会导致数据不一致。使用锁或其他同步机制来确保操作的原子性。 7. **内存遍历策略**:高效的内存搜索算法也很...
通过研究源代码,你可以学习到如何处理网络I/O、解析HTTP协议、实现线程安全等高级话题。此外,还可以借此机会学习如何编写高质量的测试用例、如何组织代码结构以及如何遵循开源社区的贡献规则。 总之,这个代理...
每个用户可以有不同的权限,例如只读或读写访问特定目录。 4) **上传速率限制**: 为了防止大文件上传导致服务器带宽被过度占用,FTP服务器可以设置上传速率限制。这通常通过在数据传输过程中实施某种形式的流量...
Collections API 提供了一些线程安全的集合实现,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, 和 `ConcurrentSkipListMap`。这些类在多线程环境中能保证并发访问的安全,但要注意它们的设计目标和性能特性,...
在本压缩包“Python编程实践gwpy2-code”中,主要涵盖了Python编程的相关实践内容。Python作为一种高级编程语言,以其简洁、易读的语法特性深受程序员喜爱,广泛应用于数据分析、科学计算、网络爬虫、机器学习等多个...
11. HashMap和Hashtable都是键值对存储,HashMap非线程安全,允许null键值,而Hashtable线程安全,不接受null键值。 12. final修饰变量表示不可修改,finally用于确保代码块始终执行,finalize是对象被垃圾收集前...
多根节点子目录中正在研究的一个想法通过创建最新更新的根版本的只读副本来消除根节点上的锁定负载。 根被带外更新。 在子目录中,正在开发新的B树页面管理代码,该代码使用跳过列表而不是用于键搜索的排序数组。 ...
,只读。 只有SonarSourcers可以创建票证。 下一个要发布的版本的 有问题或反馈吗? 有关支持问题(“我如何?”,“我遇到此错误,为什么?”,...),请首先阅读,然后前往。 有可能您已经回答了与您相似的问题...
根据提供的文件信息,这里将对Java中的几个关键概念进行详细解释与分析,这些概念包括堆(heap)、栈(stack)、数据段(data segment)以及代码段(code segment)。 ### 一、堆(Heap) 堆是Java运行时环境中的一部分,...
代码审查(Code Review)是软件开发过程中的一个重要环节,它旨在提高代码质量,发现潜在的错误,提升团队协作效率,以及传播最佳实践。以下是一些关键的代码审查知识点,基于提供的文档内容: 1. **定期进行Code ...
这通常是在多线程环境中发生的。 **37. OS error code 36: Filename too long** - **中文解释**:文件名太长 - **描述**:当文件名长度超过了文件系统支持的最大长度时返回此错误。可以通过缩短文件名来解决。 **...
Toad编辑器还提供了多种辅助功能,例如调整字体、使用快捷键、以颜色标识数据库连接、快速启动、多线程执行以及只读数据库连接等。这些功能大大提升了用户的使用便利性,尤其是在进行大规模代码开发或维护时。 7. ...
- **线程**:介绍了如何在DSP上实现线程安全的编程模型。 - **抢占式与非抢占式多任务处理**:区分了两种不同的并发处理方式及其适用场景。 - **重入性**:讨论了如何设计可重入的函数,以支持多线程环境下的正确...
使用`Collections.unmodifiable*()`、`Collections.synchronized*()`等工厂方法,可以创建只读或线程安全的集合视图,增强代码的安全性。 10. **自定义集合**: 学习如何通过实现集合接口或继承现有类来自定义...
- **内存保护**:通过设置节的属性,如只读、执行或非执行等,操作系统可以限制代码和数据的访问权限。 - **导入/导出表**:允许程序之间进行安全的动态链接,同时减少了攻击面。 #### 五、PE文件与线程局部存储 ...
8. **使用const关键字**:通过const限定符来声明常量和只读对象,防止意外修改,提高代码安全性。 9. **类型安全**:避免隐式类型转换,特别是在指针和整型之间的转换。使用强制类型转换时要谨慎,以防止数据丢失或...
这有助于提高多线程环境中的安全性。C#提供了丰富的字符串操作方法,例如字符串连接、分割等。 #### 异常处理 - **`as` 运算符**: 当尝试将一个对象转换为另一个类型时,`as` 运算符可以安全地进行类型转换,如果...