JVM基础(1)

单位:字节 (1字节=8位)  char 2

双亲委派机制是Java虚拟机中类加载器的层次化加载模型,用于确保类的安全性和完整性。其核心原理是:当一个类加载器收到类加载请求时,会优先将请求委派给父类加载器处理,逐级向上直至启动类加载器(Bootstrap ClassLoader),若父类加载器无法完成加载,则由当前加载器尝试加载。 ‌

具体机制
‌请求委派‌:当应用程序类加载器(AppClassLoader)收到类加载请求时,首先检查自身是否已加载该类;若未加载,则将请求委派给父加载器(ExtClassLoader);若仍未加载,则继续委派给启动类加载器。 ‌
‌层次结构‌:
‌Bootstrap ClassLoader‌:最顶层加载器,负责加载JRE核心库(如rt.jar),由C++实现。
‌ExtClassLoader‌:加载JRE扩展库(如JRE/lib/ext目录)。
‌AppClassLoader‌:加载用户应用程序或第三方库。 ‌

关键作用
‌避免类重复加载‌:通过层级委派确保类版本一致性,防止因重复加载导致冲突。
‌提升安全性‌:通过父类优先原则,确保核心类库不被篡改

示例验证 通过Java代码可验证类加载器的层级关系:

public class ClassLoaderTest {  
    public static void main(String[] args) {  
        ClassLoader mainLoader = ClassLoaderTest.class.getClassLoader();  
        System.out.println(mainLoader.toString());  
        // 输出为AppClassLoader,其父类为ExtClassLoader,再往上为Bootstrap ClassLoader。 ‌:ml-citation{ref="4,6" data="citationList"}
    }  
}  
 

对象是如何申请内存空间的:

在JVM内存管理中,‌S0和S1是新生代的两个存活区‌,用于存储对象在Eden区存活下来的数据。默认情况下,新生代内存分配比例为8:1:1,即Eden区占80%,S0和S1各占10%。 ‌ 1

核心功能 S0和S1主要用于对象分代收集(Minor GC),当Eden区填满后触发GC,存活对象会被移动到S0区;若S0区填满再触发GC,存活对象再移动到S1区。这种分代机制可减少Full GC频率,优化性能。

Full GC(全局垃圾回收)是Java虚拟机执行的一种垃圾回收机制,用于清理整个堆内存(包括年轻代、老年代)和方法区(元空间或Metaspace)中的无用对象。它是影响应用性能最大的垃圾回收操作,通常会导致应用程序线程暂停。

A、  触发条件 ‌老年代空间不足‌:当新对象无法在老年代分配空间时,触发Full GC。 ‌ 1 2 ‌手动执行GC‌:通过调用:ml-search-more[System.gc()]{text="System.gc()"}或:ml-search-more[Runtime.getRuntime().gc()]{text="Runtime.getRuntime().gc()"}方法强制执行。 ‌ 2 ‌启用GC日志‌:启用GC日志记录功能会触发Full GC以提供详细信息。

‌ B、回收内容 ‌堆内存‌:清理年轻代(Eden区和Survivor区)及老年代中的无用对象。 ‌ 1 3 ‌方法区‌:释放已加载的类信息、常量、静态变量等数据。 ‌

C、影响 Full GC因涉及整个堆内存扫描和清理,耗时较长,可能导致应用暂停(STW),影响性能。频繁触发时需优化内存使用或调整垃圾回收器配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值