2018年4月8日
摘要: 这里说的还是1.7的ConcurrentHashMap,在1.8中,ConcurrentHashMap已经不是基于segments实现了。 之前也知道ConcurrentHashMap是通过把锁加载各个segment上从而实现分段式锁来达到增加并发效率的,但是时间久了容易忘,这次再看了一下源码,记录 阅读全文
posted @ 2018-04-08 17:45 J.M.Liu 阅读(410) 评论(0) 推荐(0) 编辑
  2018年3月21日
摘要: 先行原则规定了先行的操作对后续的操作可见,有效解决了数据竞争问题。数据竞争问题发生在当变量被多个线程读时,同时至少有一个线程在对这个变量进行写,那么写入的变量不一定能够及时被其他线程看见,甚至永远也不能被其他线程看见。 从这里就可以看出,“先行”其实规定的是“可见性”问题,它和操作(读、写、方法调用 阅读全文
posted @ 2018-03-21 21:05 J.M.Liu 阅读(424) 评论(0) 推荐(0) 编辑
  2018年3月7日
摘要: 之前一直是用jstat来监控GC的,后来发现原来有个自带的jconsole,是可始化界面的,而且也是oracle公司自带的工具,与是拿来用一下,发现蛮好用的。 然而,在一次复现实验中,发现原来能复现的实验突然复现不了了,内存使用居然以下在就将下去了。于是开启jstat gcutil <pid> 2s 阅读全文
posted @ 2018-03-07 16:17 J.M.Liu 阅读(382) 评论(0) 推荐(0) 编辑
  2018年2月28日
摘要: 由于Full GC的耗时是Minor GC的十倍左右,所以Full GC的频率设计得比Minor GC低得多。现总结一下触发Full GC的情况。 在那些实现了CMS的比较新的虚拟机中,如果配置了-XX:+UseConcMarkSwapGC,则启用CMS回收算法,CMS会周期性地检查老年代的情况,每 阅读全文
posted @ 2018-02-28 10:56 J.M.Liu 阅读(4399) 评论(0) 推荐(0) 编辑
  2018年2月17日
摘要: Selector是java NIO的核心,通过Selector实现非阻塞式IO。一个Selector可以对应多个不同类型的Channel,并且以SelectedKey进行标记管理。换句话说,Selector只管理SelectedKey而直接管理Channel。 Selector对象中有三个集合,分别 阅读全文
posted @ 2018-02-17 12:04 J.M.Liu 阅读(416) 评论(0) 推荐(0) 编辑
摘要: SelectedKey是channel与Selector绑定的标记,每将一个channel注册到一个selector就会产生一个SelectedKey,并将这个SelectedKey放入到Selected的key set中,注意,key set 只能通过这种方式添加,不可以直接添加,但是可以手动移除 阅读全文
posted @ 2018-02-17 10:46 J.M.Liu 阅读(1738) 评论(0) 推荐(0) 编辑
  2018年2月15日
摘要: java和其他语言一样,都支持泛型,包括泛型类和泛型方法,但是java的泛型比较特殊。因为java的泛型并不是在java诞生之初就加入的,在很长的一段时间里,java是没有泛型的,在需要泛型的地方,统统都采用协变的方式,也就是采用Object,比如ArrayList类,元素的类型就是Object。为 阅读全文
posted @ 2018-02-15 11:40 J.M.Liu 阅读(3874) 评论(0) 推荐(0) 编辑
  2018年2月3日
摘要: 可串行化:多个任务并发执行是正确的,当且仅当起结果与按某种次序串行执行这些任务时产生的结果一样,称这种调度策略为可串行化调度。 冲突操作:不同任务对同一数据的读写操作和写写操作,其它任务都是不冲突的。 冲突可串行化:冲突操作的顺序是不能调换的,不冲突操作可以调换顺序。这样的调换之后,调度仍然是串行的 阅读全文
posted @ 2018-02-03 21:10 J.M.Liu 阅读(1273) 评论(0) 推荐(0) 编辑
  2018年1月30日
摘要: MySQL的Limit子句 Limit子句可以被用于强制 SELECT 语句返回指定的记录数。Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。 Limit的效率有时候很高 常说的Limit的执行效 阅读全文
posted @ 2018-01-30 11:01 J.M.Liu 阅读(1251) 评论(0) 推荐(0) 编辑
  2018年1月24日
摘要: 我们知道,在VC编程中,如果要编译成动态链接库,需要将函数、变量、类等导出,这时使用__declspec(dllexport)。使用动态链接库时,需要在声明的时候有使用__declspec(dllimport)导入外部符号。这样,在库的编写时需要使用一份带__declspec(dllexport)的 阅读全文
posted @ 2018-01-24 21:19 J.M.Liu 阅读(652) 评论(0) 推荐(0) 编辑