面试之三:JVM类加载机制-类加载各阶段说明和类加载器
- 一、类生命周期:共7个阶段
- 类从被加载到虚拟机内存中开始,到卸载出内存。整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。
- 其中验证、准备、解析3个部分统称为连接。
- 类加载的过程:不包括上面的使用和卸载。
- 示意图:
- 类从被加载到虚拟机内存中开始,到卸载出内存。整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。
- 二、类加载各阶段说明:(加载只有5个阶段,不包括使用和卸载)
- 加载:(完成3步)
- 通过一个全限定类名来获取定义此类的二进制字节流;
- 将这个字节流的静态存储结构转化为方法区的运行时数据结构;
- 在内存中生成一个代表该类的Class对象,作为方法区这个类的各种数据的访问入口;
- 验证:(连接阶段的第一步)
- 目的:确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并不会危害虚拟机自身的安全。
- 4个阶段:
- 1、文件格式验证
- 2、元数据验证
- 3、字节码验证
- 4、符号引用验证
- 准备:
- 正式为类变量分配内存并设置类变量初始值,都在方法区中分配。
- 1、进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量。
- 实例变量将会在对象实例化时随着对象一起分配在Java堆中。
- 2、这里说的初始值“通常情况”下是数据类型的零值,
- 1、进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量。
- 正式为类变量分配内存并设置类变量初始值,都在方法区中分配。
- 解析:
- 虚拟机将常量池内的符号引用替换为直接引用的过程。
- 注:符号引用类似于别名,直接引用类似于实际存储地址;
- 具体解析有:类或接口的解析、字段解析、类方法解析、接口方法解析
- 虚拟机将常量池内的符号引用替换为直接引用的过程。
- 初始化:(类加载过程的最后一步)
- 真正开始执行类中定义的Java程序代码(或者说是字节码)
- 初始化阶段是执行类构造器<clinit>()方法的过程。
- <clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的。
- 1、静态语句块中只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问。
- 2、父类中定义的静态语句块要优先于子类的变量赋值操作
- 编译器收集的顺序是由语句在源文件中出现的顺序所决定的,
- <clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的。
- 加载:(完成3步)
- 三、类加载器(顶级在上,次级在先)
- 1、启动类加载器(顶级)
- 加载<JAVA_HOME>\lib目录中的类库(或被-Xbootclasspath参数所指定的路径中)
- 2、扩展类加载器(开发者可直接使用)
- 加载<JAVA_HOME>\lib\ext目录中的类库(或被java.ext.dirs系统变量指定的路径中的类库)
- 3、应用程序类加载器(开发者可直接使用)
- 加载用户类路径(ClassPath)上所指定的类库。
- 4、用户自定义加载器:
- 附:
- 1、启动类加载器(顶级)
- 四、双亲委派模型
- 要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。
- 类加载器双亲委派模型:

面试之三:JVM类加载机制-类加载各阶段说明和类加载器的更多相关文章
- JVM类加载机制详解(二)类加载器与双亲委派模型
在上一篇JVM类加载机制详解(一)JVM类加载过程中说到,类加载机制的第一个阶段加载做的工作有: 1.通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件).而获取的方式,可 ...
- 深入理解JVM虚拟机6:深入理解JVM类加载机制
深入理解JVM类加载机制 简述:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 下面我们具体 ...
- JVM总结(四):JVM类加载机制
这一节我们来总结一下JVM类加载机制.具体目录如下: 类加载的过程 类加载过程概括 说说引用 详解类加载全过程: 加载 验证 准备 解析 初始化 虚拟机把描述类的数据从Class文件加载到内存,并对数 ...
- JVM活学活用——类加载机制
类的实例化过程 有父类的情况 1. 加载父类静态 1.1 为静态属性分配存储空间并赋初始值 1.2 执行静态初始化块和静态初始化语句(从上至下) 2. 加载子类静态 2.1 为静态 ...
- Java虚拟机(四):JVM类加载机制
1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...
- JVM类加载机制(转)
原文出自:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运 ...
- JVM内存结构 JVM的类加载机制
JVM内存结构: 1.java虚拟机栈:存放的是对象的引用(指针)和局部变量 2.程序计数器:每个线程都有一个程序计数器,跟踪代码运行到哪个位置了 3.堆:对象.数组 4.方法区:字节流(字节码文件) ...
- JVM 学习笔记一 :JVM类加载机制
前言: 最近在看JVM相关资料,这里记录下学习笔记,希望自己能坚持学完,打牢基础. 一.类加载过程 1,类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用 ...
- JVM 第三篇:Java 类加载机制
本文内容过于硬核,建议有 Java 相关经验人士阅读. 1. 什么是类的加载? 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 ...
- JVM(5) 类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化.最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 一.类加载的时机 类从被加载到虚拟机内存中开 ...
随机推荐
- unity, 由Matrix4x4提取Quaternion和Vector3 及 由Quaternion,Vector3构造Matrix4x4
一,由Matrix4x4提取Quaternion和Vector3 Quaternion getRotationFromMatrix(Matrix4x4 m) { return Quat ...
- JVM虚拟机(四):JVM 垃圾回收机制概念及其算法
垃圾回收概念和其算法 谈到垃圾回收(Garbage Collection)GC,需要先澄清什么是垃圾,类比日常生活中的垃圾,我们会把他们丢入垃圾箱,然后倒掉.GC中的垃圾,特指存于内存中.不会再被使用 ...
- sql查看所有表大小的方法
sql查看所有表大小的方法. 代码: declare @id int ) declare @pages int declare @dbname sysname ,) ,) ,) create tabl ...
- linux(二十一):apache服务配置(二)
1.普通用户进入家文件夹 紧接着之前的进度,我们想想博客的实现.每一个用户在登录之后.都是在自己的家文件夹.那么对于我们的要求就是要设置每一个用户的默认公布文件夹为其家文件夹. 接着我们就来实现 ...
- 华为OJ训练之 简易的银行排号叫号系统
闯关第五关的题目,一个中级题和一个高级题.中间题比較简单,半个小时完毕了.题目例如以下 实现一个简易的银行排号叫号系统 get 取号 演示样例:" ...
- python WSGI框架详解
1.web应用的本质1)浏览器发送一个HTTP请求2)服务器收到请求,生成一个HTML文档3)服务器把HTML文档作为HTTP响应的body发个浏览器4)浏览器收到HTTP响应,从HTTP Body取 ...
- jq实现千分位的转换
一.千分位转换位整数 var sum = '2,034,300';var x = sum.split(",");var plan_sum = parseFloat(x.join(& ...
- Hive使用过程中的坑
在Hive脚本中如果有 use db; #即使用数据库 最后一定要有一个exit;脚本,退出hive窗口 否则运行到最后,hive无法启动MR任务,只是卡在打印完成hive脚本处. 例子如下: $Hi ...
- Unix系统编程()复制文件描述符
Bourne shell的IO重定向语法2>&1,意在通知shell把标准错误(文件描述符2)重定向到标准输出(文件描述符1).因此下列命令将把标准输出和标准错误写入result.log ...
- am335x gpio控制
1.执行下面的命令,可以显示目前驱动已经申请到的IO状态 : $ mount -t debugfs debugfs /sys/kernel/debug $ cat /sys/kernel/debug ...