自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

惟愿无事

不念过往 不畏将来

  • 博客(18)
  • 收藏
  • 关注

原创 ConcurrentHashMap源码分析(JDK8版本)

注:本文源码是JDK8的版本,与之前的版本有较大差异ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化.

2015-08-26 19:10:16 55515 42

原创 Spring 事务源码分析——Hibernate篇

在Spring与Hibernate整合的时候,可以利用Spring的事务管理机制,为我们管理事务的开启、提交、回滚等操作。这样的方式极大的减少了我们的代码量,让我们只专注于业务代码的编写。在使用Hibernate的时候,每一个操作都要经历事务开启与提交这样的操作,他们在业务代码的周围,这样来看是不是就想到了AOP编程,把这部分代码抽取出来。没错,Spring正是这样做的,Spring的事务管理就是

2015-08-26 18:40:20 2986 1

原创 Memcached

Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的hash表,该表以Key-value对的方式存在内存中。它实现了客户端的分布式缓存,但没有实现服务端的分布式。所谓分布式,就是将不同的键值保存到不同的服务器上,这样就实现了memcached的分布式。Memcached服务器增多以后,键就会分散,即使一台memc

2015-08-21 20:11:47 1448

原创 Spring AOP原理

Spring利用动态代理技术实现了AOP增强功能。这个动态代理是通过Java的动态代理或CGLIB技术实现。具体根据代理对象实现的是类或者接口来决定。Spring AOP的过程跟我们平时使用动态代理的过程是很相似的,只不过它帮助我们自动组装了增强方法与代理对象,这样我们就可以更加灵活,因为我们可以选择增强触发的时机,而且更加关注我们要做的事情。从原理以及源代码的角度,整个过程还是分为两个阶段,

2015-08-21 20:01:47 3617

原创 Spring Hibernate 开启事务

仅仅记录一下配置文件<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.sp

2015-08-19 19:48:17 2698

原创 Java语法糖

