JVM简单入门-01

一.学习JVM的好处

  • 能够明白为什么Java最早期被称为解释型语言
  • 为了今后更好的解决线上排查问题
  • 可以通过调整JVM相关参数提高Java应用的性能
  • 可以清楚知道Java程序是如何执行的

二.JVM体系结构图

三.类加载器ClassLoader

3.1类的加载、连接、初始化

先来探索一下一个类加载到JVM的一个基本结构:

class进入类加载器,加载初始化为类模板,实例化为一个个类的实例。

从代码来理解:

class Test{ 
  public static int a = 1; 
}//我们程序中给定的是 public static int a = 1;
 //但是在加载过程中的步骤如下: 

1. 加载阶段 编译文件为 .class文件,然后通过类加载,加载到JVM【查找并加载类的二进制数据】

2. 连接阶段 
  第一步(验证):确保Class类文件没问题 【确保被加载的类的正确性】
  第二步(准备):先初始化为 a=0。(因为你int类型的初始值为0) 【为类的静态变量分配内存,并将其初始化为默认值】
  第三步(解析):将引用转换为直接引用【把类中的符号引用转换为直接引用】

3. 初始化阶段: 通过此解析阶段,把1赋值为变量a

3.2类加载器的分类

  1. BootstrapClassLoader(根类加载器)sun.boot.class.path 加载系统的包,包行jdk核心库里的类
  2. ExtensionClassLoader(扩展类加载器)java.ext.dirs 加载扩展jar包中的类
  3. AppClassLoader(应用程序类加载器)java.class.path 加载你编写的类,编译后的类
  4. Java.long.ClassLoader的子类,用户可以定制类的加载方式

3.3双亲委派机制

双亲委派机制的工作原理:

一层一层的让父类去加载,最顶层的父类不能加载往下数,依次类推。

  1. 类加载器收到类加载的请求
  2. 把这个请求一直往上委托,直到根类加载器(启动加载器)
  3. 类加载器检查能不能加载,能就加载,否则通知子加载器进行加载
  4. 重复步骤三
public class ClassLoaderDemo {
     public static void main(String[] args) {
          System.out.println("ClassLodarDemo's ClassLoader is " +ClassLoaderDemo.class.getClassLoader());
          System.out.println("The Parent of ClassLodarDemo's ClassLoader is " +
          ClassLoaderDemo.class.getClassLoader().getParent());
          System.out.println("The GrandParent of ClassLodarDemo's ClassLoader is " +
          ClassLoaderDemo.class.getClassLoader().getParent().getParent());
   }
}

ClassLodarDemo's ClassLoader is sun.misc.Launcher$AppClassLoader@18b4aac2
The Parent of ClassLodarDemo's ClassLoader is sun.misc.Launcher$ExtClassLoader@1b6d3586
The GrandParent of ClassLodarDemo's ClassLoader is null

好处:

  1. 保证了Java程序的文档运行,避免类的重复加载

  2. 保证了Java的核心API不被篡改

学习来自:B站-狂神说 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值