`
Mr_Chunlei
  • 浏览: 28736 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

jvm原理 ClassLoader javac

 
阅读更多

我们在自学java的时候开始需要安装JDC和JRE,对于软件开发人员来说需要安装JDK,对于不开发只运行java编译完的.class文件,只需要安装JRE即可。而且在安装JDK时也会自动的包含JRE包。

开发者:

作为一个菜鸟我们第一个程序是helloWord!,为了显示我们高端的技术和能力,我们会装13的在text文件中敲代码,当代码敲完后,你会在DOS系统运用命令执行,将java源文件编译成字节码,这是后需要的使用javac命令,并且使用javac.exe将文件后缀为.JAVA的文件编译成.,class的字节码文件。

在上述步骤完成后,需要使用java命令来执行.class文件。这个时候就需要JVMx虚拟机了。并且用到了ClassLoader,将要执行所需要的类加载到JVM进行执行。首先加载类型氛围一下四个:

1)Bootstrap ClassLoader 是将JRE下的基础JAR包加载到Jvm也成为核心jar包,如java.lang.*.等,在API中命名空间以java.*开头的类。

2)extensions ClassLoader是将扩展类加载到虚拟机中,如在API中的javax命名空间下的包。

3) APP ClassLoader是将应用程序类加载,这里的ClassPath路径下的类

4)是指用户自己定义的加载器,希望在程序执行进行加载特定的Class

在各个ClassLoader之间存在的委托,既当需要加载一个类时,会盲目的委托给上一级加载,若上一级没有则在委托回来进行加载。如自己编写了一个HelloWord的类,当app ClassLoader加载时会交给extensions ClassLoader来加载,而exttensions ClassLoader会委托给BootStrap ClassLoader来加载,这时候就会达到最顶级,BootStrapClassLoader会查找路径内是否存在该类,有则加载,没有交给Extensions ClassLoader来加载,ExtensionClassLoader会查找路径是否存在,决定是否加载,若还是没有找到,则对吼交由APP ClassLoader 来加载,当然我们知道,我们一般会放在ClassPath路径下故最终还是要返回到APP ClassLoader来加载。

向上进行检测委托,然后再向下进行加载。(个人理解,可以自己再查查);

JVM虚拟机运行时,内存会为其分配一块内存。在这块内存内包含私有和共有。私有归于每个线程所私有: java栈,程序寄存器,本地方法栈。共有的如:堆内存,方法域,常量区。在java栈中存放了每个线程所调用的方法,栈有入栈和出栈两个操作,故我们可以在编写方法是可以通过PrintStrackTrace的方法来打印方法错误信息。同样的栈还包含了方法的变量数组,方法状态等信息。方法域是指类中的方法被加载到方法域中,为所有的线程所共有,常量区是线程沟通的方法域和java栈的重要区域。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics