JVM---类加载器ClassLoader

一、jvm架构图

在这里插入图片描述
注意:

  • java源文件通过javac编译成java字节码文件.class
  • .class文件打开,他的开头是cafe babe,所以虚拟机才能识别
  • 通过类加载器ClassLoader加载.class文件,将class文件放入内存中各个区域
  • 程序计数器、JAVA栈、本地方法栈是线程独有的,不受GC管理
  • 堆、方法区受GC管理
  • 方法区里面并不是方法,而是类的模版。
  • java8 方法区又称为非堆区,在内存结构中称为“元数据”。
  • 灰色部分,是线程私有的,占用内存非常少,几乎不存在GC垃圾回收。

二、类装载器

在这里插入图片描述

问:什么是类加载器?

  • 类加载器是用来加载类的
  • 类加载器也是一个类:ClassLoader
  • 类加载器可以被加载到内存,也是通过类加载器完成的

问:类加载器有哪几种?

  • 系统自带的有三种:
  • 根加载器-启动类加载器(BootStrap) C++写的
  • 扩展类加载器(Extension) Java写的
  • 应用程序类加载器(AppClassLoader)Java也叫系统类加载器,加载当前应用的classpath的所有类。
  • 用户自定义加载器:
  • Java.lang.ClassLoader的子类,用户可以定制类的加载方式。

问:什么叫双亲委派机制?

  • 浅显理解:我爸是李刚,有事儿找我爹,要用到某个类,先去根加载器中找,找的到就用,如果找不到,再去扩展类加载器中找,还是没有,就去应用程序类加载器中找。在这里插入图片描述

问:沙箱安全机制是什么?

  • 沙箱安全机制是由基于双亲委派机制上 采取的一种JVM的自我保护机制,假设你要写一个java.lang.String 的类,由于双亲委派机制的原理,此请求会先交给Bootstrap试图进行加载,但是Bootstrap在加载类时首先通过包和类名查找rt.jar中有没有该类,有则优先加载rt.jar包中的类,因此就保证了java的运行机制不会被破坏.

问:为什么有沙箱安全机制?

  • 防止恶性代码污染源代码
发布了61 篇原创文章 · 获赞 53 · 访问量 9213

猜你喜欢

转载自blog.csdn.net/weixin_44861399/article/details/104333965