你可能不知道的jvm的类加载机制
引言:在java代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的。
加载:查找并加载类的二进制数据(class文件加载到内存中)
连接:a 验证:确保被加载类的正确性。
b准备:为类的静态变量分配内存,并将其初始化为默认值。
c解析:把类中的符号引用转换为直接引用。
初始化:为类的静态变量赋予正确的初始值。
-----java程序对类的使用方式分为两种(主动使用,被动使用)
-----创建类的实例
-----访问某个类或者接口的静态变量 getstatic指令,或者对该静态变量赋值。 putstatic 指令
-----调用类的静态方法 invoke指令
-----反射
-----初始化一个类的子类
-----包含main方法的类
类的加载
类的加载指将类的.class文件的二进制数据读入到内存中,将其放在运行时数据的方法去内,然后在内存中创建一个java.lang.Class对象用来封装类在方法去内的数据结构。(hotspot虚拟机把其放入在方法区)
*加载.class文件的方式(jvm未指定class的加载路径)
---从本地系统中直接加载
---通过网络下载.class文件
---从zip jar等文件中加载class文件
---将java源文件动态编译为.class文件(运行期动态编译加载的类)
-xx:+TraceClassLoading 用于追踪类的加载信息并打印出来(-xx:+<option>表示开启option选项 -xx:-<option>表示关闭option选项 -xx:<option>=<value> 表示给选项赋值)
final : 在编译阶段,被final static 修饰的常量会放入到调用常量所在类的常量池中。不会触发定义类的常量的初始化。
javap -c .class文件 查看反编译信息 助记符ldc 表示将int float string 类型的常量值从常量池中推送至栈顶。 助记符bipush表示单字节(-128-127)的常量推送至栈顶。 若数字范围越界 则 助记符变为 sipush(短整形常量值)
iconst_(12345)提供了5个助记符
anewarray 创建一个引用类型的数组,并将其引用值压至栈顶 newarray 创建一个原始类型(int float char等)数组 ,并将其引用压至栈顶;
类加载器
*java虚拟机自带的加载器
根类加载器(Bootstrap)
扩展类加载器(Extension)
系统(应用)类加载器(system,application)
*用户自定义类加载器
继承java.lang.classLoader
当java虚拟机初始化一个类的时候,要求他的所有父类都已经被初始化;
在初始化一个类时,并不会初始化它所实现的接口;
在初始化一个接口时,并不会先初始化它的父接口;
因此一个父接口并不会应为他的子接口或者实现类的初始化儿初始化,只有当程序首次使用特定接口的静态变量时,才会导致该接口的初始化。
你可能不知道的jvm的类加载机制的更多相关文章
- JVM内存结构 JVM的类加载机制
JVM内存结构: 1.java虚拟机栈:存放的是对象的引用(指针)和局部变量 2.程序计数器:每个线程都有一个程序计数器,跟踪代码运行到哪个位置了 3.堆:对象.数组 4.方法区:字节流(字节码文件) ...
- JVM之类加载机制
JVM之类加载机制 JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程. 类加载五部分 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这 ...
- JVM的类加载机制全面解析
什么是类加载机制 JVM把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被JVM直接使用的Java类型,这就是JVM的类加载机制. 如果你对Class文件的结 ...
- 大白话谈JVM的类加载机制
前言 我们很多小伙伴平时都是做JAVA开发的,那么作为一名合格的工程师,你是否有仔细的思考过JVM的运行原理呢. 如果懂得了JVM的运行原理和内存模型,像是一些JVM调优.垃圾回收机制等等的问题我们才 ...
- 一文教你读懂JVM的类加载机制
Java运行程序又被称为WORA(Write Once Run Anywhere,在任何地方运行只需写入一次),意味着我们程序员小哥哥可以在任何一个系统上开发Java程序,但是却可以在所有系统上畅通运 ...
- JVM的类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类加载的过程: 包括加载.链接(含验证.准备 ...
- 【JVM】类加载机制
原文:[深入Java虚拟机]之四:类加载机制 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段.它们开始的顺序如下图所示: 类加 ...
- 深入理解JVM(3)——类加载机制
1.类加载时机 类的整个生命周期包括了:加载( Loading ).验证( Verification ).准备( Preparation ).解析( Resolution ).初始化( Initial ...
- (转) JVM——Java类加载机制总结
背景:对java类的加载机制,一直都是模糊的理解,这篇文章看下来清晰易懂. 转载:http://blog.csdn.net/seu_calvin/article/details/52301541 1. ...
随机推荐
- ruby the diference between gets and gets.chomp()
ruby the diference between gets and gets.chomp() 二者都是可以获取用户命令行输入的函数,但是 gets获取内容后,后面 附带了 多余的换行符号'\n'; ...
- Java虚拟机-类加载
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行检验.转换解析和初始化,最终形成了可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制.在Java语言里,类型的加载.连接和初始化过 ...
- Vue--学习过程中遇到的坑
在这里总结一下学习Vue遇到的易错点,持续更新 1.实例化一个Vue对象: 通过new Vue({ el:'#id', data:{ a:'字符串1', b:‘字符串2’ }) 这里的Vue必须大写V ...
- Key-Value Store Indexer(Lily HBase Indexer) 小型采坑
环境: Cloudera Express 5.12.1 JDK 1.8.0_92 CentOS 7 步骤1:数据导入到Hbase中(非正题,跳过) hbase中表为allDoc,两个Family:fu ...
- 设计模式的征途—17.模板方法(Template Method)模式
在现实生活中,很多事情都需要经过几个步骤才能完成,例如请客吃饭,无论吃什么,一般都包含:点单.吃东西.买单等几个步骤,通常情况下这几个步骤的次序是:点单=>吃东西=>买单.在这3个步骤中, ...
- Mego(05) - Mego for Visual Studio Extension
前言 可能对于一个新的框架而言使用入门对于陌生人而言是比较困难的,因此为了最大限度的为使用者提供便利性,我们给Mego框架开发了针对Visual Studio的集成开发工具,让大家可以像使用Entit ...
- Flask构建微电影(二)
第三章.项目分析.搭建目录及模型设计 3.1.前后台项目目录分析 微电影网站 前台模块 后台模块 前台(home) 数据模型:models.py 表单处理:home/forms.py 模板目录:tem ...
- iscsi 挂载网络存储及存储访问
http://blog.sina.com.cn/s/blog_408764940101ghzi.html 一.Ess3016x设置 登陆admin 密码 888888888888 1.安装硬盘,查看硬 ...
- Git分支合并冲突解决(续)
接Git分支合并冲突解决,在使用rebase合并冲突情况下,如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态(即HEAD指向未知的分支),如何解决? 解决方法 (1)此时, ...
- python识别图片文字
因为学校要求要刷一门叫<包装世界>的网课,而课程里有200多道选择题,而且只能在手机完成,网页版无法做题,而看视频是不可能看视频的,这辈子都不可能看...所以写了几行代码来进行百度搜答案. ...