Java注解(一)注解基础

 注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式。注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样。那么,注解到底可以做什么呢? 1、注解的作用 提供用来完整地描述程序所需要的信息,如编译期校验程序信息。 生成描述符文件,或生成新类的定义。 减轻编写“样板”代码(配置文件)的负担,可以使用注解自动 […]

Java锁(五)CyclicBarrier分析

CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉Cyclic […]

OpenJDK8构建

1.环境介绍 OpenJDK代码: http://hg.openjdk.java.net/jdk8u/jdk8u 2.JDK安装 这里安装的是构建OpenJDK需要依赖的JDK, 一般是当前构建版本的上一个版本, 比如我们这里需要安装JDK7,已经安装的可以略过这一步。 sudo add-apt-repository ppa:webupd8team/java sudo apt-get update […]

Java并发(一)volatile使用和解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一 […]

JVM(二)垃圾收集算法与收集器

Java堆中几乎存放着java中所有的对象实例,垃圾收集器在对堆进行回收前,需要确定哪些对象还”存活”着,哪些已经“死去”。垃圾回收必须能够完成两件事情:正确检测出垃圾对象;释放垃圾对象占用的空间。 1、垃圾检测算法 当前常见的检测垃圾的方法包括两种:1. 引用计数法;2. 可达性分析算法。 1.1 引用计数算法(Reference Counting) 给对象添加一个引用计数器,每当该对象被引用, […]

JVM(一)Java内存区域与内存溢出

Java内存区域 Java虚拟机所管理的内存将包括以下几个运行时数据区域,如下图所示: 程序计数器: ProgramCounterRegister是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变程序计数器的值来选取下一条要执行的字节码指令,分支、循环、跳转、异常跳转、线程恢复等基础功能都需要依赖这个计数器来完成。 由于Java虚拟机的多线程 […]

Java锁(四)ConditionObject分析

在讲ConditionObject之前,先讲解下条件队列。条件队列能够使得一组线程能够通过某种方式来等待特定的条件变成真,条件队列中的成员是一个个正在等待状态的线程。条件队列提供了一种挂起方式,当现场等待的条件非真时,挂起自己并释放锁,一旦等待条件为真,则立即醒来。这也是条件队列提供的主要功能。 1、隐式锁对应的条件队列 对象的内置锁(synchronized语义对应的同步机制),关联着一个内置的 […]

Java锁(三)CountDownLatch共享锁分析

在开始解读AQS的共享功能前,我们再重温一下CountDownLatch,CountDownLatch为java.util.concurrent包下的计数器工具类,常被用在多线程环境下,它在初始时需要指定一个计数器的大小,然后可被多个线程并发的实现减1操作,并在计数器为0后调用await方法的线程被唤醒,从而实现多线程间的协作。 class Driver2 { void main() throws […]