jvm学习笔记:一、类的加载、连接、初始化
- 在JAVA代码中,类型的加载、连接与初始化过程都是程序运行期间完成的。
- 类型的加载:将已经存在的class从硬盘加载到内存。
- 类型的连接:将类与类之间的关系确定好。
- 类型的初始化:类型 静态的变量进行赋值。
- 类加载器(classLoader)的深入剖析
- 每一个类都是由类加载器加载到类型当中
- 在以下代码中,java虚拟机会结束生命周期:
- 执行System.exit()方法。
- 程序正常结束。
- 程序在执行中遇到异常或者错误而异常终止。(没有去捕获异常,一直抛到main方法) - 由于操作系统出现错误,导致JAVA虚拟机进程终止。
- 加载、连接、初始化
- 加载:查找并加载类的二进制数据
- 连接:
- 验证:确保被加载类的正确性。
- 准备:为类的静态变量分配内存,并将其初始化为默认值。
例1:pulic static int a = 1; 会将0作为默认值赋值给a,而不是1. - 解析:把类中的符号(间接)引用转化为直接引用(通过指针)。
- 初始化:为类的静态变量赋予正确的初始值。
例2: 将例1中的a 赋值正确的初始值1;
- java程序对类对使用方式分为两种。
- 主动使用
- 被动使用
所有java虚拟机实现必须在每个类或接口被java程序“首次主动使用”时才会加载他们。
- 主动使用(七种)
- 创建类对实例 new User();
- 访问某个类或者接口对静态变量(getstatic),或者对静态变量赋值(putstatic)
- 调用类对静态方法 (invokestatic)
- 反射 (Class.forName("com.chen.Test"))
- 初始化一个类对子类 (初始化类 child类,也是对parent类进行初始化 child extend parent)
- JDK1.7 提供动态语言的支持(java.lang.invoke.MethodHandle实例的解析结果REF_getStatic,REF_putStatic,REF_invokeStatic句柄对应的类没有初始化,则初始化)
- 被动使用:
- 除了其他七种情况外,其他使用java类的方式都被看做类的被动使用,都不会导致类的初始化(但可以被加载和连接)
- 类的加载
- 类的加载指 类的CLass的二进制数据读入到内存当中,将其放在运行时数据区的方法区内,然后在内存中创建一个java.lang.Class对象(规范并未说明Class对象在哪里,HotSpot虚拟机将其放在方法区内)用来封装类在方法区内的数据结构。
- 类的加载方式
- 从本地系统中直接加载
- 通过网络下载.class文件加载
- 从jar zip 等归档中加载.class文件
- 从专有数据库中提取.class
- 将java源文件动态编译为.class文件
jvm学习笔记:一、类的加载、连接、初始化的更多相关文章
- [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...
- Flutter学习笔记(19)--加载本地图片
如需转载,请注明出处:Flutter学习笔记(19)--加载本地图片 上一篇博客正好用到了本地的图片,记录一下用法: 首先新建一个文件夹,这个文件夹要跟目录下 然后在pubspec.yaml里面声明出 ...
- Java 类的加载与初始化
本文结构: 1.先看几道题 2.类的加载于初始化 (1)类的加载 (2)类的初始化 (a)会发生类的初始化的情况 (b)不会发生类的初始化的情况 首先看几道题. 解析可在看完讲解后再看 Demo1 p ...
- java类的加载以及初始化顺序
类的加载和初始化的了解对于我们对编程的理解有很大帮助,最近在看类的记载方面的问题.从网上查阅了若干文章,现总结如下: 我们通过一段代码来了解类加载和初始化的顺序: package com.classl ...
- jvm系列(一):java类的加载机制
java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...
- Java类的加载 链接 初始化
原文地址 Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码到能够 ...
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- Quartz.net 2.x 学习笔记03-使用反射加载定时任务
将定时任务信息存储在XML文件中,使用反射加载定时任务 首先新建一个MVC的空站点,使用NuGet添加对Quartz.net和Common.Logging.Log4Net1213的引用,同时使用NuG ...
- JVM详解之:类的加载链接和初始化
目录 简介 加载 运行时常量池 类加载器 链接 验证 准备 解析 初始化 总结 简介 有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初始化 ...
- XV6学习笔记(1) : 启动与加载
XV6学习笔记(1) 1. 启动与加载 首先我们先来分析pc的启动.其实这个都是老生常谈了,但是还是很重要的(也不知道面试官考不考这玩意), 1. 启动的第一件事-bios 首先启动的第一件事就是运行 ...
随机推荐
- hive日期函数-杂谈(一)
来到广发返现由于历史遗留问题很多时间格式十分杂乱 我将总结一下时间日期的事情 1.hive原生时间函数的功能 2.一些基本业务时间范围的指标的sql案例 3.自定义udf函数让后来人更方便
- 第十一章 前端开发-bootstrap
11.5.0 bootstrap 11.5.1 bootstrap的介绍和响应式 http://book.luffycity.com/python-book/95-bootstrap/951-boot ...
- Oracle 查询对应表所有字段名称,可排除不想要的字段
由于Oracle varchar类型长度限制为4000 ,以下方法仅支持查询字段拼接后长度小于等于4000 第一种方法 select wm_concat(column_name) from user_ ...
- Postman之 SSL证书配置随手记
参考文档: https://learning.getpostman.com/docs/postman/sending_api_requests/certificates/ 随着 https 的推动,更 ...
- 设计一个Mypoint类,求两个点之间的距离
package Test; public class test6 { public static void main(String[] args) { // TODO Auto-generated m ...
- 【Java Web】简易商品信息管理系统——首个Web项目
正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...
- jquery load() 方法 语法
jquery load() 方法 语法 作用:当指定的元素(及子元素)已加载时,会发生 load() 事件.该事件适用于任何带有 URL 的元素(比如图像.脚本.框架.内联框架).根据不同的浏览器(F ...
- VirtualbBox:UEFI环境下安装VirtualBox
造冰箱的大熊猫@cnblogs 2018/12/18 1.问题 在一台新计算机上安装VirtualBox,启动虚拟机时出现“Kernel driver not installed (rc=-1908) ...
- 【原创】谈一个数学教育专业的IT职业生涯
2003年,有许多值得记住,第一个是非典,第二个就是高考数学卷.直到今年2019年,时隔16年,有人说2019年高考数学卷难度堪比2003年,但还没难到2003年的程度. 我,2003年高考,进考场先 ...
- 灰度图像--图像分割 Canny边缘检测
学习DIP第48天 **转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发: https:/ ...