java源码解读,wimtool使用教程

你好,我是江湖人给我起绰号[醉薰外套]的野性歌曲老师。

大家平时都在看jdk的源代码,但是看了之后,是不是怎么也够不着native方法,走投无路了呢?

今天,如何准确定位与Java方法对应的c代码,如何高效地研究Hotspot源代码,以及! 告诉我如何修改Hotspot源代码,拓展反射API,为我所用!

怎么找?以线程的start方法为例

一.定位文件

只要是系统的native方法,都是规则的

start0是Thread类中的方法,Thread类在jdk中有相应的. c文件。/open JDK/JDK/src/share/native/Java/lang/class.c

你见过很多你熟悉的Java类吗? 例如,在System.c中,包含System.java的所有native方法。

二、找到方法

由于系统提供的JNI模块有两种方法可以在native中注册,因此如果您查找,可能会发现两种情况:

1 .可以直接调用JVM模块中的方法,在每个. c文件的开头找到它

2、在JNI模块中定义方法,直接查找

3、你只有了解这张远古的图,才能了解JVM各个模块的位置和联系

如何找到native方法对应的Hotspot源代码是第一步,接下来的问题是如何阅读。

Hotspot主要是用c写的,所以需要学习c。 对大家来说,C最难的应该是其丰富的语法糖和万恶的根源指南。 这些知识只能通过做项目来掌握和深入理解。 所以,c是基础,也要有c的项目开发经验。 否则,无法读取Hotspot源代码。 做什么项目? 应该写与Hotspot相关的小项目,例如OOP机制、内存池和垃圾回收算法,而不是写常见的数据结构和算法…

掌握c,有c项目的开发经验就可以了吗? 还不够! 我们还必须深入了解JVM的基础原理。 这种理解光看花痴蓝天上的《深入理解Java虚拟机》是不够的。 读Hotspot源代码级别的书,不真正理解就足够了。 这里建议深入挖掘Hotspot,解密Java虚拟机的基础原理和实现。 如果需要的话请私信。

此外,还必须掌握HSDB工具的使用情况,并善于使用它在JVM内部查找所需的数据。 例如,关于静态属性是位于堆区域还是方法区域的问题,可以通过在HSDB中查看Java类映射的Klass对象并查看其属性来获得答案。 不知道这个道具怎么用? 前面说的JVM的基础原理中有演示。 如果需要的话请私信。

介绍讨论Hotspot源代码的步骤。 我们先来看看JVM的全部启动过程。 这个时候,经常会遇到不知道做什么有什么用的班级,不知道为什么会存在的过程……不要在意,整理一下主线就可以了。 第二步是看看JVM如何执行main方法。 此过程包括类加载过程和JVM执行方法过程,可能同样无法理解。 别泄气,整理主线知道大概就行了。 然后,是非常求解的阶段。 基于对JVM基础原理的理解,类加载过程、内存初始化、如何构建垃圾收集器和内存的桥梁、模板引擎执行流生成、封装继承多态性的实现原理…这个过程可能会很长

阅读源代码需要一步调试环境,因为需要查看调用链接、变量赋值、面向指针以及运行时代码区域。 以前,我们共享了一种单步调试openjdk环境的方法链接到文末)。 相关的软件建议与我的环境一致。 否则,踩坑可能需要时间。 如果需要相关软件的话请私信。

我们还找到了黑科技的朴素方法。 我又是c的大人物。 你怎么验证我的想法和推测? 换代码! 更改后,为Java提供调用API。 JNI可以吗? 不行! JNI能做的都被热点限制死了。 你想做的事情中只有修改Hotspot源代码这一种方法。 让我给你看看最简单的把戏。 扩大反射的API吧。

一、增加朴素方法

二、实现朴素方法

三.通知编译器我增加了方法

四.编译

五.运行

OK,东风已经就位,可以踏上探索Hotspot源代码的旅程。

推荐1、超高速位置OOM综合规划

2、Java线程VS操作系统线程

3、JMM到底怎么理解? JMM和MESI到底有关系吗?

4、今天谈一谈有点不同的百万年薪所需的能力

结语我是一位野性的歌曲老师,喜欢研究基础,深入研究Windows、Linux内核和JVM。 运营编号:硬核野性的乐曲硬核内容等你学习。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注