语法糖,又称语法糖衣,是英国计算机科学家发明的一个术语,指在计算机语言中加入某种语法,这种语法对语言的功能并没有影响,但是方便了程序员的操作,并且增加了代码的可读性,减少了出错的机会。Java在现代编程语言中,属于“低糖语言”(相对于JVM和c#)来说,尤其在JDK1.5之前,语法糖很少出现。Java中最常用的语法糖主要是泛型、变长参数、自动装箱、拆箱等,虚拟机运行时不支持这些语法糖操作,他们

2015-08-08 11:29:36 2615

原创 volatile 关键字

本文介绍了volatile关键字 的作用、适用场景、指令重排序和实现原理

2015-08-08 11:19:39 931 1

原创 JVM垃圾收集(四) 堆上分区分配与回收

1 堆分区1.1 新生代(Young Generation)和老年代(Tenured Generation)JVM根据对象生存的特点,将对象划分为新生代和老年代。大部分对象在JVM内存中处是新生代,他们有一个特点,“朝生夕死”,即他们的生命周期很短,伴随着一次GC可能就会被回收掉。相对于新生代来说,老年代就是相对“稳定”的一些对象。他们被JVM“认为”是可以长期存活的对象。一般来说

2015-08-08 11:12:21 2382

原创 JVM垃圾收集(三)垃圾收集器

先来看看目前主流的垃圾收集器和他们的关系介绍两个术语的区别并行:多个垃圾收集线程并行工作,但此时用户线程仍处于工作状态并发:用户线程与垃圾收集器线程同时执行(可能交替执行),用于线程仍在工作,垃圾收集程序运行于另一个CPU上。1Serial收集器Serial收集器是最基本,发展历史最久的收集器,在早期的版本中,它是唯一的垃圾收集器。这是一个单线程收集器,“单线程

2015-08-08 10:02:53 555

原创 JVM垃圾收集(二)垃圾收集算法

1 标记-清除算法(Mark-Sweep)这是最基础的算法,这个算法分为两个阶段标记和清除。首先标记出所有需要清除的对象,然后统一回收标记的对象。这种算法是最简单的,后续的算法都是在它的基础上改进得到的。它存在两个问题:它的标记和清除效率都不高是空间问题,标记清除后,产生大量的不连续的内存碎片。这可能导致在以后的对象分配的过程中,需要占用空间较大的对象可能找不到合适的连

2015-08-08 09:48:22 474

原创 JVM垃圾收集(一) 寻找垃圾

1 如何判断对象为“垃圾”在垃圾回收之前,首先要判断哪些对象为“垃圾”,也就是判断哪些对象已经死去了,这里面的死去的概念就是这个对象不可能再被任何途径使用。1.1     引用计数器法一个很简单、效率也很高的方法。给对象添加一个引用计数器,每当有一个地方引用它时,计数器+1;当引用失效时,计数器-1;任何时刻计算器值为0的对象即为不再被使用的对象。但是Java虚拟机没有使用这种

2015-08-08 09:39:18 908

原创 Java内存模型

内存模型可以理解为在特定的操作协议下,对特别的内存或高速缓存进行读写访问的过程抽象。不同架构的物理机器可以拥有不一样的内存模型,而Java虚拟机也有自己的内存模型。Java虚拟机规范中试图定义一种内存模型,来屏蔽掉各种硬件和操作系统的差异,以实现让让Java程序在各种平台下达到一致的访问效果。1 主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变

2015-08-08 09:26:21 530

原创 4 IoC容器的依赖注入(2)

相对于Bean的创建过程,注入过程显得简单而清晰的多。注入的过程整体分为两个阶段:第一个阶段是依据BeanDefition定义的property找到相关的属性值,这个过程中如果定义了autowireByName 或者autowireByType  优先进行这两个定义的查找,然后进行正常匹配,也就是我们定义的,这个部分会覆盖掉autowire的内容。以上所有找到的属性值都会放到一个deepc

2015-08-08 09:15:56 865

原创 JVM 如何创建Java对象

在Java程序中,创建一个对象通常需要一个new关键字就够了,但是在虚拟机中,这个过程却有点复杂,这里面包括了类加载、内存分配、初始化零值等等一系列的步骤。下面来看看JVM如何创建一个对象(这里面的对象仅仅限于不同的Java对象,不包括数组和Class对象)1 对象的创建1.1 类初始化当JVM遇到一条new的指令(与new关键字不是一个概念)时,首先去检查这个指令是否在常量池

2015-08-04 20:38:02 2048

原创 Spring的自动装配

1Spring自动装配的分类Spring能自动装配Bean与Bean之间的依赖关系,即无须使用ref显式地指定依赖Bean,而是由Spring容器检查XML配置文件内容。根据某种规则,为调用者Bean注入被依赖的Bean。Spring的自动装配可以通过元素的default-autowire属性指定,该属性对配置文件中所有的Bean起作用;也可以通过元素的autowire属性指定,该属性

2015-08-02 11:29:46 3103

原创 Spring 循环引用 ——理解singleton与prototype初始化的区别

spring的循环引用解决机制 以及singleton与prototype能否实现循环引用的原因。

2015-08-02 09:36:40 11444

原创 3 IoC容器的依赖注入(1)

在applicationContext加载的时候,已经将BeanDefition保存在一个concurrentHashMap中,然而这些并不是真正的bean,真正的bean其实还没有初始化以及依赖注入。对于整个依赖注入的过程,大致可以分为两个阶段,第一阶段是Bean的初始化,如何采用设值注入的方式,那么这个阶段就是利用默认构造器去构造一个空对象,等待着注入;如果是构造注入,那么这个过程可能就会

2015-08-01 10:43:34 1950

原创 F 序列化

Java 对象只有在虚拟机运行的情况下才存在,而虚拟机关闭了以后,这个对象也随着内存回收被释放掉,这种状态称为“瞬态”。如何把这种瞬态转换为持久态就是序列化要解决的问题。除了持久化需要用到序列化以外,把一个对象在网络上进行传输也是序列化的一个重要功能。在网络上,数据以字节的形式进行传输,序列化可以把一个对象作为整体在网络上传输,在网络的另一端,对这个整体进行还原。这样就实现了以对象为单位的传输。

2015-08-01 09:07:30 541

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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