类加载过程
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析、初始化,最终形成可以被虚拟机执行使用的Java类型
加载:class文件读入内存,创建一个java.lang.Class对象。
验证:校验读取的class文件满足虚拟机要求。
准备:为类变量分配内存空间,赋零值。
解析:将常量池中所有的符号引用全部转成直接引用。
初始化:执行static标识的代码段。
双亲委派模型 解决了各个类加载器的基础类的统一问题
一个类加载器收到类加载的请求,先把请求委托给父加载器去完成。
父加载器在它的搜索范围中没有找到所需的类时,子加载器才会尝试自己去加载该类。
名称 | 特征 | 作用 | 配置 | 异常 |
---|---|---|---|---|
栈区 | 线程私有,使用一段连续的内存空间 | 存放局部变量表、操作栈、动态链接、方法出口 | -XSs | StackOverflowError OutOfMemoryError |
堆 | 线程共享,生命周期与虚拟机相同 | 保存对象实例 | -Xms -Xmx -Xmn | OutOfMemoryError |
程序计数器 | 线程私有、占用内存小 | 字节码行号 | 无 | 无 |
方法区 | 线程共享 | 存储类加载信息、常量、静态变量等 | -XX:PermSize -XX:MaxPermSize | OutOfMemoryError |