你可能不知道的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. ...
随机推荐
- 推荐两个国外公共CDN服务
最近这个国家信息安全问题舆论形势又见紧张,Google的访问又被强力堵截,谷歌的公共CDN也顺带被波及,像AngularJS这样的前卫js库,国内几大公共CDN服务都不提供支持.国外目前两大第三方公共 ...
- 关于Python的super用法研究
一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(se ...
- 上传本地代码及更新代码到GitHub教程
上传本地代码及更新代码到GitHub教程 上传本地代码 第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo " ...
- nginx安装配置+集群tomcat:Centos和windows环境
版本:nginx-1.8.0.tar.gz 官网:http://nginx.org/en/download.html 版本:apache-tomcat-6.0.44.tar.gz 官 ...
- js 写21点
======================================= var count = 0; function cc(card) {// Only change code below ...
- day07
放完了愚人节的假期后就忘记更新了,这样不好,学习的态度也有点懒散了,需要调整过来,这几天在做一个退款流程,想好了建表.逻辑设计和需求分析,然后就是写具体的代码了,有些东西还是要多学习,不然书到用时方恨 ...
- linux下svn(subversion)服务端添加工程及配置权限
linux下svn(subversion)服务端添加工程及配置权限 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/9010507.html 此篇我只是将所做过的 ...
- git merge 撤销与git 回滚
git merge提交后恢复 http://blog.psjay.com/posts/git-revert-merge-commit/ git回滚 https://www.jianshu.com/p/ ...
- S3C6410板子移植 Android2.2
一:Android简介 1.什么是Android: Android是一种基于linux的自由及开放源代码的操作系统,主要适用于移动设备,如智能手机和平板电脑,是由google公司和开放手机联盟领导和开 ...
- Linux kernel的中断子系统之(三):IRQ number和中断描述符
返回目录:<ARM-Linux中断系统>. 总结: 二描述了中断处理示意图,以及关中断.开中断,和IRQ number重要概念. 三介绍了三个重要的结构体,irq_desc.irq_dat ...