博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 面试准备3 JVM和类加载器
阅读量:2209 次
发布时间:2019-05-04

本文共 1558 字,大约阅读时间需要 5 分钟。

众所周知,Java 是面向对象的一门语言

绝大部分的东西都是以class类的形式存在的

甚至连把.class文件加载进JVM的类加载器(class loader)都是一个类

那有人就会问了,那第一个类加载器是怎么来的呢?

这个和鸡生蛋,蛋生鸡的问题就不一样了~

这个是有明确答案的


首先,JVM 是用C++ 写的(这里指的是 SUN 的默认JVM HotSpot)

(维基百科上查的)

HotSpot is written in C++

(大家可以在命令行下输入)

java -version

应该会看到有这个内容

Java HotSpot™

具体关于HotSpot 的信息大家可以上维基百科去查,我这就不展开了


其次,第一个类加载器有挺多名称的—

Bootstrap classloader

Primordial classloader
Null classloader

指的都是一个东西

它也不是用Java 写的,来看看维基百科原文

The bootstrap class loader loads the core Java libraries located in the <JAVA_HOME>/jre/lib directory.

This class loader, which is part of the core JVM, is written in native code.

使用机器码写的

当JVM启动的时候,bootstrap class loader 也启动,并加载另外两个重要的类加载器----

Extensions class loader 和 System class loader

这两个类加载器又由sun.misc.Launcher$ExtClassLoader 和sun.misc.Launcher$AppClassLoader分别实现

他们就是用Java 写的啦~

而且我们也能切实看到他们

来看下面的代码:

public static void main(String [] agrs) {		System.out.println(JSONObject.class.getClassLoader());		System.out.println(JSONObject.class.getClassLoader().getParent());		System.out.println(JSONObject.class.getClassLoader().getClass().getClassLoader());		System.out.println(String.class.getClassLoader());	}

输出结果:

sun.misc.Launcher$AppClassLoader@73d16e93

sun.misc.Launcher$ExtClassLoader@6bc7c054
null
null

从输出结果可以看出:

  1. 我们从外部导入的jar 包是由AppClassLoader 加载的
  2. AppClassLoader 是ExtClassLoader 的子类
  3. null class loader 除了加载ExtClassLoader和AppClassLoader外,还负责加载java.util and the java.lang
  4. classloader 为null 其实指的就是bootstrap class loader ,null 的原因也就是它根本不是Java 类
    (具体的前面已经说明过了)

总结,JVM中的类都是由类加载器加载的

第一个类加载器是bootstrap class loader

它还加载出了其他的类加载器,分别负责加载其他不同的类

转载地址:http://xoiyb.baihongyu.com/

你可能感兴趣的文章
探索Redis设计与实现8:连接底层与表面的数据结构robj
查看>>
探索Redis设计与实现7:Redis内部数据结构详解——intset
查看>>
探索Redis设计与实现9:数据库redisDb与键过期删除策略
查看>>
探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
查看>>
分布式系统理论基础1: 一致性、2PC和3PC
查看>>
分布式系统理论基础2 :CAP
查看>>
分布式系统理论基础3: 时间、时钟和事件顺序
查看>>
分布式系统理论基础4:Paxos
查看>>
分布式系统理论基础5:选举、多数派和租约
查看>>
分布式系统理论基础6:Raft、Zab
查看>>
分布式系统理论进阶7:Paxos变种和优化
查看>>
分布式系统理论基础8:zookeeper分布式协调服务
查看>>
搞懂分布式技术1:分布式系统的一些基本概念
查看>>
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
搞懂分布式技术3:初探分布式协调服务zookeeper
查看>>
搞懂分布式技术4:ZAB协议概述与选主流程详解
查看>>
搞懂分布式技术5:Zookeeper的配置与集群管理实战
查看>>
搞懂分布式技术6:Zookeeper典型应用场景及实践
查看>>
搞懂分布式技术10:LVS实现负载均衡的原理与实践
查看>>
搞懂分布式技术11:分布式session解决方案与一致性hash
查看>>