- 博客(7)
- 资源 (4)
- 收藏
- 关注
原创 为什么Java中的HashMap<K, V>的get函数是get(Object key),而不是get(K key)?
帮别人的代码改bug,发现有一大堆bug是由get或者remove传递进去的参数类型不匹配而造成的。比如: Map m = new HashMap(); m.put(new Short((short) 2), "2222"); System.out.println(m.get(2));上面的代码输出是null。一般人很难发现传递进去的int和Short类型不匹配,而
2012-06-27 16:16:58 8846 6
翻译 泛型编程的困境
原文:http://research.swtch.com/generic常用的数据结构(vectors,queues,maps,trees,等等)似乎是评估一个新语言的一个热门话题。Go语言的FAQ中有一条就是关于Go中的泛型编程。对于泛型编程的通常有以下三种处理方式:1.(C语言)放弃泛型。这样苦了程序员,但是这样没前增加太多复杂的东西到语言中。2.(C++语言)编译期特化或者大量地...
2012-06-24 22:50:35 9688 7
原创 测试Java的synchronize和ReentrantLock在单线程下的效率
ReentrantLock 在多线程情况下要远胜synchronize,这点没有疑问。最近要写个程序,有个变量是有多数情况下是一个线程读写,有少数情况下是多个线程并发读写。所以要测试下ReentrantLock 在单线程下和synchronize的效率对比。在测试的过程中发现一个有意思的现象。测试代码见后面。测试代码1结果:noLockTime: 0:00:00.004no
2012-06-14 02:40:21 3254
原创 Java中的数据结构一览
Java的类库实在是很多,以至于很多人都不太了解,结果总是自己造轮子。下面汇总了Java中的一些数据结构,加上一些实现的分析,同时备忘。至于时间复杂度,个人觉得写出来的用处不大。如果明白它是怎么实现的,那自然就知道它的时间复杂度。如果不理解它的实现,把时间复杂度背得再熟也没用。接口:Collection子接口:BlockingDe
2012-06-13 02:14:13 18107
原创 Java中的sun.misc.Unsafe包
chronicle项目:https://github.com/peter-lawrey/Java-Chronicle这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据。作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒。在看chronicle的源代码,发现一个牛B的利用Unsafe来直接读写内存,从而提高
2012-06-13 00:53:57 24485 2
原创 从Java中String的subString函数说起
今天在用VisualVM查看进程的堆dump时,发现一些有意思的地方,见下图:在“OQL控制台”页面中可以看到“过度分配的字符串”,“布尔值太多”。从这里,可以看到一些有意思的地方。有垃圾回收机制的语言通常有很多优化1..String是不能改变的,所以subString通常是和原来的String使用的是同一份内存,不会有内存拷贝。所以有可能会出现有一个小字符串占
2012-06-03 14:51:49 2939
原创 为什么逗号表达式返回最后一个表达式的结果?--从另一个角度看C++
auto v = func1(), func2(), func3();因为一个函数调用是要经过参数压栈,调用完了,还有退栈(栈清理)的过程。而这个退栈的工作可以由调用者或者被调用者来进行,因此也分为两种不同的调用约定:__cdecl和_stdcall,当然这个扯远了。要是再扯远点,还有利用寄存器,省去压栈的fastcall和C++特有的thiscall。正因为函数调用是一个不断地入
2012-06-03 13:29:33 2084 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人