技术沉淀与实践分享 · 第 7 页

volatile关键字与内存模型

对volatile关键字的理解,与java的内存模型的概念是分不开的。 从内存模型说起 java中有个概念叫内存模型,大体是这样的一种结构: [ ]()java内存模型 java内存模型规定了所有的变量都存储在主内存中,即是虚拟机内存的一部分。 每条线程拥有自己的工作内存,线程不能直接读写主内存中的

设计模式之适配器模式

适配器模式 所谓适配器,其实就是在不得不调用某个底层接口规范, 但出于某些需要又必须声明自己专属的接口规范的时候,可以声明一个对象实现自己的接口、同时又调用到该底层接口, 该对象即是适配器。 适配器做了两个接口之间的转换工作, 提供自定义接口的同时又隐藏了实际的底层接口。 角色 适配者对象:Adpt

设计模式之责任链模式

责任链模式 在责任链模式里,一个对象表示链的一个节点,由多个节点对象组成了一条有先后顺序的链对象。有些链对象内部会维护一个数组,来存储这些节点对象,有些则是在每个节点中声明下个节点的引用。 Tomcat中的Filter以及SpringSecurity的拦截器就是使用了责任链模式。 案例1 使用责任链

设计模式之装饰模式

装饰模式 装饰模式(Decorator Pattern)是一种比较常见的模式,动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 tomcat源码中RequestFacade就是对Request的装饰类。 案例 被装饰者 ` //被装饰者 public class C

设计模式之观察者模式

观察者模式 观察者模式经常被用于监督进度条等场景,其特点如下: 1、观察者模式主要分为两个主体:观察者和通知者,在某些行为触发时,通知者将会通知观察者。 2、观察者需要将自己的对象交给通知者,以便通知者能够调用观察者的方法,进行通知行为。 3、观察者和通知者是多对一的关系。 4、这种模式的缺点在于,

设计模式之模板方法模式

模板方法模式 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。 比如定义一个操作中的算法的骨架,将步骤延迟到

软引用对象的使用

如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。这通常能够用在缓存删除的场景,让缓存对象实现软引用,那么在内存不够的时候,缓存对象就能被回收,释放内存。 案例1,不使用软引用 jvm参数设置:-Xms5M -Xmx5M -XX:+PrintG

强引用对象并非不会被回收

在《深入理解java虚拟机》第二版中第3章,有写到: 强引用就是指在程序代码之中普遍存在的,类似“Object obj = new Object()”这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。《深入理解java虚拟机》 这段话很容易让人理解成, 类似“Object obj

JVM简单总结

jvm内存区域 [ ]() 1、程序计数器:每个线程都有自己的一个程序计数器,记录所执行的字节码的行号。 2、虚拟机栈:每个线程独有的,生命周期与线程相同。一个方法被执行的时候就会创建一个栈帧,方法的执行至结束对应着栈帧的入栈至出栈的过程。 3、本地方法栈: 与虚拟机栈作用类似,但它只为本地nati

根据JVM日志计算JVM参数

一、程序 ` public class Test5 { public static void main(String[] args) { byte[] b =null; for (int i = 0; i < 10; i++) { b=

JVM日志分析之五

一、程序 ` public class Test5 { public static void main(String[] args) { byte[] b =null; for (int i = 0; i < 10; i++) { b=

JVM日志分析之四

一、程序 ` public class Test4 { public static void main(String[] args) { byte[] b =null; for (int i = 0; i < 10; i++) { b=