2018年9月2日
摘要:
我们知道,同一个进程中的多个线程共享进程资源,包括主内存、文件句柄、锁资源等。那么当一个线程死了(非正常退出、死循环等)就会导致线程该占有的资源永远无法释放,从而影响其他线程的正常工作,看下面一个例子。 输出: 可以看到,第二个线程并没有执行下去。原因如下: 在第一个线程threadRuntimeE
阅读全文
posted @ 2018-09-02 11:38
J.M.Liu
阅读(4730)
推荐(0)
2018年8月24日
摘要:
1.Criteria查询接口适用于组合多个限制条件来搜索一个查询集。 要使用Criteria,需要遵循以下步骤: *创建查询接口: Criteria criteria=session.createCriteria(User.class); *设置查询条件: criteria.add(Restrict
阅读全文
posted @ 2018-08-24 15:09
J.M.Liu
阅读(954)
推荐(0)
2018年4月19日
摘要:
首先需要明白什么是TIME_WAIT。TIME_WAIT是在tcp断开连接时进行四次回收的时候,主动断开端在收到被动关闭端的FIN包并发送ACK包给被动关闭后进入的状态。这个状态默认情况下是2倍的MSL(Max segment lifetime,数据段在网络中的最大存活时间),设置TIME_WAIT
阅读全文
posted @ 2018-04-19 22:50
J.M.Liu
阅读(2043)
推荐(0)
2018年4月16日
摘要:
先说Hash索引 在理想的情况下,key非常分散,不存在Hash碰撞的话,采用Hash索引可以唯一得确定一个key的位置,并且这个位置上就只有一个key,所以查找时间复杂度是O(1),非常快,这是Hash索引的最主要优势。但是呢,Hash索引不是没有缺点,不存在Hash碰撞这是理想情况,通常情况下,
阅读全文
posted @ 2018-04-16 16:47
J.M.Liu
阅读(2702)
推荐(0)
2018年4月8日
摘要:
这里说的还是1.7的ConcurrentHashMap,在1.8中,ConcurrentHashMap已经不是基于segments实现了。 之前也知道ConcurrentHashMap是通过把锁加载各个segment上从而实现分段式锁来达到增加并发效率的,但是时间久了容易忘,这次再看了一下源码,记录
阅读全文
posted @ 2018-04-08 17:45
J.M.Liu
阅读(424)
推荐(0)
2018年3月21日
摘要:
先行原则规定了先行的操作对后续的操作可见,有效解决了数据竞争问题。数据竞争问题发生在当变量被多个线程读时,同时至少有一个线程在对这个变量进行写,那么写入的变量不一定能够及时被其他线程看见,甚至永远也不能被其他线程看见。 从这里就可以看出,“先行”其实规定的是“可见性”问题,它和操作(读、写、方法调用
阅读全文
posted @ 2018-03-21 21:05
J.M.Liu
阅读(471)
推荐(0)
2018年3月7日
摘要:
之前一直是用jstat来监控GC的,后来发现原来有个自带的jconsole,是可始化界面的,而且也是oracle公司自带的工具,与是拿来用一下,发现蛮好用的。 然而,在一次复现实验中,发现原来能复现的实验突然复现不了了,内存使用居然以下在就将下去了。于是开启jstat gcutil <pid> 2s
阅读全文
posted @ 2018-03-07 16:17
J.M.Liu
阅读(399)
推荐(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
阅读(4626)
推荐(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
阅读(432)
推荐(0)
摘要:
SelectedKey是channel与Selector绑定的标记,每将一个channel注册到一个selector就会产生一个SelectedKey,并将这个SelectedKey放入到Selected的key set中,注意,key set 只能通过这种方式添加,不可以直接添加,但是可以手动移除
阅读全文
posted @ 2018-02-17 10:46
J.M.Liu
阅读(1798)
推荐(0)