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 首先启动的第一件事就是运行 ...
随机推荐
- BZOJ1491 [NOI2007]社交网络[最短路计数]
$n$非常的小,结合题目计算式可以想到$O(n^3)$暴枚$s,t,v$,看$v$在不在$s\to t$最短路上($dis_{s,v}+dis_{v,t}=dis_{s,v}$是$v$在两点最短路上的 ...
- Git-------常用操作记录
说明: 一般情况下,git要将内容提交到本地仓库,都是先将内容提交到暂存区,然后再从暂存区提交到本地仓库. 常用命令(一个简单的示例操作): git init:会默认创建一个分支,命名为master ...
- ingress部署
# 手动部署 # 部署ingress-nginx 官方地址:https://github.com/kubernetes/ingress-nginx # 参考链接:https://www.jianshu ...
- h5 rem计算
设置html默认font-size: 100px,此时默认的页面的width是750px,然后根据手机大小改变html节点的font-size,从而改变rem的大小,代码如下: <script& ...
- 02 Vue介绍与安装,指令系统 v-*、音乐播放器
VUE文档 https://cn.vuejs.org/v2/guide/ 1.vue的介绍 尤雨溪 1.vue的优点 2.vue的介绍 3.vue的安装 4.声明式渲染 <body> &l ...
- .net上传超大文件解决方案
HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...
- Centos 7 安装 Xilinx SDSoC Development Environment
1.CentOS版本信息 $ cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core) 2.SDSoC下载地址: https://www. ...
- webpack4(4.41.2) 打包出现 TypeError this.getResolve is not a function
报错问题: webpack 打包出现 TypeError: this.getResolve is not a function 环境: nodejs 12.13.0 npm 6.12.0 webpac ...
- Android有进度条异步任务下载图片
首先在AndroidMainifest中添加上网权限 ? 1 <uses-permission android:name="android.permission.INTERNET&qu ...
- jQuery文档操作之插入操作
append() 语法 父元素.append(子元素) 解释:追加某元素,在父元素中添加新的子元素.子元素可以为:string/element(js对象)/jQuery元素 代码如下: var oli ...