摘要: java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是... 阅读全文
posted @ 2011-05-04 13:33 redcreen 阅读(70930) 评论(7) 推荐(20) 编辑
摘要: 除法散列法似乎通过取k除以m的余数,来将关键字k映射到m个槽的某一个中去,亦即,散列函数为: h(k)=k mod m 当应用除法散列时,要注意m的选择。例如,m不应是2的幂,应为如果m=(2的p次)方,则 h(k)就是k的p个最低位数字。 问题是:对任意进制(s)的关键字k,m=(x的p次方),那么关键字k第几位(P)以前的值将不影响k的散列值? x如果不能整除进制,则p无确定值。 以下是x可以整除进制的情况: P=p-X+1,其中X的值可通过以下公式确定:s=(x的X次方)×Y。 P=P<=1?1:P 例如: 16进制:如果m=16(x=2,p=4),则第一位以前所有值不影 阅读全文
posted @ 2011-05-03 17:02 redcreen 阅读(1955) 评论(0) 推荐(0) 编辑
摘要: 这个问题的讨论来自内部的一个关于“多线程环境下使用Hashmap的安全问题”的讨论,HashMap多线程的问题之前已经提过一次,见之前的blog.本篇文章主要讨论多线程下race condition的问题。以下内容部分引用自内部邮件: 错误代码:定义成员变量private static Map cachedMap = new HashMap(7000);private static Boolean firstInvoke = true;程序是设想在第一次开始对该map变量进行初始化线程1:Public Object getMyValue(){ If(firstInvoke){ While(i. 阅读全文
posted @ 2011-03-29 17:45 redcreen 阅读(7444) 评论(0) 推荐(1) 编辑
摘要: vevocity在做渲染时会调用 org.apache.velocity.util.introspection.ClassMap$MethodCache.get方法 该方法完整代码(velocity1.6.1版本)如下 private final Map cache = new HashMap();public Method get(final String name, final Object [] params) throws MethodMap.AmbiguousException { String methodKey = makeMethodKey(name, params); Obj 阅读全文
posted @ 2011-03-29 14:58 redcreen 阅读(2316) 评论(0) 推荐(1) 编辑
摘要: 阅读本文的读者,需要对Java轻量级锁有一定的了解,知道lock record, mark word之类的名词。可以参考我的一篇博文:Java轻量级锁原理详解(Lightweight Locking) Java偏向锁(Biased Locking)是Java6引入的一项多线程优化。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能。 轻量级锁也是一种多线程优化,它与偏向锁的区别在于,轻量级锁是通过CAS来避免进入开销较大的互斥操作,而偏向锁是在无竞争场景下完全消除同步,连CAS也不执行(CAS本身仍旧是一种操作系统同步原语,始终要在JVM与OS之间来回,有一定的开销)。 所谓的. 阅读全文
posted @ 2011-03-29 14:41 redcreen 阅读(1621) 评论(0) 推荐(0) 编辑
摘要: 对于双检锁,其实有多种不同的用法,有很多种用法是无论如何不会出现问题的.我最初用双检锁来获取jndi对象时,立即有人告诉我双检锁是不安全的,我笑着告诉他:是否安全我比你更有把握.static DataSource ds = null;public static DataSource getDataSource(){ if(ds == null){ synchronized(this.getClass()){ if(ds == null) ds = xxx; } } return ds;} 这样的DCL有什么安全问题呢?它仅仅是为了不做重复的劳动.一是ds本身是已经存在的对象,不是动态构造的,. 阅读全文
posted @ 2011-03-29 14:41 redcreen 阅读(7147) 评论(0) 推荐(3) 编辑
摘要: 大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意。原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖操作系统互斥(mutex)来实现的。互斥是一种会导致线程挂起,并在较短的时间内又需要重新调度回原线程的,较为消耗资源的操作。 为了优化Java的Lock机制,从Java6开始引入了轻量级锁的概念。 轻量级锁(Lightweight Locking)本意是为了减少多线程进入互斥的几率,并不是要替代互斥。它利用了CPU原语Compare-And-Swap(CAS,汇编指令CMPXCHG),尝试在进入互. 阅读全文
posted @ 2011-03-29 14:40 redcreen 阅读(4706) 评论(0) 推荐(1) 编辑
摘要: 标签: redis,memlink,key-value,key-list,nosql “互联网数据目前基本使用两种方式来存储,关系数据库或者key value。但是这些互联网业务本身并不属于这两种数据类型,比如用户在社会化平台中的关系,它是一个list,如果要用关系数据库存储就需要转换成一种多行记录的形式,这种形式存在很多冗余数据,每一行需要存储一些重复信息。如果用key value存储则修改和... 阅读全文
posted @ 2011-02-27 16:10 redcreen 阅读(3974) 评论(1) 推荐(0) 编辑
摘要: redis主页上列出的java 客户端有JDBC-Redis JRedisJedis三种,下面分别介绍三种客户端的优缺点及其他相关的工具. 支持redis版本 性能 维护 推荐 JDBC-Redis not good JRedis 1.2.n release 2.0.0 尚未release版本 fast Jedis 2.0.0 release fast actively developed 推荐 JDBC-Redis JDBC-Redis is just a JDBC wrapper for JRedis database. If you plan on using your code wi. 阅读全文
posted @ 2011-02-16 10:49 redcreen 阅读(28012) 评论(2) 推荐(0) 编辑
摘要: 转自timyang:http://timyang.net/data/redis-misunderstanding/前几天微博发生了一起大的系统故障,很多技术的朋友都比较关心,其中的原因不会超出James Hamilton在On Designing and Deploying Internet-Scale Service(1)概括的那几个范围,James第一条经验“Design for failure”是所有互联网架构成功的一个关键。互联网系统的工程理论其实非常简单,James paper中内容几乎称不上理论,而是多条实践经验分享,每个公司对这些经验的理解及执行力决定了架构成败。题外话说完,最近 阅读全文
posted @ 2011-02-15 22:45 redcreen 阅读(4091) 评论(3) 推荐(0) 编辑