Fouy_风度玉门。

http://moguhu.com

ClassLoader类加载器

ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的。ClassLoader通过各种方式,将CLass信息的二进制流读入系统,然后交给JVM进行连接、初始化等操作。 比较两个类是否“相等”         比较两个类是否“相等”,只有在这两个类是由同...

2017-09-17 20:40:47

阅读数 254

评论数 0

Class字节码指令解释执行

JVM指令主要包含了一下几种类型:加载和存储指令、运算指令、类型转换指令、对象创建与访问指令、操作数栈管理指令、控制转移指令、方法调用和返回指令、异常处理指令、同步指令等。 基于栈的解释器执行过程         下面看一下一个简单的代码片段,如下所示: public class StackTe...

2017-09-17 16:00:19

阅读数 1298

评论数 0

Class文件结构

Class文件是由Java语言或者其他语言编译而得到的,然后再交给JVM去加载和执行。对于Class文件,我们可以通过文本编辑器查看它的16进制编码,然后分析它的组成构造。下面我们看一下Class文件包含哪些模块:         对于Class字节码文件的查看,最初我们会用16进制的文本编...

2017-09-17 15:37:08

阅读数 392

评论数 0

LongAdder | LongAccumulator简介

说到LongAdder,不得不提的就是AtomicLong。AtomicLong是JDK1.5开始出现的,里面主要使用了一个long类型的value作为成员变量。然后使用循环的CAS操作去操作value的值。 优化思想         LongAdder是JDK1.8开始出现的,所提供的API基本...

2017-09-03 20:18:23

阅读数 2011

评论数 0

StampedLock的简单用法

StampedLock是JDK1.8新引入的锁机制,可以简单的理解为读写锁的改进版本。我们知道读写锁可以让读和读之间完全并发,但是读和写之间是有阻塞的。StampedLock使用了一种乐观锁的读策略,这种机制类似于无锁的概念,使得获取锁的过程中不会阻塞写线程。 简单例子         下面给出一...

2017-09-03 20:08:58

阅读数 629

评论数 0

CompletableFuture用法

CompletableFuture是JDK1.8新增的工具类。它继承了Future和CompletionStage接口,里面提供了大量的链式调用的API。下面简单的介绍一下其用法: 异步执行任务         CompletableFuture对接口的封装,使得调用者很容易实现Future模式的...

2017-09-03 19:59:44

阅读数 881

评论数 0

Future模式

Future模式是一种让调用线程可以异步处理任务的设计模式,它可以让调用线程利用异步处理的时间去执行其他任务,从而使硬件资源达到一个更好的利用率。参考以下时序图:         下面介绍一下各个成员的作用: MainTest:主线程入口,调用Client发出请求。Client:开启异步...

2017-09-03 19:52:21

阅读数 196

评论数 0

CPU Cache的优化:解决伪共享问题

伪共享问题(false sharing)         对于解释伪共享问题,就需要了解一下缓存行的相关概念。缓存行是主存复制到高速缓存的最小单位,一般情况下缓存行的大小为32~128字节(通常为64字节)。           在多线程程序执行的过程中,有可能将2个或多个需要频繁修改的变量存...

2017-09-03 19:42:04

阅读数 685

评论数 0

生产者消费者模式

单生产者单消费者模式         生产者消费者模型是一个经典的问题,其主要有3部分构成:生产者、阻塞队列和消费者。如下图所示:         生产者消费者模式,可以在一定程度上面做到程序之间的模块解耦。但是还有一个主要的特性,就是它可以通过阻塞队列来协调生产者和消费者的处理速率不同的问...

2017-09-03 12:20:12

阅读数 291

评论数 0

Java锁优化

我们在多线程编程的过程中,对于锁的使用有一些可以优化的地方。下面介绍一下,自己在写业务代码中需要注意的问题和JVM对锁的优化操作。 业务代码中的注意事项 减少锁的持有时间:意思就是在同步快内部的代码,对于不需要同步控制的代码片段,尽量不要写在同步快内部。减小锁粒度:这个可以用JDK中的...

2017-09-03 12:12:32

阅读数 369

评论数 0

ConcurrentLinkedQueue的实现

今天我们介绍一下ConcurrentLinkedQueue的内部实现。从名字就可以看出来,其内部使用链表实现。下面介绍一下它的结构: 基本结构         单单从类图看来,结构不算复杂,有两个重要的属性就是head和tail。 方法操作 CAS操作         Nod...

2017-09-03 12:01:31

阅读数 175

评论数 0

CopyOnWriteArrayList的实现

CopyOnWriteArrayList是自JDK5开始提供的支持并发读写的List。从名字可以大致的看出来其内部的设计思想:在写入前copy一份数据以提供修改。下面看一下具体的实现: 基本结构 final transient ReentrantLock lock = new Reen...

2017-09-03 11:49:11

阅读数 157

评论数 0

ConcurrentHashMap的JDK1.8实现

今天我们介绍一下ConcurrentHashMap在JDK1.8中的实现。 基本结构         ConcurrentHashMap在1.8中的实现,相比于1.7的版本基本上全部都变掉了。首先,取消了Segment分段锁的数据结构,取而代之的是数组+链表(红黑树)的结构。而对于锁的粒度,调...

2017-09-03 11:31:12

阅读数 7969

评论数 5

提示
确定要删除当前文章?
取消 删除
关闭
关闭