MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

深入java虚拟机笔记

Posted on 2011-01-29 21:36 leekiang 阅读(563) 评论(0)  编辑  收藏 所属分类: java
1,java体系结构包括四个独立但相关的技术:java语言、class文件格式、java的api、java虚拟机
2,java虚拟机是一台抽象的计算机,主要任务是装载class文件并且执行其中的字节码。不同的java虚拟机,其执行引擎的实现可能不一样。分为软件实现和硬件实现(内嵌在芯片),软件实现有以下几种:(1)每次都会解释字节码(2)即时编译,即编译成本低机器代码,缓存起来可以重用(3)自适应优化器
3,每一个类被装载的时候,java虚拟机都监视这个类,看它到底是被启动(bootstrap)类装载器还是被用户定义类装载器装载。当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类。由于java虚拟机采用这种方式进行类的加载,所以被装载的类默认情况下只能看到被同一个类装载器装载的类。通过这种方法,java的体系结构允许在一个java应用程序中建立多个命名空间。运行时的java程序中的每一个类装载器都有它自己的命名空间。
例子:浏览器上的java虚拟机为不同的网络地址创建不同的用户定义类装载器,用来装载不同来源的class文件,这种不同网址的applet就不会相互影响。
问题:1)自己写的类如果调用了java的api,那么类装载器是一个什么样的情况。同一个类可能被不同的类装载器装载?
      2)看一下tomcat的类装载器的实现
      3)java的虚拟机与ruby和python的有何区别?
      4)有没有一种打包工具,把java代码打包成不需要java虚拟机的本地可执行代码
      5)java的动态连接和动态扩展指的是什么?
4,java语言的特殊之处是程序既被编译又被解释。首先,编译器将程序编译为一种称之为java字节码(bytecode)的与平台无关的中间语言。解释器分析并运行每条java字节码指令。编译只发生一次;而解释在每次执行程序时都会执行(通常是如此,具体实现可能不一样)。



12,声明一个对象时不会运行类的静态区块,在以下情况下会运行静态区块:
    1)new一个对象时;
    2)调用静态方法时;
    3)Class.forName("类名")


参考
1,http://xyiyy.javaeye.com/blog/362092
2,http://xyiyy.javaeye.com/blog/362107

只有注册用户登录后才能发表评论。


网站导航: