JVM相关知识点以及性能优化

1.JVM加载Class文件的原理机制
Java的中所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身就是一个类,而它的工作就是把class文件从硬盘读取到内存中。(我们在写代码的时候不需要关系类的加载,因为类的加载是隐式装载的。除非我们使用反射的时候需要显示加载所有的类。)
Java类的加载是动态的,它并不会一次性将所有的类全部加载后再运行,而是保证程序运行的基础类完全加载到jvm中,其他的类在需要使用的时候再进行加载。(这样做的目的是节省内存的开销。)

Java的类加载器有三个,对应Java的三种类:
BootstrapLoader // 负责加载系统类(一般指的内置类。eg: String)

----- ExtClassLoader // 负责加载扩展类(就是集成类和实现类)

------------AppClassLoader // 负责加载应用类(程序员自己定义的类)

三个加载器各自完成自己的工作,但它们是如何协调工作的呢?哪一个类该由哪一个加载器完成呢?
为了解决这个问题,Java采用了委托模型机制。

委托模型机制的原理:当类加载器需要加载类的时候,先请示其父类,父类中找不到才会到自己的类中进行搜索该类。这样的自上而下的加载顺序可以保证基础类的加载。这样加载还有一个安全上的考虑,防止有人恶意将恶意的基础类加载到jvm中,委托模型机制会搜索其父类的加载器,显然是不可能找到,这样就不能将该类加载进来。

类加载的步骤:

  1. 装载:查找和导入class文件。

  2. 连接:

    • 检查: 检查载入的class文件数据的正确性。
    • 准备:为类的静态变量分配存储空间。
    • 解析:将符号引用转成直接引用。
  3. 初始化:初始化静态变量,静态代码块。

2.什么是类加载器
类加载器是一个用来加载类文件的类,java源代码通过javac编译器编译类文件。然后JVM来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来源的源文件。

3.类加载器有哪些
Bootstrap类加载器、Extension类加载器和Application类加载器。

4.类加载器双亲委派模型机制

什么是双亲委派模型(Parent-DelegationModel)?为什么使用双亲委派模型?

JVM中加载类机制采用的是双亲委派模型,顾名思义,在该模型中,子类加载器收到的加载请求,不会先去处理,而是先把请求委派给父类加载器处理,当父类加载器处理不了时再返回给子类加载器加载;
为什么使用双亲委派模型?
因为安全。使用双亲委派模型来组织类加载器间的关系,能够使类的加载也具有层次关系,这样能够保证核心基础的Java类会被根加载器加载,而不会去加载用户自定义的和基础类库相同名字的类,从而保证系统的有序、安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值