随笔分类 -  深入JVM

摘要:一.什么是ClassLoader?Java程序并不是一个原生的可执行文件,而是由许多独立的类文件组成,每一个文件对应一个Java类.此外,这些类文件并非立即全部装入内存的,而是根据程序需要装入内存。ClassLoader专门负责类文件装入到内存.二.ClassLoader的体系结构? 从上图我们就可以看出类加载器之间的父子关系(注意不是类的集继承关系)和管辖范围。(1)BootStrap 是最顶层... 阅读全文
posted @ 2009-11-17 17:55 Chris Wang 阅读(3274) 评论(0) 推荐(0) 编辑
摘要:平时我们运行一个Java类的时候,我们可以加入一些命令行参数,如verbose 比如我们运行java -verbose SpecPoint 我们可以获取SpecPoint这个类运行的时候所加载的类的信息,如下图:   但是有些很多类你看到会显示它from shared objects file,如果你想进一步看清楚每一个类到底来自于哪一个jar包,可以采用下面的方法: 运行java -... 阅读全文
posted @ 2009-11-17 14:33 Chris Wang 阅读(1020) 评论(0) 推荐(0) 编辑
摘要:    现在我们来研究研究,Java类和对象的初始化,下面是一幅类的生命周期全景图,当然还是比较粗略.   从这幅图中,我们可以看出,类的装载到初始化主要分为3个阶段: (1)类的装载(Load Class): 通过该类型的完全限定名,产生一个代表该类型的二制制数据流。 简单检查二进制数据,确保每一个部分都在正确位置,如魔数,文件不是太长或太短等. 解析... 阅读全文
posted @ 2009-09-23 04:04 Chris Wang 阅读(1040) 评论(0) 推荐(1) 编辑
摘要:今天,在一个群里面有网友问到这样一个问题,以下代码被调用运行时为何会造成栈溢出(StackOverflowError)的错误:public class Constructor { Constructor c = new Constructor(); public static void main(String[] args) { Constructor test = new Constructor... 阅读全文
posted @ 2009-09-21 16:22 Chris Wang 阅读(1201) 评论(1) 推荐(1) 编辑
摘要:  [代码]   以上的四句代码,问那句的执行速度更快? 对于C/C++程序员来说,可能首先想到的就是i++和++i要比其他两者要快一些,但是在Java中是不是这样的呢? 我们可以对他进行一些分析,首先当然想到的是对这些语句利用Java的System.currentTimeMillis()计算单个语句运行很多次(如10亿次)后的时间,然后作比较. 例如这样: 测试... 阅读全文
posted @ 2009-09-21 14:28 Chris Wang 阅读(1274) 评论(0) 推荐(1) 编辑