死磕深入理解java虚拟机2--第七章笔记

中间跳了几章,过些天(有可能是很多天)会补充回来


重温深入理解java虚拟机这本书,温故而知新。

书是基于java虚拟机规范而来,文章中会掺杂我的个人理解的描述,如有误,请指正。

1、类加载的时机

类生命周期

说明:类加载过程规范中并没有进行强制约束,具体实现自由把握。

初始化在有且只有此5种情况下必须被初始化。

A、遇到new、getstatic、putstatic或invokestatic字节码指令:使用new关键字、读取或设置类的静态字段(被final修饰,已在编译期把结果放入常量池的静态字段除外)、调用类的静态方法

B、java.lang.reflect包的方法进行反射

C、初始化类时候,发现父类没初始化,先初始化父类(接口除外)

D、虚拟机启动执行的主类

E、jdk1.7之后动态语言支持

2、类加载过程详解

(1)加载:拿到class文件,可以从网络、zip包、文件夹都可以。

(2)验证:文件格式、元数据、字节码、符号引用等的验证

(3)准备:正式为类变量(被static修饰的)分配内存并设置类变量初始值(被static修饰的基本类型 int为0)阶段,如果static final修饰,则直接为对应的值,比如public static final int value=321  这个阶段直接就是321,而不会是初始值0了。

(4)解析:a、类或接口的解析 b、字段解析 c、类方法解析 d、接口方法解析

(5)初始化(字节码开始内容开始登场):

A、编译为class文件后,会把静态代码块、静态变量生成<clinit>方法(类变量的赋值动作和static{}语句块),这里还有一个问题,就是静态代码块中的变量不能引用静态代码块后面声明变量,可以打印使用,不能赋值。详情见:https://blog.csdn.net/zhoumingsong123/article/details/82120362

B、虚拟机保证<clinit>先执行父类的,也就是一定先执行Object的

C、类或接口不是必须的,如果没有静态语句,也没有对变量进行的赋值操作

D、接口如果不存在静态语句块,则子类或者实现初始化时,不需要调用父接口的<clinit>方法。

F、虚拟机保证多线程加载的时候是线程安全的,只会有一个线程执行一次。

3、类加载器(上面是理论,这个是实现)

不同的类加载器加载的同一个class文件,在instanceof进行判断时候是不相同的。

双亲委派模型:不是强制行的,而是推荐的形式

(1)启动类加载器(Bootstrap ClassLoader):加载<JAVA_HOME>/lib目录中或者被-Xbootclasspath参数指定的路径,并且仅文件名识别rt.jar。

(2)扩展类加载器(Extension ClassLoader,sun.misc.Launcher$ExtClassLoader):加载<JAVA_HOME>/lib/ext或者java.ext.dirs指定的类库,开发者可以使用

(3)应用程序类加载器(Application ClassLoader,sun.misc.Launcher$AppClassLoader):加载类路径上的指定的类库

(4)自定义类加载器(虽然能随便加载类,但是加载以java.lang开头的类不会成功)

破坏双亲委派的情况:

(1)写自定义类加载的时候,可能会覆盖loadClass方法,这只是为了兼容1.2之前的逻辑,所以不建议自己覆盖此方法,应该覆盖findClass,这样loadClass加载不了的类再调用自定义的findClass方法进行寻找加载,实现完美的双亲委派模型。

(2)类似JNDI服务,需要父类用到自定义加载器加载的资源,使用线程上下文解决。

(3)程序的动态性,比如热部署、模块热部署等。例如OSGI模块化做的工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容