JVM学习笔记

这是学习「深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)」时记录的笔记,共享出来。

图片可以直接下载:下载地址。

运行时数据区

程序计数器(ProgramCounter Register)

每个线程都有独立的程序计数器

一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器

虚拟机栈(VM Stack)

线程私有,生命周期与线程相同

每个方法执行时都会创建......

Spring中实现Proxy模式

Spring中使用Proxy模式很多,经典就是AOP中的代理了,但是这里想讨论的是我们在自己的代码中实现代理模式的问题。

在上一篇Spring实现factory模式中,我们需要使用Person里面的方法,但是type是程序运行的过程中才知道是多少,如果要使用Person接口需要在代码里面动态的判断到底使用哪种对象,这时候使用Factory模式就很难实现这种了。

撇开配置,我们最直接的想法是

public interface Handler{

int handler( int type);

}

public class Handler1 implements Handler{

i......

Spring中实现Factory模式

Facory Pattern(工厂模式)

工厂模式分为工厂方法模式(也可以成为简单工厂)和抽象工厂模式。

例如工厂方法模式:

public interface Person{

String getName();

}

public Class Male implements Person{

String getName(){

return "Male";

}

}

public Class Female implements Person{

String getName(){

return "Female";

}

}

public class ......

Spring管理junit transaction

OTP

我们在日常的开发中,很大部分ut 都是测试数据库的增删改查功能,重复的ut常常因为数据库不一致而失败,例如第一次测试的时候刚刚插入了一条数据,再运行同样的ut因为数据重复就会失败。因此最好的测试方式是自己mock数据。每次ut在结束的时候都将数据库状态恢复到初始状态。这里就介绍一种spring使用transaction实现的方式。

在spring配置文件中配置数据库事务管理:

<tx:anno......