2014年4月22日

什么是快速失败

摘要: 快速失败:对于非并发集合来说,在其进行迭代时,例如iterator迭代时,iterator是另起一个线程,若有其他线程(如 Collection)进行结构修改(修改了增减了集合中的内容),这个迭代会马上感知到,并且立即抛出 ConcurrentModificationException 异常,而不是... 阅读全文

posted @ 2014-04-22 17:32 z-vipper 阅读(316) 评论(0) 推荐(0) 编辑

2013年10月29日

JVM内存详解-阅读笔记

摘要: JVM内存详解1 本机内存介绍1.1 硬件限制1.2 操作系统和虚拟内存1.2.1 虚拟内存可增加可用内存空间, 但是可能引起性能问题1.2.2 内核空间和用户空间2 内存耗尽时现象当Java 堆耗尽时,Java 应用程序很难正常运行,因为Java 应用程序必须通过分配对象来完成工作。只要Java 堆被填满,就会出现糟糕的GC 性能并抛出表示Java 堆被填满的OutOfMemoryError。相反,一旦Java运行时开始运行并且应用程序处于稳定状态,它可以在本机堆完全耗尽之后继续正常运行。不一定会发生奇怪的行为,因为需要分配本机内存的操作比需要分配Java 堆的操作少得多。但一些常见操作还是 阅读全文

posted @ 2013-10-29 14:34 z-vipper 阅读(321) 评论(0) 推荐(0) 编辑

2013年9月8日

happens-before规则和指令重排

摘要: 《JAVA并发编程实战》阅读笔记1一、 指令重排指令重排序Java 语言规范规定了JVM线程内部维持顺序化语义,也就是说只要程序的最终结果等同于它在严格的顺序化环境下的结果,那么指令的执行顺序就可能 与代码的顺序不一致。这个过程通过叫做指令的重排序。指令重排序存在的意义在于:JVM能够根据处理器的特性(CPU的多级缓存系统、多核处理器等)适当 的重新排序机器指令,使机器指令更符合CPU的执行特点,最大限度的发挥机器的性能。重排序的背景我们知道现代CPU的主频越来越高,与cache的交互次数也越来越多。当CPU的计算速度远远超过访问cache时,会产生cache wait,过多的cache w. 阅读全文

posted @ 2013-09-08 00:16 z-vipper 阅读(2215) 评论(0) 推荐(0) 编辑

导航