JVM中的类加载&&Minor GC与Full GC

目录

[什么是类加载器? 常见的类加载器?](#什么是类加载器? 常见的类加载器?)

双亲委派模型

为什么要打破双亲委派模型

[Minor Gc 和 Full GC 有什么不同呢?Minor GC与Full GC分别在什么时候发生?](#Minor Gc 和 Full GC 有什么不同呢?Minor GC与Full GC分别在什么时候发生?)


什么是类加载器 ? 常见的类加载器?

Bootstrap ClassLoader :启动 类加载器

最顶层的加载类,由C++实现,负责加载JAVA_HOME/jre/lib目录下的jar包和类,(如String、System等)

Extension ClassLoader :扩展 类加载器

它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext 下的类)中JAR包的类

Application ClassLoader :系统 类加载器

面向我们用户的加载器,负责加载当前应用classpath下的所有jar包和类

双亲委派模型

双亲委派模式:

  • 在类加载的时候,系统会首先判断当前类是否被加载过。已经被加载的类会直接返回,否则才会尝试加载。

  • 加载器加载类时先把请求委托给自己的父类加载器执行, 直到顶层的启动类加载器. 父类加载器能够完成加载则成功返回, 不能则子类加载器才自己尝试加载.

  • 简而言之: 自底向上检查类是否被加载, 自顶向下尝试加载类

优点:

  • 避免类的重复加载

  • 避免Java的核心API被篡改, 保证安全

为什么要打破双亲委派模型

但是使用双亲委派也存在一定的局限性,在正常情况下,用户代码是依赖核心类库的,所以按照正常的双亲委派加载流程是没问题的;

但是在加载核心类库时,如果需要使用用户代码,双亲委派流程就无法满足;

比如在使用JDBC时, 利用DriverManager.getConnection获取连接

时,就会存在这样的问题。

  • DriverManager是由Bootstrap ClassLoader加载的,在加载DriverManager时,会执行其静态方法,加载初始驱动程序;

  • 但是这些实现类基本都是第三方厂商提供的,根据双亲委派原则,第三方的类不可能被Bootstrap ClassLoader加载。

  • 所以这时候就需要打破双亲委派模型来进行加载.

Minor Gc 和 Full GC 有什么不同呢?Minor GC与Full GC分别在什么时候发生?

  • Minor GC是发生在新生代的垃圾收集动作,所以Minor GC非常频繁,一般回收速度也比较快。

  • Full GC 指的是针对新生代、老年代、永久代的全体内存空间的垃圾回收. Full GC回收速度更慢, 发生频率也更低.

什么时候触发Minor GC

  • Eden区域满了

  • 新创建的对象大小 > Eden所剩空间

什么时候会触发full GC

  • System.gc()方法的调用

  • 老年代空间不足

  • 永久代空间不足

  • 统计得到的Minor GC晋升到老年代的平均大小大于老年代的剩余空间

  • 堆中分配很大的对象

所谓大对象,是指需要大量连续内存空间的java对象,例如很长的数组,此种对象会直接进入老年代,而老年代虽然有很大的剩余空间,但是无法找到足够大的连续空间来分配给当前对象,此种情况就会触发JVM进行Full GC。

相关推荐
mister_guo1 小时前
JVM 内存管理原理及生产配置实战:从“参数能启动”到“内存可控”
java·jvm
wear工程师1 天前
Java 类初始化到底何时触发?别把加载、连接和 static 执行混在一起
java·jvm
程序员雷欧1 天前
线上频繁触发各种 GC 的原因排查与处理指南
java·jvm·算法
wuminyu2 天前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
147API3 天前
Python批量生成蒸馏数据,并发、重试、幂等和断点续跑
开发语言·jvm·python
wuminyu3 天前
JDK21解决虚拟线程IO阻塞原理剖析
java·linux·c语言·jvm·c++
sunywz3 天前
【JVM】(8)JVM调优实战及常量池详解
jvm
wuminyu4 天前
虚拟线程底层ForkJoinPool的工作窃取算法机制
java·linux·c语言·jvm·c++
leisoo80974 天前
股票数据本地化存储实战:JSON、数据库与列式存储的方案对比
jvm·数据库·json
SamChan904 天前
PDF翻译中的并发控制:用Semaphore防止API限流与资源耗尽
java·jvm·pdf