首页 > 其他分享 >jvm:类加载子系统干什么的?由什么组成?需要记住哪些八股文?

jvm:类加载子系统干什么的?由什么组成?需要记住哪些八股文?

时间:2023-01-17 19:07:10浏览次数:34  
标签:八股文 自定义 jvm 父类 子系统 加载


jvm:类加载子系统干什么的?由什么组成?需要记住哪些八股文?

最近刚工作,有点懈怠了,看抖音的时候,发现大家都在学jvm,正好咕咕也在这方面一直有想要学习的东西,就参考了一下别人,学习了b站尚硅谷康老师的视频,确实讲得挺细的。打算看一点记录一点。
最近看完了前面30多个视屏,主要是讲类加载子系统。
稍微了解一点jvm,会知道jvm主要包括类加载子系统,运行时数据区,和执行引擎。

这里写目录标题

  • ​​jvm:类加载子系统干什么的?由什么组成?需要记住哪些八股文?​​
  • ​​三级目录​​
  • ​​类装载子系统作用:​​
  • ​​1.加载器有哪些“?​​
  • ​​2.用户也可以自定义类加载器-好处:​​
  • ​​3.双亲委派机制(重要)​​
  • ​​4.沙箱安全机制​​

三级目录

jvm:类加载子系统干什么的?由什么组成?需要记住哪些八股文?_开发语言


这里想说

类装载子系统作用:

从文件系统中,加载class文件,只负责加载,不管执行。
有人问:写的java文件怎么就变成class文件了?
答:通过javac命令
类装载子系统包括:
loading-linking-initializetion三步

  • loading
    中需要知道有bootstrap-extension-application三种加载器
    通过全类名,获取该类的二进制字节流=》方法区的数据结构在内存中生成类的class对象。
  • linking
    需要知道验证,准备,解析三步(感觉了解就行)
  • init
    javac自动收集类中的所有类变量的赋值动作Clinnit

1.加载器有哪些“?

类加载器(重要)
bootstrap 引导类加载器,用c或c++,用于装载,java,javax,sun包下的文件。
其他加载器(重要)
extension拓展类加载器,和application系统类加载器统称为其他加载器。
一般我们自己写的类就是用application加载的,而jre,lib,ext子目录下的一些文件就是用拓展类加载的。
我们可以通过下面的方式获取系统类加载器,。getParent获取他的上层。

ClassLoader.getSystemClassLoader()

2.用户也可以自定义类加载器-好处:

  • 隔离加载类
  • 修改类加载方式
  • 扩展加载源
  • 防止源码泄漏
    方法:extends classloader 重写findclass

3.双亲委派机制(重要)

  • 如果一个类加载器收到加载请求,并不会自己先加载,而是去把这个请求委托给父类加载器去执行。
  • 如果被委托的父类加载器,存在父类加载器,自会进一步向上委托,最总点,顶层的启动类加载器,
  • 如果父类可以完成加载就让父类加载,如果不能加载,则子类加载。

    双亲委派的优势:
  • 避免类的重复加载
  • 保护程序安全,防止核心api被随意篡改,(例如自定义String类)

4.沙箱安全机制

  • 保护自己的引导类加载的代码,不背自定义代码破坏
  • 类名和用的加载器也一样,能被定义为一个类(就是一个类的类名,和加载它的加载器一样,就是一个类)
  • jvm会保护用户类加载器的一个引导信息,到方法区,用于后续引用

类的主动使用和别动使用 :是否别初始化。

所以加粗的地方还是可以看看,八股文有点映像总是好的。


标签:八股文,自定义,jvm,父类,子系统,加载
From: https://blog.51cto.com/u_15601494/6017707

相关文章