jdk开发java程序的三个步骤(写了那么多年Java代码)
jdk开发java程序的三个步骤(写了那么多年Java代码)
2024-07-07 04:41:00  作者:蛋炒西红柿  网址:https://m.xinb2b.cn/tech/sko427470.html

jdk开发java程序的三个步骤(写了那么多年Java代码)(1)

继上篇文章 全网最新最简单的 OpenJDK13 代码编译 之后,我们有了自己编译后的 jdk 和 hotspot,如下图所示。接下来就来干一番事情。

jdk开发java程序的三个步骤(写了那么多年Java代码)(2)

搭建调试环境

1.下载 CLion 软件

Jetbrains 是一家非常牛逼的公司,咱 java 里面用到的 IDEA 功能很强大,这公司也为 C/C 提供一个 IDE,名叫 https://www.jetbrains.com/clion/,咱需要下载这个 IDE 来调试 JVM 源码。

2.导入源码

安装完 CLion 之后,咱就可以先导入代码,下面简单记录一下操作步骤。

选择 New CMake Project from Sources

jdk开发java程序的三个步骤(写了那么多年Java代码)(3)

打开我们下载 OpenJDK13 的目录,我的目录是 /opt/java/openjdk/jdk13。

jdk开发java程序的三个步骤(写了那么多年Java代码)(4)

接下来有弹框点击 Next 就行了,等待导入源码完成(需要几分钟,可以喝杯茶)。

3.启动配置

导完源码后,我们需要配置启动程序,这里有些配置需要重新指定,主要有下面 2 点。

Executable 修改为咱们编译后的 java 程序。

jdk开发java程序的三个步骤(写了那么多年Java代码)(5)

Build 需要删除掉。

jdk开发java程序的三个步骤(写了那么多年Java代码)(6)

4.打下断点

我们在 thread.cpp 代码的 Threads::create_vm 方法打下断点。

jdk开发java程序的三个步骤(写了那么多年Java代码)(7)

5.开始 Debug

点击 Debug 按钮,开始调试我们的 JVM 代码。可以看到我们打的断点生效了,如下图所示。

jdk开发java程序的三个步骤(写了那么多年Java代码)(8)

恭喜,我们成功调试 JVM 代码。不过发现了下面这个异常信息,解决它。

6.发现这个异常

按 F9 让程序继续跑,我们发现 Console 出现了下面红框的一行字。

jdk开发java程序的三个步骤(写了那么多年Java代码)(9)

这是 GDB 的异常信息,我们可以通过在我们的用户目录下添加配置来解决这个问题。创建 ~/.gdbinit 文件,添加如下配置。

handle SIGSEGV nostop noprint passhandle SIGBUS nostop noprint passhandle SIGFPE nostop noprint passhandle SIGPIPE nostop noprint passhandle SIGILL nostop noprint pass

再运行就不会有这个异常信息了。

调试自己的代码

上面已经调通了我们编译的 JVM 源码,有同学可能想知道,那要调试自己写的代码得怎么操作呢?我们上面已经看到 Debug 到 JVM 源码了,我们自己的代码则可以通过我们编译后的 JDK 来编译,然后在程序执行参数那里指定。下面举个例子。

1.编写 Test 代码

我们编写一个简单的 Hello JVM 程序,代码如下。

public class Test { public static void main(String[] args) { System.out.println("hello jvm"); }}

2.javac 编译

通过我们编译后的 JDK 命令 javac Test.java 来编译。

liebrother@liebrother:/opt/java/openjdk/jdk13/build/linux-x86_64-server-release/jdk/bin$ ./javac Test.java

3.配置启动参数

然后在 Clion 程序启动配置那里指定我们的类 Test。

jdk开发java程序的三个步骤(写了那么多年Java代码)(10)

结果就是我们的程序被运行了。

jdk开发java程序的三个步骤(写了那么多年Java代码)(11)

以上就是我们今天要讲的在 JVM 层面上调试我们自己写的程序。

总结

总结一下搭建这套 JVM 环境。搭建过程中其实没有很波折,官方文档写的很清晰(虽然都是英文的),这 2 篇文章也是尽最大的努力,把一些步骤简化,也截图保留下来,一方面给自己回顾的机会,一方面也是给有想要搭建这套环境的朋友们一个捷径。这套环境接下来的定义是:给自己深入了解 JVM 的机会,在遇到某些知识点不清晰,不明白原理的时候,就可以看一看源码,揪出源头的逻辑

非常建议朋友们搭建这么一套环境,也不要怕 JVM 里面都是 C/C 代码,可能刚开始看的时候会很费劲,看多了就习惯了。

行为型模式:责任链模式

行为型模式:迭代器模式

创建型模式:单例模式

