首页 > 其他 > 详细

JVM中的类加载

时间:2019-10-25 16:50:59      阅读:76      评论:0      收藏:0      [点我收藏+]

# JVM中的类加载

关于JVM中类的加载这部分知识在网上有太多的文章描述这部分的知识。但是多数文章都过于冗长,难以理解。这篇文章主要是一些我对JVM中类的加载的理解。

一句话概括

==java在类加载的时候实际上就是把xxx.class文件读入JVM方法去,并在内存中生成class的对象。==

那么Java中是怎么加载类的

1. 首先我们要了解类加载器

java 中有四种类加载器。从底向上依次是

  1. BootStrapClassLoader: 负责加载 JAVA_HOME\lib 目录中的,或通过-Xbootclasspath参数指定路径中的,且被虚拟机认可(按文件名识别,如rt.jar)的类。
  2. ExtensionClassLoader: 负责加载 JAVA_HOME\lib\ext 目录中的,或通过java.ext.dirs系统变量指定路径中的类库。
  3. ApplicationClassLoader: 负责加载用户路径(classpath)上的类库。
  4. UserClassLoader:用户自定义的ClassLoader。

2. 类加载器是怎么加载类的

类加载器是通过==双亲委派机制==来加载类的

什么是双亲委派机制?

类加载器在接收到类加载请求之后,低等级的ClassLoader会首先检查这个类是否已经加载过了,若是没有加载则,将加载的请求委派给双亲(比如 ApplicationClassLoader会将请求委派给ExtensionClassLoader)。这样一层一层的传送直到BootStrapClassLoader,如果BootStrapClassLoader没有找到,则逐级向下反馈,下级再寻找该类试图加载。

3. 类加载的过程中哪些代码会被执行到?

==静态代码块以及静态变量== 这些内容只被执行一次,因此他们在内容中的位置是相对固定的。所以被叫做静态。用这样的概念来解释静态变量:

  • 静态变量:是代码中用static关键字修饰,告诉JVM,该变量只在内存中存在一份,该引用存在方法区且地址是相对固定不变的所以称作“静态变量”。

JVM中的类加载

原文:https://www.cnblogs.com/winstonehome/p/11738816.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!