More About JVM
更为清晰易懂的JVM架构:
转自James D. Bloom的博客JVM Internals
更为清晰易懂的JVM架构:
转自James D. Bloom的博客JVM Internals
最近遇到一个比较棘手的有关Web服务器的性能问题,概括起来就是大规模并发数据库异步查询请求的高效性问题。由于项目时间有限,所以采取缓存查询结果的方式提高响应速度,但是仍然不能解决首次查询所带来的时间消耗。倘若某个耗时查询正在执行中,还存在新的相同请求该如何处理的问题。重复造轮子并不是很好的解决办法,看看Java中是如何解决这些问题的,这里以流行的Spring Struts Hibernate(SSH)为例。
上图为JVM框架,图片来源:Inside the Java 2 Virtual Machine 2nd Edition
昨天某人问我Java中如下代码的输出结果为什么不一样(”A”为1,”一”为2)?1
System.out.println("A".getBytes().length+"\t"+"一".getBytes().length);
1 2
咋一看,好像是不对劲,Java中的字符不都是Unicode编码(16bit,2字节)的吗?怎么英文字母只占1字节呢?于是立马查看《Java编程思想(Thinking in Java)第四版》,关于常用类型的基本信息表(见“第二章-一切都是对象”,“2.2.2-特例:基本类型”,第23页)里赫然写着char的大小为16bit的Unicode。于是断定问题出在getBytes函数上。