JNI(一)使用实例HelloWorld

1、编写Java程序TestHello类,声明native方法hello。 package com.charles; public class TestHello { static { System.loadLibrary("TestHello"); } public static native void hello(String msg); public static void main(Strin ...

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

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

JVM(四)类文件结构解析

Java Class文件结构如下图所示 对于以下java源文件代码 public class Charles implements ICharles{ private String name; public void say() { System.out.println("charles"); } public String getName() { return name; } pu ...

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

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

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

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

Java锁(四)ConditionObject分析

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

Java锁(三)CountDownLatch共享锁分析

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

JDK设计模式(十七)命令模式

1、概述 命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 2、解决的问题 用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。 3、模式中的角色 1、命令(Command)角色:定义命令的接口,声明执行的方法。 2、具体命令(ConcreteCommand)角色:命令接口实现对象,通常它会持有命令的接收者,通过调用接收者相应的功能方法来执行当前命令所要完成的操作。 3、 ...

JDK设计模式(十六)责任链模式

1、概述 责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 2、解决的问题 如果有多个对象都有可能接受请求,可以避免请求发送者与接收者耦合在一起。 3、模式中的角色 1、抽象处理者角色(Handler): 定义一个处理请求的接口,和一个后继连接(可选) 2、具体处理者角色(ConcreteHandler): 处理它所负责的请求,可以访问后继者,如果可以处理请求则处理, ...

JDK设计模式(十五)迭代器模式

1. 概述 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 2. 解决的问题 把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,也让责任各得其所。 3. 模式中的角色 1、抽象迭代器(Iterator):定义出遍历元素所需的接口。 2、具体迭代器(ConcreteIterator):实现Iterator接口,并保持迭代过程中的游标位置。 3、聚集(Aggregate):给出创建迭代器(Iterator)对 ...