JVM内存管理面试常见问题全解

目录 2、为什么要双亲委派机制 3、双亲委派机制的核心源码 5、自定义加载器实现双亲委托机制 6、自定义加载器打破双亲委派机制 1、运行时数据区的介绍(也叫JVM的内存模型 JMM、内存区域) 2、程序在执行时运行数据区的内存变化 1、对象成为垃圾的判断依据 2、 对象中的finalize方法 1、标记清除算法、复制算法、标记整理算法、分代回收法 3、对象进⼊到⽼年代的条件 十、JV
摘要由CSDN通过智能技术生成

目录

      • 2、为什么要双亲委派机制
      • 3、双亲委派机制的核心源码
      • 5、自定义加载器实现双亲委托机制
      • 6、自定义加载器打破双亲委派机制
      • 1、运行时数据区的介绍(也叫JVM的内存模型 JMM、内存区域)
      • 2、程序在执行时运行数据区的内存变化
      • 1、对象成为垃圾的判断依据
      • 2、 对象中的finalize方法
      • 1、标记清除算法、复制算法、标记整理算法、分代回收法
      • 3、对象进⼊到⽼年代的条件
  • 十、JVM性能调优的原则有哪些?
  • 十一、什么情况下需要JVM调优?
  • 十二、聊聊Java的GC机制

一、什么是JVM

Java Virtual Machine(Java虚拟机)是java程序实现跨平台的⼀个重要的⼯具(部件)。

HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是⽬前使⽤范围最⼴的Java虚拟机。

只要装有JVM的平台,都可以运⾏java程序。那么Java程序在JVM上是怎么被运⾏的?

通过介绍以下JVM的三个组成部分,就可以了解到JVM内部的⼯作机制

  • 类加载系统:负责完成类的加载

  • 运⾏时数据区:在运⾏Java程序的时候会产⽣的各种数据会保存在运⾏时数据区

  • 执⾏引擎:执⾏具体的指令(代码)

1、jvm的三个组成部分

  • 类加载系统

  • 运行时数据区

  • 执行引擎

二、类加载系统

1、类的加载过程

⼀个类被加载进JVM中要经历哪⼏个过程

  • 加载: 通过io流的⽅式把字节码⽂件读⼊到jvm中(⽅法区)

  • 校验:通过校验字节码⽂件的头8位的16进制是否是java魔数cafebabe

  • 准备:为类中的静态部分开辟空间并赋初始化值

  • 解析:将符号引⽤转换成直接引⽤。——静态链接

  • 初始化:为类中的静态部分赋指定值并执⾏静态代码块。

类被加载后,类中的类型信息、⽅法信息、属性信息、运⾏时常量池、类加载器的引⽤等信息会被加载到元空间中。

2、类加载器

  1. 类是谁来负载加载的?——类加载器
  2. Bootstrap ClassLoader 启动类加载器:负载加载jre/lib下的核⼼类库中的类,⽐如rt.jar、charsets.jar
  • ExtClassLoader 扩展类加载器:负载加载jre/lib下的ext⽬录内的类

ext 加载路径:System.getProperty("java.ext.dirs");

  • AppClassLoader 应⽤类加载器:负载加载⽤户⾃⼰写的类

app 加载路径:System.getProperty("java.class.path");

  • ⾃定义类加载器:⾃⼰定义的类加载器,可以打破双亲委派机制。

三、双亲委派机制

1、双亲委派机制介绍

当类加载进⾏加载类的时候,类的加载需要向上委托给上⼀级的类加载器,上⼀级继续向上委托,直到启动类加载器。启动类加载器去核⼼类库中找,如果没有该类则向下委派,由下⼀级扩展类加载器去扩展类库中,如果也没有继续向下委派,直到找不到为⽌,则报类找不到的异常。

应⽤类加载器怎么加载Student和String呢?需要通过双亲委派机制

2、为什么要双亲委派机制

防⽌核⼼类库中的类被随意篡改

防⽌类的重复加载

3、双亲委派机制的核心源码

  • ClassLoader.class

4、全盘委托机制

当⼀个类被当前的ClassLoader加载时,该类中的其他类也会被当前该ClassLoader加载。除⾮指明其他由其他类加载器加载。

5、自定义加载器实现双亲委托机制

6、自定义加载器打破双亲委派机制

四、运行时数据区

1、运行时数据区的介绍(也叫JVM的内存模型 JMM、内存区域)

JMM分成了这么⼏个部分

  1. 堆空间(线程共享):存放new出来的对象
  2. 元空间(线程共享):存放类元信息、类的模版、常量池、静态部分
  3. 线程栈(线程独享):⽅法的栈帧
  4. 本地⽅法区(线程独享):本地⽅法产⽣的数据
  5. 程序计数器(线程独享):配合执⾏引擎来执⾏指令

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值