2015年8月18日

JVM系列(六)编译器优化

摘要: 早期(编译期)优化开始——生成字节码为止;解析与填充符号表过程;插入式注解处理器的注解处理过程;语义分析与字节码生成过程。java的语法糖:泛型——java的泛型是“伪泛型”,在编译期优化中变成强制转换的。变长参数——foo(Stringstr,Object...args)boxing/unboxi... 阅读全文

posted @ 2015-08-18 20:44 Emmerich.Luang 阅读(159) 评论(0) 推荐(0)

2015年8月17日

JVM系列(五)并发相关

摘要: 并发概率下的内存模型 java定义了一个内存模型,从硬件/操作系统中抽象出来。对比C/C++直接用操作系统的内存是不同的。 工作内存(working memory):线程自己独占的内存。线程的工作内存是主内存的一份拷贝。 主内存(main memory):实际上存放所有线程的数据的地方。工作内... 阅读全文

posted @ 2015-08-17 20:02 Emmerich.Luang 阅读(507) 评论(0) 推荐(0)

2015年8月7日

String的hashCode 和equals 区别

摘要: 网上找到特么一段话:Java对于equals方法和hashCode方法是这样规定的: 1、如果两个对象相等,那么它们的hashCode值一定要相等; 2、如果两个对象的hashCode相等,它们并不一定相等。PS:相等说的是equals方法。 那么这2个方法是什么来的?? 先祭出源码... 阅读全文

posted @ 2015-08-07 19:56 Emmerich.Luang 阅读(296) 评论(0) 推荐(0)

2015年7月31日

JVM系列(四)生命周期和classloader

摘要: 大体上,class的生命周期是这样子的:加载相关内容classLoader是什么?通过一个类的全限定名,获取这个类的二进制字节码。区分两种classLoader:1、bootStrap,C++实现,是虚拟机的一部分;2、其他,java实现,虚拟机外部,继承自java.lang.ClassLoad... 阅读全文

posted @ 2015-07-31 20:14 Emmerich.Luang 阅读(529) 评论(0) 推荐(0)

2015年7月27日

jvm面试题解答

摘要: 网上找到的一些jvm面试题,现整理并且把答案搞出来。JVM内存模型?如图所示:写一段代码实现堆溢出(heap 对象太大)?栈溢出(死循环,死递归)?常量池溢出(intern)?方法区溢出?链接说明:http://www.cnblogs.com/ELMND/p/4630070.html类的生命周期... 阅读全文

posted @ 2015-07-27 18:02 Emmerich.Luang 阅读(1208) 评论(0) 推荐(1)

2015年7月8日

memcached(十三)注意事项

摘要: 一些使用上遇到过的问题。mc key限制。 长度限制250;不能有空格,中文。mc超时时间设置。过大,会表现为set进去成功, 但get不出来。如果mc有打印verbose级日志的话会显示超时: NOT FOUND 111 FOUND KEY 111 -nuked by expire原因是:Ex... 阅读全文

posted @ 2015-07-08 19:54 Emmerich.Luang 阅读(374) 评论(0) 推荐(0)

memcached(十二)监控

摘要: 1、可以使用MemAdmin(PHP环境)。2、telnet/nc到mc中, 然后stats命令(stats slabs/stats items)。3、使用源码上附送的工具(memcached-tool)https://github.com/memcached/memcached/tree/mast... 阅读全文

posted @ 2015-07-08 19:53 Emmerich.Luang 阅读(154) 评论(0) 推荐(0)

memcached(十)动态扩容

摘要: HASH的扩容 一般来说,hash容器都会在初始化的时候创建一块空间用于存放对象,对象的数量到达临界值后扩容整个空间。而不是一边增加/删除对象一边分配空间。本人根据是否阻塞,区分为静态扩容和动态扩容。静态扩容 参考java.util.HashMap的实现。在put方法中, public V... 阅读全文

posted @ 2015-07-08 19:52 Emmerich.Luang 阅读(748) 评论(0) 推荐(0)

memcached(九)--LRU

摘要: memcached通过LRU算法(least recently usage)把过期的对象淘汰掉。 简单点说,每个slab自己就是一个双向链表。热数据在链头,冷数据在链尾。创建对象的时候,把这个对象放到链头。当创建对象时分配内存不足,则把链尾的冷数据淘汰掉。同一个对象更新会把对象的时间属性更新。... 阅读全文

posted @ 2015-07-08 19:50 Emmerich.Luang 阅读(558) 评论(0) 推荐(0)

memcached(八)-- set指令内部实现

摘要: 在一个set指令传输到memcached后:set abc 0 3600 5hello memcached是怎么样执行set/add等对象的咧? 首先从memcached启动后,要先监听端口,监听到有对应的动作后,执行指令。从源码中,堆栈是这样子:main_base从启动到监听main——>... 阅读全文

posted @ 2015-07-08 19:48 Emmerich.Luang 阅读(531) 评论(0) 推荐(0)

导航