第一个有点不好回答:为什么.class文件要用bytecode?bytecode有什么方便之处?第二点:jvm 具体点就是 java解释器 到底是如何作用bytecode代码的?
是把bytecode先解释为机器指令再给cpu运行?? or
jvm自己在操作系统上运行,来解释bytecode代码,并自己来执行bytecode代码??(不过这样的话好像就不必要再“解释interpret”了,干麻还叫经常叫它java解释器)or
还是以上两个说法都是错的?第三点,很简单,就是我自己很模糊 :什么是名空间name-space 感觉到像是c里面的概念,今天突然发现java里也有这个词,就有点不懂了
大家帮回答回答, 有一点算一点,每人的分不多,只表示表示心意

解决方案 »

  1.   

    1.btyecode这个词就是java引入的吧.方便性就是可移植了,你把class文件放到不同的平台上,只要那个平台上有jvm就可以执行了.如果是机器相关的目标文件的话,比如windows的pe文件格式,unix上的a.out格式,只能操作系统负责解析,就无法实现跨平台了.
    2.jvm自己运行起来,解释执行bytecode中jvm定义的指令,比如遇到new 就去分配内存,调用构造方法等,这部分利用到下层操作系统提供的接口了.
    叫解释器没啥问题吧,就是解释bytecode中的指令并执行.
    3.没见到java的书里面提namespace的概念,C++有,java提供包机制提供类似的功能.
      

  2.   

        Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。可以把Java字节码看作运行在Java虚拟机(Java VM)上的机器代码指令。每中Java解释器,不管是Java开发工具还是可以运行Java小应用程序的Web浏览器,都是一种Java VM的实例。Java VM也可以由硬件实现。
        Java字节码使“写一次,到处运行”成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。
      

  3.   

    1、bytecode 与平台无关,不管哪个平台上的 jvm 都能执行同样的 bytecode。这是 java 跨平台的根本原因。
    2、jvm 的任务就是满足 bytecode 的要求。至于如何满足,不同平台上的 jvm 有不同的实现途径。
    3、所谓命名空间,就是将类的名字结构化。如果没有命名空间,某个类叫“Human”,那别的类就不能用这个名字了。有了命名空间,类名就能够更灵活,my.Human 和 your.Human 就能够很好区分。
      

  4.   

    没听过名字空间的概念  c#里有
    不过应该就是控制Java里.class文件不至于重名冲突吧
      

  5.   

    JIT是JVM对字节码的问题了吧。
      

  6.   


    1、用bytecode本来是希望增加class文件的安全性的,使得它不容易被反编译,另外,好象说用二进制文件解释起来不容易出现错误
    2、把bytecode转换成系统指令,而不是cpu指令,也就是说在系统中运行jvm并且把bytecode解释成对应的系统指令,这也就是为什么java慢的根本原因
    3、
    没听过
      

  7.   


    使用bytecode也有安全的性的意识,bytecode由jvm执行,而jdk实现了这种功能。
      

  8.   

    1.Java 编译器(用 Java 写成的, 平台独立) 读取 Java 源程序生成Java bytecode. 这些 bytecodes 根据要求被送到客户端的机器上. 
    每个客户机器必须运行 Java 解释器, 它完成 Java bytecode的解释执行. Java 解释器是用POSIX的ANSI C编写的, 需要送到每个单独的平台下面进行一次常规的编译. 
    一旦解释器就绪, 应用程序开发者不必关心任何平台说明和区别不同的本地编译器. 
    2.为什么不能叫java解释器呢?java解释器就是负责解释bytecode的
    3.java没有namespace的关键字,类似命名空间应该是用包 package处理的
      

  9.   

    估计是说JIT技术可以编译字节码,事实也是如此.不过不可能完全编译,只能通过部分编译提高性能.