第六篇 JVM核心机制之JVM运行和类加载全过程(一)
JVM核心之JVM运行和类加载全过程
为什么研究类加载全过程?
有助于连接JVM运行过程
更深入了解java动态性(解热部署,动态加载),提高程序的灵活性
类加载机制
JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成JVM可以直接使用的java类型的全过程
加载
将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,
在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口,
这个过程需要类加载器参与。
链接
①将java类的二进制代码合并到JVM的运行状态之中的过程
②验证:确保加载的类信息符合JVM规范,没有安全方面的问题
③准备:正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方法去中进行分配
④解析:虚拟机常量池的符号引用替换为字节引用过程
初始化
①初始化阶段是执行类构造器<clinit>()方法的过程。类构造器<clinit>()方法是由编译器自动收藏类中的所有类变量的赋值动作和静态语句块(static块)中的语句合并产生
②当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化
③虚拟机会保证一个类的<clinit>()方法在多线程环境中被正确加锁和同步
④当范围一个Java类的静态域时,只有真正声名这个域的类才会被初始化
1 public class Demo01 { 2 public static void main(String[] args) { 3 /*String str = "aaa"; 4 int a = 23435;*/ 5 //调用A类的方法 6 A a = new A(); 7 //注意打印出来的width的值和程序执行的顺序 8 System.out.println(a.width); 9 } 10 } 11 12 class A{ 13 public static int width = 100; 14 static{ 15 System.out.println("静态初始化A"); 16 width = 300; 17 } 18 public A(){ 19 System.out.println("创建A类的对象"); 20 } 21 }
转载于:https://www.cnblogs.com/zhangzhipeng001/p/9128956.html
第六篇 JVM核心机制之JVM运行和类加载全过程(一)相关推荐
- 第七篇 JVM核心机制之JVM运行和类加载全过程(二)
分析: 说明: 内存中存在栈.堆(放创建好的对象).方法区(实际也是一种特殊堆) 1.JVM加载Demo01时候,首先在方法区中形成Demo01类对应静态数据(类变量.类方法.代码-),同时在堆里面 ...
- 第十篇 JVM核心机制之JVM运行和类加载全过程(五)
加密.解密操作 加密操作 1 /** 2 * 3 * 加密操作 4 * 5 * @author Zhang XiaoDao 6 * 7 */ 8 public class EncrpUtil { 9 ...
- JVM核心——JVM运行和类加载全过程
1.类加载全过程 (1)类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成JVM可以直接使用的Java类型的过程. 加载 将class文件字节码内容加载到内存中,并 ...
- JVM核心之JVM运行和类加载全过程
为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和初始化,最终 ...
- JVM运行和类加载全过程
一. 为什么研究类加载全过程 有助于了解JVM运行过程 更深入了解java动态性(了解热部署.动态加载)提高程序的灵活性. 二. 类加载机制 JVM把class文件加载到内存,并对数据进行校验.解析和 ...
- JavaWeb学习总结第六篇--认识Session机制
认识Session机制 前文也提到过,常用的会话跟踪有两种技术:Cookie和Session.今天就为大家讲解一下Session机制. 什么是Session? Session是另一种记录客户状态的机制 ...
- JVM核心知识体系(转http://www.cnblogs.com/wxdlut/p/10670871.html)
1.问题 1.如何理解类文件结构布局? 2.如何应用类加载器的工作原理进行将应用辗转腾挪? 3.热部署与热替换有何区别,如何隔离类冲突? 4.JVM如何管理内存,有何内存淘汰机制? 5.JVM执行引擎 ...
- 满满的一整篇,全是 JVM 核心知识点!
头图 | CSDN 下载自视觉中国 作者 | sowhat1412 责编 | 张文 来源 | sowhat1412(ID:sowhat9094) 想要提高程序员自身的内功心法无非就是数据结构跟算法 ...
- 第七篇:双管齐下,JVM内部优化与JVM性能调优
文章目录 一.前言 二.编译时优化 2.1 Javac编译器 2.2 Java语法糖 2.2.1 泛型和泛型擦除 2.2.2 自动装箱.自动拆箱.遍历循环 2.2.3 条件编译 三.运行时优化(核心: ...
最新文章
- python无法读取文件-Python读取文件
- [20160725]MyComparableTest
- PHP中类和文件的代码注释规范
- mysql sql_safe_updates 分析
- mysql正确打开方式_MySQL中MVCC的正确打开方式
- 对两个字符串进行比较,取出两个字符串中一样部分的长度
- mac全选文字的快捷键_最全Mac系统快捷键一览
- haproxy搭建web群集
- ASP.NET Core改进了.NET Framework中的字符串处理
- iOS中有两种支持机制:Notification和KVO(Key-Value Observing)
- SpringCloud面试题及答案
- Python中文件的读写、写读和追加写读三种模式的特点
- 堆排序算法java左程云_堆排序算法以及JAVA实现
- [Sciter] 资源引用
- Sublime Text 收藏笔记
- html百度站内搜索代码,网站添加百度站内搜索的教程
- GNSS北斗高精度定位终端_一体化接收机
- 自己动手,更换中兴F663NV3a光猫,换为华为MA5671,真香。(中国移动光纤宽带)
- android6.0原生brower_六款顶级Android手机原生浏览器决战
- C++著名库的比较和学习经验
热门文章
- ikun 潜入?疑似 B 站后台源码泄露
- bootsect Linux,linux_bootsect选读.doc
- python判断是相邻数字,检查Python中相邻数字的绝对差之和是否为素数
- echart折线图删除_用Echart创建简单的折线图
- 出现身份验证错误 要求的函数不受支持_学习使用Kotlin创建Android应用程序第3部分:身份验证登录...
- c++ sleep函数_我们如何在C,C ++中控制/安排线程的执行?
- 表单中Readonly和Disabled的区别
- 业务编排可视化_微服务设计-服务组合和可视化编排思考
- oracle存储怎么调试tord,接口_数据交换应用指导(20页)-原创力文档
- nginx 过滤post报文 防火墙_十八般武艺之Nginx踩坑总结