觉得文章有用帮忙转发&点赞,多谢朋友们!

  • 斛珠夫人结局是帝旭战死缇兰殉情(斛珠夫人昶王缇兰)
  • 2024-07-07斛珠夫人昶王缇兰杨幂和陈伟霆主演的《斛珠夫人》正在热播中目前剧情已渐入高潮,各方角色俱已登场,大家可还记得一同从注撵回到大徵的三个人方卓英擢升射声校尉,奉旨往泉明港接回留质注撵多年的皇子褚季昶以及注撵送来和亲的公主缇。
  • 简阳南门火灾过火十四间门市(成都简阳一店铺起火)
  • 2024-07-07成都简阳一店铺起火极目新闻记者周浩1月18日上午,四川成都简阳一店铺发生火灾目前,明火已被扑灭,暂无人员伤亡附近商户告诉极目新闻记者,起火的是一家油漆店,火势变大后向附近店铺蔓延极目新闻记者获悉,起火的店铺位于成都简阳。
  • 碳化硅行业深度(碳化硅进入新领域)
  • 2024-07-07碳化硅进入新领域1月5-8日,2022CES展如期举办在这次展会,电动摩托车大放异彩,博世、法雷奥和小牛等一大批企业推出了最新的电动摩托车和电动自行车此外,哈雷、宝马和雅马哈等老牌企业也在切换赛道,近期在发力电动摩托。
  • 诺贝尔物理学奖得主(诺贝尔奖提及生活大爆炸)
  • 2024-07-07诺贝尔奖提及生活大爆炸新京报讯当地时间10月8日,2019年诺贝尔物理学奖揭晓,获奖者是美国的詹姆斯·皮布尔斯(宇宙学相关),瑞士的米歇尔·麦耶、迪迪埃·奎洛兹(首次发现太阳系外行星)开场时,瑞典皇家科学院成员、物理学家U。
  • 全新陆巡3.5t最新消息上市时间(国产全新陆巡实车)
  • 2024-07-07国产全新陆巡实车近日,一组国产全新兰德酷路泽实车图在网上曝光,新车有望于10月底正式发布参考2016款车型价格,国产全新兰德酷陆泽预计售价会在80万元左右,该车将在一汽丰田四川工厂投产另外,该车型未来还将出口海外新一。
  • 玫瑰蔷薇月季哪个好养(蔷薇玫瑰月季总是分不清)
  • 2024-07-07蔷薇玫瑰月季总是分不清蔷薇、玫瑰和月季都是蔷薇属植物,在外观上有很大的相似之处,你们是不是和小编一样,经常分不清它们谁是谁呢?今天小编特意整理了这篇文章,包你看过以后,不会再把蔷薇当成玫瑰,把玫瑰当成月季了叶片的差别(图)。
  • 桃树春季嫁接好还是秋季嫁接好(桃树几月份嫁接最好)
  • 2024-07-07桃树几月份嫁接最好随着水蜜桃、黄桃、油桃等桃子在市场上的大受欢迎,不少农村开始投入桃树种植项目桃树种植通常有播种、嫁接、扦插和压条这四种方法来进行繁殖,但其中最为常见的就是嫁接了那么,桃树怎么嫁接好呢?下面就和大家一起。
  • 面膜要敷多久(敷面膜的时间多久才好)
  • 2024-07-07敷面膜的时间多久才好一般来说,面膜敷十分钟左右就可以让角质层湿润,建议每次不超过20分钟其次,面膜并不需要天天敷,推荐每周1-2次就足够如果用得太多反而会让皮肤过度水合,产生角质层的损伤、皮肤变薄、屏障功能受损等问题平时。
  • 一个人睡觉磨牙代表什么(睡中磨牙为哪般)
  • 2024-07-07睡中磨牙为哪般睡中磨牙,中医称为啮齿,指睡中上下牙齿相互磨擦、格格做响很多家长反映孩子经常有这种情况这到底是什么原因,怎么处理呢?睡觉磨牙大概分为功能性和器质性以及一过性,其中因牙齿畸形或咬合引起的器质性磨牙以及过。
  • 完整的地图是从什么时候有的(神秘的地图出自谁手)
  • 2024-07-07神秘的地图出自谁手地图,是人类对自然地形的一种描述,它能给我们指明前进的方向,是人类不可缺的旅行伴侣当今的地图大多都是用高科技手段绘制而成,然而,人们竟然发现了在没有卫星勘测技术条件下绘制出的精确地图!它们甚至可以与当。
  • 君子兰养殖方法
  • 2024-07-07君子兰养殖方法步骤/方式1土壤君子兰需要专门的土壤,君子兰的根是肉质根,土壤要求疏松肥沃且排水性良好除了专用的土壤,其他的土壤如果能达到疏松透水效果好也可以使用步骤/方式2温度君子兰怕低温,一般在零上5度左右,君子。