框架演进之路(一)--从复杂调用到逻辑分层

部门的框架在上次经过重构了以后,已经从一个所有的业务逻辑从头到尾都是方法调用的系统,演进到成为业务逻辑分层的架构,分层架构的最大的一个好处就是能够

2016-10-05 22:59:20

阅读数 458

评论数 0

java设计模式(十一)--状态模式

早之前就研究过老大开发的订单框架,一直想把它的最核心部分用到的设计模式放到最后面来写,作为本系列博客的收官之作。这段时间决定把部门框架的演进之路作为一个系列的博客写出来,而新框架最核心的部分就是订单,在我们的金融系统里面,所有的业务请求,都被视为一笔订单。而订单的核心代码,其实就是一个状态机的实现...

2016-06-20 02:03:40

阅读数 491

评论数 0

深入java虚拟机(九)--常见问题总结

1.     JVM运行时内存结构 1.由如下图构成。Runtime Data Area有如下几个区,其中PC程序计数器、虚拟机栈和本地方法栈是线程独享的,堆和方法区是线程共享的。Classload用来加载class文件,执行引擎用来执行程序,本地方法接口调用本地方法库。 2.java s...

2016-06-16 13:55:55

阅读数 3154

评论数 0

深入java虚拟机(八)--Java垃圾收集机制

对象引用     Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例。谈到Java堆中的垃圾回收,自然要谈到引用。在JDK1.2之前,Java中的引用定义很很纯粹:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代...

2016-06-16 06:04:57

阅读数 427

评论数 0

深入java虚拟机(七)--Javac编译与JIT编译

编译过程     不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行:          其中绿色的模块可以选择性实现。很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解...

2016-06-16 06:04:34

阅读数 509

评论数 0

深入java虚拟机(六)--Java语法糖

语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这...

2016-06-16 06:04:15

阅读数 462

评论数 0

深入java虚拟机(五)--多态性实现机制——静态分派与动态分派

方法解析     Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给Java带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法...

2016-06-16 06:03:59

阅读数 393

评论数 0

深入java虚拟机(四)--类加载机制

类加载过程     类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:     其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶...

2016-06-16 06:03:05

阅读数 391

评论数 0

深入java虚拟机(三)--类初始化

类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化: 遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发其初始化...

2016-06-16 06:02:23

阅读数 304

评论数 0

深入java虚拟机(二)--Class类文件结构

平台无关性     Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并...

2016-06-16 06:02:00

阅读数 475

评论数 0

深入java虚拟机(一)--Java内存区域与内存溢出

内存区域     Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。    ...

2016-06-16 06:01:17

阅读数 356

评论数 0

java并发编程(二十四)--面试题合集

下面是Java线程相关的热门面试题,你可以用它来好好准备面试。 1) 什么是线程?   线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫...

2016-06-13 16:08:48

阅读数 1078

评论数 0

java并发编程(二十三)--并发新特性—信号量Semaphore

在操作系统中,信号量是个很重要的概念,它在控制进程间的协作方面有着非常重要的作用,通过对信号量的不同操作,可以分别实现进程间的互斥与同步。当然它也可以用于多线程的控制,我们完全可以通过使用信号量来自定义实现类似Java中的synchronized、wait、notify机制。     Jav...

2016-06-13 13:19:33

阅读数 318

评论数 0

java并发编程(二十二)--并发新特性—障碍器CyclicBarrier

CyclicBarrier(又叫障碍器)同样是Java 5中加入的新特性,使用时需要导入java.util.concurrent.CylicBarrier。它适用于这样一种情况:你希望创建一组任务,它们并发地执行工作,另外的一个任务在这一组任务并发执行结束前一直阻塞等待,直到该组任务全部执行结束,...

2016-06-13 13:17:52

阅读数 348

评论数 0

java并发编程(二十一)--并发新特性—阻塞队列和阻塞栈

阻塞队列     阻塞队列是Java 5并发新特性中的内容,阻塞队列的接口是java.util.concurrent.BlockingQueue,它有多个实现类:ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockin...

2016-06-13 13:15:21

阅读数 352

评论数 0

java并发编程(二十)--并发新特性—Lock锁和条件变量

简单使用Lock锁     Java 5中引入了新的锁机制——java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作。Lock接口有3个实现它的类:ReentrantLock、ReetrantReadWrite...

2016-06-13 13:04:02

阅读数 1331

评论数 0

java并发编程(十九)--并发新特性—Executor框架与线程池

Executor框架简介     在Java 5之后,并发编程引入了一堆新的启动、调度和管理线程的API。Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作...

2016-06-13 12:58:52

阅读数 507

评论数 0

java并发编程(十八)--深入Java内存模型—内存操作规则总结

主内存与工作内存     Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量主要是指共享变量,存在竞争问题的变量。Java内存模型规定所有的变量都存储在主内存中,而每条线程还有自己的工作内存,线程的工作内存中保存...

2016-06-13 12:49:57

阅读数 496

评论数 0

java并发编程(十七)--深入Java内存模型——happen-before规则及其对DCL的分析

happen—before规则介绍     Java语言中有一个“先行发生”(happen—before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说,在发生操作B之前,操作A产生的影响都能被操作B观察到,“影响”包括修改了内存中共享变...

2016-06-13 12:46:40

阅读数 323

评论数 0

java并发编程(十六)--生产者—消费者模型

生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。     这里实现如下情况的生产--消费模型:     生产者不断交替地生产两组数据“姓名--1 --> 内容--1”,“姓名--2--> 内容-...

2016-06-13 12:42:03

阅读数 313

评论数 0

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