java
yushuifirst
这个作者很懒,什么都没留下…
展开
-
Java GC、新生代、老年代
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。 堆的内存模型转载 2015-07-11 20:49:47 · 552 阅读 · 0 评论 -
Java并发编程之闭锁CountDownLatch和栅栏(CyclicBarrier)
栅栏类似闭锁,但是它们是有区别的.1.闭锁用来等待事件,而栅栏用于等待其他线程.什么意思呢?就是说闭锁用来等待的事件就是countDown事件,只有该countDown事件执行后所有之前在等待的线程才有可能继续执行;而栅栏没有类似countDown事件控制线程的执行,只有线程的await方法能控制等待的线程执行.2.CyclicBarrier强调的是n个线程,大家相互等待,只要有一个没完成,所有人都转载 2015-08-31 16:20:23 · 996 阅读 · 0 评论 -
Java线程调度器ScheduledThreadPoolExecutor 分析
自jdk1.5开始,Java开始提供ScheduledThreadPoolExecutor类来支持周期性任务的调度,在这之前,这些工作需要依靠Timer/TimerTask或者其它第三方工具来完成。但Timer有着不少缺陷,如Timer是单线程模式,调度多个周期性任务时,如果某个任务耗时较久就会影响其它任务的调度;如果某个任务出现异常而没有被catch则可能导致唯一的线程死掉而所有任务都不会再被调度原创 2015-08-04 10:47:47 · 821 阅读 · 0 评论 -
java线程池原理
原文地址: http://www.cnblogs.com/xiaoQLu/archive/2013/05/13/2870588.html下面开始今天的正文,线程池的核心类为ThreadPoolExecutor类,线程池基本是围绕它展开的,网上有大堆的学习资料,想快速入门,还是看JDK API,里面有详细的类说明,这里主要介绍其流程以及分析固定线程池(Executors.newFixedThreadP转载 2015-08-03 22:04:12 · 280 阅读 · 0 评论 -
java 伪共享(false sharing)解决思路
怎么样避免伪共享呢?一个典型的例子就是lmax disruptor中的缓存行填充技术。假设cache line的大小是64字节,一个cache line能容纳8个long型变量,disruptor中的做法是在long变量的前面和后面分别填充7个long变量,这样就可以避免我们需要的变量和其他变量在同一个cache line,解决伪共享问题。(当变量类型不是long的时候,我们要在此变量前后填充一些变原创 2015-08-02 16:03:38 · 678 阅读 · 0 评论 -
reentrantlock与synchronized
关于互斥锁:所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们通常使用synchronized机制控制多个线程对共享资源的访问. 而现在, Lock提供了比synchronized机制更广泛的锁定操作, Lock和synchronized机制的主要区别:synchronized机制提供了对与每个对象相关的隐式监视器锁的访问, 并强制所有锁获取和释放均要出现在一个块结构中原创 2015-08-02 14:45:49 · 484 阅读 · 0 评论 -
Java并发编程:并发容器之CopyOnWriteArrayList(转载)
原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器转载 2015-07-21 16:47:33 · 501 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
Java并发编程:volatile关键字解析原文链接:http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然转载 2015-07-21 14:35:57 · 367 阅读 · 0 评论 -
JVM --并发垃圾回收器CMS
1.总体介绍:CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。 2.CMS过程:初始标记(STW initial mark)并发标记(C转载 2015-07-14 15:14:26 · 1655 阅读 · 0 评论 -
MethodHandle与反射Method区别,invokedynamic指令
MethodHandle与反射Method区别MethodHandle的使用方法和效果上与Reflection都有众多相似之处。不过,它们也有以下这些区别:Reflection和MethodHandle机制本质上都是在模拟方法调用,但是Reflection是在模拟Java代码层次的方法调用,而MethodHandle是在模拟字节码层次的方法调用。在MethodHandles.Lookup上的三个方原创 2015-08-27 15:50:14 · 6691 阅读 · 0 评论 -
探索 ConcurrentHashMap 高并发性的实现机制(转载)
探索 ConcurrentHashMap 高并发性的实现机制ConcurrentHashMap 是 Java concurrent 包的重要成员。本文将结合 Java 内存模型,来分析 ConcurrentHashMap 的 JDK 源代码。通过本文,读者将了解到 ConcurrentHashMap 高并发性的具体实现机制。这对于我们在实际应用中更加高效的使用它是很有帮助的。简介Concurrent转载 2015-07-17 14:52:20 · 416 阅读 · 0 评论 -
Java 泛型数组
Java 不支持泛型数组。也就是说,[java] view plaincopyList[] ls = new ArrayList[10]; 是不支持的,而[java] view plaincopyList[] ls = new ArrayList[10] 却可以。是我一直不清楚为什么不能够声明泛型的数组,指转载 2015-08-24 16:59:32 · 375 阅读 · 0 评论 -
java --threadgroup线程组与UncaughtExceptionHandler
threadgroup线程组1.线程组表示一个线程的结合.此外线程组也可以包含其他线程组.线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。 2.每个线程产生时,都会被归入某个线程组(Java中每个线程都是属于某个线程组),视线程是在那个线程组中产生而定.如果没有指定,则归入产生该子线程的线程的线程组中.(如在main中初始化一个线程,未指定线程组,则线程所属线程组为main原创 2015-08-31 15:07:05 · 875 阅读 · 0 评论