java虚拟机类加载过程内存情况底层源码分析及ClassLoader讲解

本文深入探讨了Java虚拟机的类加载机制,包括加载、连接、初始化等步骤,以及在内存中的表现。重点分析了加载器的工作原理,如类加载器如何获取二进制字节流,以及类加载器的层次结构和父类委托机制。此外,还讨论了自定义类加载器的可能性和安全性考量,强调了不应轻易绕过父类委托机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读书笔记加自我总结-----------------------------------------------

《疯狂JAVAj讲义》

《深入理解JAVA虚拟机》第七章虚拟机加载机制

《传智播客Java底层公开课视频》教学视频

参考:


一、虚拟机的类加载机制

        

加载  连接   初始化    ------------> 程序运行期完成

坏处:                        好处:

性能开销                   灵活性大大增强



二、虚拟机加载的过程如下






三、加载之后在内存中的样子


假设现在有这样一个类

public class Demo {

	public static void main(String[] args) {
		new Person();
	}

}

class Person{
	private int age;
	
	public Person()
	{
		System.out.println("this is Person Construct Method");
	}
}

class Animal{
	public static String name;
	
}

它在经过加载之后大致在内存中就如下:(非官方图,个人意淫)



至于new一个类之后在堆中内存怎么存放,咱们下节再细说



四、过程5初始化

自动收集1.类变量赋值,2静态语句块  形成<clinit>方法,各语句的顺序按照在类文件中出现的顺序


虚拟机会保证一个类的<clinit>()方法在多线程环境被正确的加锁、同步。

如果多线程同时初始化一个类,只会一个线程执行<clinit>()方法,其他线程阻塞等待。执行的线程执行结束后,其它线程唤醒之后不会再进入<clinit>()。同一个类加载器下,一个类只会初始化一次。




五、过程1加载:加载器

过程1由一个特定的组件进行完成:类加载器


除了加载阶段(图1的阶段1)用户应用程序可以通过自定义加载器参与,剩下的动作完全由虚拟机主导控制<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值