随笔分类 -  JVM,JDK source analyse

摘要:如果是内存调优,请看我以前一篇博文http://www.cnblogs.com/springsource/archive/2013/01/11/2856968.html调优演示1. 先写一个死锁小程序,如下package com.he.jin.bin;/** * QQ 277803242 * * @author 何锦彬 2014.1.29 * * 线程死锁演示调优 * */public class Test4DeadLock extends Thread { public static Object obj1 = new Object(); public static Obj... 阅读全文
posted @ 2014-01-29 10:38 何锦彬 阅读(915) 评论(0) 推荐(0)
摘要:线程池一 ,java.util.concurrent1,首先,为什么要用线程池包?1,用线程池包和数据库连接池一样,为了节省线程的创建和关闭时间2,扩充了返回类型,实现runable只能通过共享数据和主线程通讯,通过callable 可以接受返回类型,并可以抛出异常在主线程捕获3,扩充了些工具类4,atomic支持计数线程池最常用代码应用方式,1,实现Callable2. 创建线程池3. 执行并接收future参数4. 关闭线程池,停止接收新的线程task代码如下package org.benson.concurrent;import java.util.concurrent.Callable 阅读全文
posted @ 2013-05-07 17:04 何锦彬 阅读(7298) 评论(0) 推荐(0)
摘要:Thread1,synchronize,volatile,finaly--语意,及加载顺序volatile适用模式2,thread的相关类,wait,notify,notifyAll,sleep,interrupted,过时的stop,suspend,resume3,ThreadLocal---ThreadLocal的常用模式4,java.util.concurrent1,线程池3,锁--lock和synchronize4,atomic类--CAS的原理5,同步集合对象--常用模式6,其它辅助类工具--常用模式7.fork-join框架--最佳实践5,JDK 6.0对锁做了一些优化比如锁自旋、 阅读全文
posted @ 2013-01-14 12:03 何锦彬 阅读(418) 评论(0) 推荐(0)
摘要:一,JVM内存模型概括还有一个寄存器,线程运行于其上面1.程序计数器 记录线程的执行位置,线程私有内存,唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域2.线程栈(VM stack)栈的默认大小是1M-Xss2m 这样设置成2M异常 :Fatal: Stack size too small异常的引起一般是线程数目太多 3.本地方法栈(native stack) 即为一些Native方法分配的stack异常:java.lang.OutOfMemoryError: unable to create new native thread一般也是由线程太多... 阅读全文
posted @ 2013-01-11 19:59 何锦彬 阅读(13379) 评论(1) 推荐(2)
摘要:程序,纠集到底就是对内存数据的操作,并把计算的结果持久话. 争议JAVA中执行的最小单位是线程.JVM实现了各个CPU,操作系统等的差异. 线程的运行模型最终可以抽象的看成如下:每一条线程都有自己的work memory, 而且共享一个main memory.JMM的主要问题如下:原子性,原子级别的操作,每个线程运行时是相互独立,包括里面未声明为volatile的变量都是独立一份,但会进行work memory 和 main memory的同步;可见性,线程间的通讯. 即主内存的变量可见的,把值从work memory同步到main memory 进行线程间的通讯,通过synchronize或 阅读全文
posted @ 2013-01-10 14:25 何锦彬 阅读(4478) 评论(0) 推荐(1)
摘要:ConcurrentHashMap是JDK 1.5推出的类,性能上比HashTable和Collections.synchronizedMap(new HashMap())快很多。看此类源码最好和HashTable对比理解,会发现它的优化,此类一出HashTable可废。优化的方向,降低读对锁的依赖,写都是加锁。一,主要是用了分离锁1.概括结构如下,可以简单理解成把一个大的HashTable分解成多个,形成了锁分离。ConcurrentHashMap默认是分离了16个模块,即理想状态下能有16个线程同时并发(指要修改的map处于不同的模块之中)。采用分离锁可以避免无意义的等待,相比。在Hash 阅读全文
posted @ 2012-12-28 08:44 何锦彬 阅读(2551) 评论(6) 推荐(2)
摘要:起因:故尝试调试下HashMap实现原理,打印出transient Entry<K,V>[] table 变量的变化情况一,在hashmap中加入打印调试信息hashmap的实现就是用一个Entry的对象数组Entry中存next形成链,链用于储存key有相同hashcode但key的equas不同的entry,这个网上有很多相关分析;那么我现在尝试在hashmap这个类中加入监控信息用来展示它的实现原理打开JDK的源码(基于1.6),并在HashMap类中加入新的方法用于打印调试信息,即HashMap中table对象数组变量的变化 1 public String getTable 阅读全文
posted @ 2012-12-25 17:51 何锦彬 阅读(4747) 评论(3) 推荐(2)
摘要:package org.benson.dto;import java.util.ArrayList;import java.util.List;/** * @author BenSon He * @email qing878@gmail.com ,qq 107966750 * @since 19/21/2012 */public class Node { List<Node> list = new ArrayList<Node>();; private int value; private int level; public int getLevel() { retur 阅读全文
posted @ 2012-11-21 18:33 何锦彬 阅读(950) 评论(1) 推荐(0)
摘要:JAVA的正则表达式判断一个字符是否匹配一个模式建立一个模式:String patternRule=”var dataArray=\\[(.*)\\]\\; FRunTimeQuote.GetData\\(dataArray\\)”;//定义匹配条件Pattern p=Pattern. .compile(patternRule);获取匹配类:String content=”var dataArray=['XAGUSD', '白银美元', 32.8900, 0.68, '2.11%', '2012-09-06','32.21 阅读全文
posted @ 2012-09-07 11:52 何锦彬 阅读(2730) 评论(0) 推荐(0)