黑马程序员技术交流社区
标题:
java虚拟机<JVM>加载class文件的原理
[打印本页]
作者:
HM赵磊
时间:
2013-3-13 23:10
标题:
java虚拟机<JVM>加载class文件的原理
本帖最后由 csatshell 于 2013-3-14 12:36 编辑
在学习过程中,javac对java源文件进行编译后都会生成对应的*.class文件,运行的java程序的时候,*.class会加载到虚拟机中,现在对*.class会加载到虚拟机感到模糊,哪位兄弟姐妹们了解*.class文件加载到JVM的原理机制,真心请教。
作者:
严方芳
时间:
2013-3-13 23:41
java虚拟机:java程序首先由编译器转换成标准字节代码,然后由虚拟机来解释执行,虚拟机把字节代码程序同各操作系统和硬件分开,使java程序可以独立于平台运行。
javac.exe: java编译器,将源代码编译成字节代码,以.class 为扩展名存入java工作目录中。
java.exe: java解释器,执行字节代码程序
javadoc.exe: java 文档生成器,对java源文件和包以MML格式产生AP文档
javap.exe: java类分解器,对.class文件提供字节代码的反汇编并打印
jdb.exe: java调试器,如果编译器返回程序代码错误,可用它对程序进行调试
javaprof.exe: java剖析工具,提供其剖析信息
appletviewer.exe: java Applet浏览器
作者:
爪哇攻城狮
时间:
2013-3-13 23:44
Java 语言是一种具有动态性的解释型编程语言,当指定程序运行的时候, Java 虚拟机就将编译生成的 . class 文件按照需求和一定的规则加载进内存,并组织成为一个完整的 Java 应用程序。 Java 语言把每个单独的类 Class 和接口 Implements 编译成单独的一个 . class 文件,这些文件对于 Java 运行环境来说就是一个个可以动态加载的单元。正是因为 Java 的这种特性,我们可以在不重新编译其它代码的情况下,只编译需要修改的单元,并把修改文件编译后的 . class 文件放到 Java 的路径当中, 等到下次该 Java 虚拟机器重新激活时,这个逻辑上的 Java 应用程序就会因为加载了新修改的 .class 文件,自己的功能也做了更新,这就是 Java 的动态性。
下面用一个简单的例子让大家对 Java 的动态加载有一个基本的认识:
class TestClassA{
public void method(){
System.out.println("Loading ClassA");
}
}
public class ClassLoaderTest {
public static void main(String args[]){
TestClassA testClassA = new TestClassA();
testClassA.method();
}
}
复制代码
编译后输入命令: java -verbose:class ClassLoaderTest ,执行文件。
参考csdn博客文章:http://blog.csdn.net/loocao/article/details/4324126
作者:
Benwolf0818
时间:
2013-3-13 23:52
授人以鱼不如授人以渔,google search “*.class文件加载到JVM的原理机制”会出来你要的结果 的
作者:
437857487
时间:
2013-3-13 23:58
Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中
作者:
小路飞
时间:
2013-3-14 01:09
李松柏 发表于 2013-3-13 23:44
Java 语言是一种具有动态性的解释型编程语言,当指定程序运行的时候, Java 虚拟机就将编译生成的 . class ...
原来如此,之前都没关心过类的加载过程,谢了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2