博客园 - 没有梦想的小灰灰
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=84728
2016-11-01T16:06:37Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
feed.cnblogs.com
https://www.cnblogs.com/13jhzeng/p/5913762.html
java.lang.ThreadLocal源码分析 - 没有梦想的小灰灰
ThreadLocal类提供线程本地变量,为变量在每个线程创建一个副本,每个线程可以访问自己内部的副本变量。 比如,有这样一个需求,需要为每个线程创建一个独一无二的标识,这个标识在第一次调用ThreadId.get()的时候生成,在随后的调用中不会再改变。 类声明: 实例变量和相关的一个方法: 构造
2016-09-28T07:05:00Z
2016-09-28T07:05:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】ThreadLocal类提供线程本地变量,为变量在每个线程创建一个副本,每个线程可以访问自己内部的副本变量。 比如,有这样一个需求,需要为每个线程创建一个独一无二的标识,这个标识在第一次调用ThreadId.get()的时候生成,在随后的调用中不会再改变。 类声明: 实例变量和相关的一个方法: 构造 <a href="https://www.cnblogs.com/13jhzeng/p/5913762.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5897311.html
虚拟机类加载机制 - 没有梦想的小灰灰
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类加载的时机 从加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载,其中验证、准备、解析3个
2016-09-23T06:32:00Z
2016-09-23T06:32:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类加载的时机 从加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载,其中验证、准备、解析3个 <a href="https://www.cnblogs.com/13jhzeng/p/5897311.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5883660.html
线程安全与锁优化 - 没有梦想的小灰灰
线程安全的概念限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说完全没有区别。 线程安全的程度:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 1.不可变 不可变的对象一定是线程安全的,只要
2016-09-19T04:13:00Z
2016-09-19T04:13:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】线程安全的概念限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说完全没有区别。 线程安全的程度:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 1.不可变 不可变的对象一定是线程安全的,只要 <a href="https://www.cnblogs.com/13jhzeng/p/5883660.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5873696.html
Java线程角度的内存模型和volatile型变量 - 没有梦想的小灰灰
内存模型的目标是定义程序中各个变量的访问 规则,即在虚拟机中将变量(包括实例字段,静态字段和构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的)存储到内存和从内存中取出变量这样的底层细节。 Java内存模型规定所有的变量都存储在主内存,每条线程还有自己的工作内存,工作内存保存了被该线
2016-09-14T14:22:00Z
2016-09-14T14:22:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】内存模型的目标是定义程序中各个变量的访问 规则,即在虚拟机中将变量(包括实例字段,静态字段和构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的)存储到内存和从内存中取出变量这样的底层细节。 Java内存模型规定所有的变量都存储在主内存,每条线程还有自己的工作内存,工作内存保存了被该线 <a href="https://www.cnblogs.com/13jhzeng/p/5873696.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5845845.html
java.util.TreeSet源码分析 - 没有梦想的小灰灰
TreeSet是基于TreeMap实现的,元素的顺序取决于元素自身的自然顺序或者在构造时提供的比较器。 对于add,remove,contains操作,保证log(n)的时间复杂度。 因为Set接口的定义根据equals方法,但是TreeSet接口约定元素的顺序基于compareTo或者compar
2016-09-06T07:13:00Z
2016-09-06T07:13:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】TreeSet是基于TreeMap实现的,元素的顺序取决于元素自身的自然顺序或者在构造时提供的比较器。 对于add,remove,contains操作,保证log(n)的时间复杂度。 因为Set接口的定义根据equals方法,但是TreeSet接口约定元素的顺序基于compareTo或者compar <a href="https://www.cnblogs.com/13jhzeng/p/5845845.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5844680.html
垃圾收集器(二) - 没有梦想的小灰灰
Serial收集器:是一个单线程的收集器,使用一个CPU或一条收集线程。在进行垃圾收集时,必须暂停其他所有的工作线程,直到收集结束。在用户不可见的情况下,把正常工作的线程全部停止,对很多应用来说难以接受,所以虚拟机开发团队一直寻求消除或减少停顿时间的方法。它是虚拟机运行在Client模式下的默认新生
2016-09-06T02:11:00Z
2016-09-06T02:11:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】Serial收集器:是一个单线程的收集器,使用一个CPU或一条收集线程。在进行垃圾收集时,必须暂停其他所有的工作线程,直到收集结束。在用户不可见的情况下,把正常工作的线程全部停止,对很多应用来说难以接受,所以虚拟机开发团队一直寻求消除或减少停顿时间的方法。它是虚拟机运行在Client模式下的默认新生 <a href="https://www.cnblogs.com/13jhzeng/p/5844680.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5840084.html
MySQL引擎 - 没有梦想的小灰灰
MySQL提供多种存储引擎,通过命令 show engines; 查看 查看当前默认的存储引擎 show variables like '%storage_engine%'; 查看某个表用了什么引擎 show create table 表名; MyISAM引擎: 没有提供对数据库事务的支持,也不支持
2016-09-04T12:02:00Z
2016-09-04T12:02:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】MySQL提供多种存储引擎,通过命令 show engines; 查看 查看当前默认的存储引擎 show variables like '%storage_engine%'; 查看某个表用了什么引擎 show create table 表名; MyISAM引擎: 没有提供对数据库事务的支持,也不支持 <a href="https://www.cnblogs.com/13jhzeng/p/5840084.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5793972.html
java.util.TreeMap源码分析 - 没有梦想的小灰灰
TreeMap的实现基于红黑树,排列的顺序根据key的大小,或者在创建时提供的比较器,取决于使用哪个构造器。 对于,containsKey,get,put,remove操作,保证时间复杂度为log(n)。 TreeMap的顺序与equals方法保持一致,这样才能遵守Map和SortMap的约定。 实
2016-09-04T05:07:00Z
2016-09-04T05:07:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】TreeMap的实现基于红黑树,排列的顺序根据key的大小,或者在创建时提供的比较器,取决于使用哪个构造器。 对于,containsKey,get,put,remove操作,保证时间复杂度为log(n)。 TreeMap的顺序与equals方法保持一致,这样才能遵守Map和SortMap的约定。 实 <a href="https://www.cnblogs.com/13jhzeng/p/5793972.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5828094.html
java.util.Vector - 没有梦想的小灰灰
实例变量 4个构造器 扩容方法 设置容量 2个迭代器,一个从头迭代到尾,一个从尾迭代到头 Vector是线程安全的,它的方法使用synchronized修饰,如果不需要线程安全,推荐使用ArrayList代替。
2016-08-31T16:24:00Z
2016-08-31T16:24:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】实例变量 4个构造器 扩容方法 设置容量 2个迭代器,一个从头迭代到尾,一个从尾迭代到头 Vector是线程安全的,它的方法使用synchronized修饰,如果不需要线程安全,推荐使用ArrayList代替。 <a href="https://www.cnblogs.com/13jhzeng/p/5828094.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5824208.html
内存分配和回收策略 - 没有梦想的小灰灰
对象的内存分配,大部分在堆上分配(少部分经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden,如果启动了本地线程分配缓存,将按线程优先在TLAB上分配,少数情况下也可能会分配在老年代中,分配的规则不固定,取决于使用哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置
2016-08-30T16:01:00Z
2016-08-30T16:01:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】对象的内存分配,大部分在堆上分配(少部分经过JIT编译后被拆散为标量类型并间接地栈上分配),对象主要分配在新生代的Eden,如果启动了本地线程分配缓存,将按线程优先在TLAB上分配,少数情况下也可能会分配在老年代中,分配的规则不固定,取决于使用哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置 <a href="https://www.cnblogs.com/13jhzeng/p/5824208.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5812127.html
java.util.LinkedList源码分析 - 没有梦想的小灰灰
LinkedList是一个双向链表的实现,允许所有的元素,包括null。 对于index操作,会从链头到链尾地搜索,即使它靠近一个特殊索引位置。 非线程安全的,在多线程环境下,需要外部同步或调用Collections.synchronizedList(new LinkedList(...));获得一
2016-08-27T07:56:00Z
2016-08-27T07:56:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】LinkedList是一个双向链表的实现,允许所有的元素,包括null。 对于index操作,会从链头到链尾地搜索,即使它靠近一个特殊索引位置。 非线程安全的,在多线程环境下,需要外部同步或调用Collections.synchronizedList(new LinkedList(...));获得一 <a href="https://www.cnblogs.com/13jhzeng/p/5812127.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5805172.html
java.util.ArrayList源码分析 - 没有梦想的小灰灰
可变数组大小的List实现,允许所有的元素,包括null。(该类可粗略地看作是Vector,除了它不是同步化的) size、isEmpty、get、set、iterator和listIterator操作的运行时间是常量。add操作对于添加n个元素,需要O(n)的时间。其他的操作需要线性时间。 每个A
2016-08-25T16:30:00Z
2016-08-25T16:30:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】可变数组大小的List实现,允许所有的元素,包括null。(该类可粗略地看作是Vector,除了它不是同步化的) size、isEmpty、get、set、iterator和listIterator操作的运行时间是常量。add操作对于添加n个元素,需要O(n)的时间。其他的操作需要线性时间。 每个A <a href="https://www.cnblogs.com/13jhzeng/p/5805172.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5799253.html
面向切面的Spring - 没有梦想的小灰灰
在软件开发中,发布于应用中多处的功能被称为横切关注点。通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但往往直接嵌入到应用的业务逻辑之中)。将横切关注点与业务逻辑相分离是AOP所要解决的。 一、AOP术语 1.通知(Advice):定义切面是什么以及何时使用。除了描述要完成的工作,还要解决何
2016-08-24T09:41:00Z
2016-08-24T09:41:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】在软件开发中,发布于应用中多处的功能被称为横切关注点。通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但往往直接嵌入到应用的业务逻辑之中)。将横切关注点与业务逻辑相分离是AOP所要解决的。 一、AOP术语 1.通知(Advice):定义切面是什么以及何时使用。除了描述要完成的工作,还要解决何 <a href="https://www.cnblogs.com/13jhzeng/p/5799253.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5796418.html
最小化Spring XML配置 - 没有梦想的小灰灰
Spring提供两种技巧,可以帮助我们减少XML的配置数量。 1.自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系。 2.自动检测(autodiscovery)比自动装配更进一步,
2016-08-23T03:30:00Z
2016-08-23T03:30:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】Spring提供两种技巧,可以帮助我们减少XML的配置数量。 1.自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系。 2.自动检测(autodiscovery)比自动装配更进一步, <a href="https://www.cnblogs.com/13jhzeng/p/5796418.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5797728.html
java.util.TreeSet源码分析 - 没有梦想的小灰灰
TreeSet的实现基于TreeMap,元素的顺序取决于元素自然顺序或者在被创建出来时提供的比较器。 对于基本操作,add、remove、contains的时间复杂度为logn。 不是线程安全的,如果在多线程环境下,必须被同步化,可通过一个object作为锁来同步,或者使用Collections.s
2016-08-22T15:59:00Z
2016-08-22T15:59:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】TreeSet的实现基于TreeMap,元素的顺序取决于元素自然顺序或者在被创建出来时提供的比较器。 对于基本操作,add、remove、contains的时间复杂度为logn。 不是线程安全的,如果在多线程环境下,必须被同步化,可通过一个object作为锁来同步,或者使用Collections.s <a href="https://www.cnblogs.com/13jhzeng/p/5797728.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5793859.html
java.util.HashSet源码分析 - 没有梦想的小灰灰
HashSet实现Set接口,内部维护一个HashMap实例变量。不保证顺序,允许null元素。 对于基本的操作,如add,remove,contains,size,只需要常量的时间复杂度。 不是线程安全的,如果在多线程环境下,需要被同步化,如调用方法Collections.synchronized
2016-08-21T14:34:00Z
2016-08-21T14:34:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】HashSet实现Set接口,内部维护一个HashMap实例变量。不保证顺序,允许null元素。 对于基本的操作,如add,remove,contains,size,只需要常量的时间复杂度。 不是线程安全的,如果在多线程环境下,需要被同步化,如调用方法Collections.synchronized <a href="https://www.cnblogs.com/13jhzeng/p/5793859.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5793585.html
HotSpot算法实现 - 没有梦想的小灰灰
1.枚举根节点 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中。 可达性分析对执行时间的敏感体现在GC停顿上,因为分析工作必须在能确保一致性的快照中进行,即不可以出现在分析过程中对象引用关系还在不断变化,所以这是导致GC进行时必须停顿所
2016-08-21T13:03:00Z
2016-08-21T13:03:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】1.枚举根节点 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中。 可达性分析对执行时间的敏感体现在GC停顿上,因为分析工作必须在能确保一致性的快照中进行,即不可以出现在分析过程中对象引用关系还在不断变化,所以这是导致GC进行时必须停顿所 <a href="https://www.cnblogs.com/13jhzeng/p/5793585.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5788465.html
垃圾收集器(一) - 没有梦想的小灰灰
GC需要完成的3件事情: 1.哪些内存需要回收? 2.什么时候回收? 3.如何回收? 哪些内存需要回收? 对于程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈帧随方法的进入和退出执行入栈和出栈的操作。每一个栈帧分配多少内存基本上在类结构确定下来时就已知(运行期JIT编译器会进行一些
2016-08-20T15:44:00Z
2016-08-20T15:44:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】GC需要完成的3件事情: 1.哪些内存需要回收? 2.什么时候回收? 3.如何回收? 哪些内存需要回收? 对于程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,栈帧随方法的进入和退出执行入栈和出栈的操作。每一个栈帧分配多少内存基本上在类结构确定下来时就已知(运行期JIT编译器会进行一些 <a href="https://www.cnblogs.com/13jhzeng/p/5788465.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5787113.html
Java内存区域 - 没有梦想的小灰灰
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域各有的用途,以及创建和销毁的时间,有的区域随虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 1.程序计数器 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,字节码
2016-08-19T03:59:00Z
2016-08-19T03:59:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域各有的用途,以及创建和销毁的时间,有的区域随虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 1.程序计数器 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,字节码 <a href="https://www.cnblogs.com/13jhzeng/p/5787113.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/13jhzeng/p/5780978.html
第53条:接口优先于反射机制 - 没有梦想的小灰灰
核心反射机制java.lang.reflect提供了“通过程序来访问关于已装载的类的信息”的能力,给定一个Class实例,可以获得Constructor、Method、Field实例,这些对象提供“通过程序来访问类的成员名称、域类型、方法签名等信息”的能力。 反射机制允许一个类使用另一个类,即使当前
2016-08-17T09:45:00Z
2016-08-17T09:45:00Z
没有梦想的小灰灰
https://www.cnblogs.com/13jhzeng/
【摘要】核心反射机制java.lang.reflect提供了“通过程序来访问关于已装载的类的信息”的能力,给定一个Class实例,可以获得Constructor、Method、Field实例,这些对象提供“通过程序来访问类的成员名称、域类型、方法签名等信息”的能力。 反射机制允许一个类使用另一个类,即使当前 <a href="https://www.cnblogs.com/13jhzeng/p/5780978.html" target="_blank">阅读全文</a>