HotSpot 源代码编译
编译环境
- Windows10,VMware15,Ubuntu18.04, 虚拟环境。
- PC机,内存32G,CPU 16 核心,I7八代。
- Ubuntu18.04 虚拟机。
环境准备
- 安装Boot JDK,下载Linux版Oracle JDK8,解压安装到/usr/lib下, 执行
gedit ~/.bashrc
文件末尾追加如下
export JAVA_HOME=/usr/lib/jdk/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
使配置生效
source ~/.bashrc
- 下载 OpenJDK9
由于官方下载缓慢,直接从gitee上下载OpenJDK9分支,拷贝下载的openjdk到新建的jdk目录下解压,进入解压后的openjdk目录
编译JVM
1.执行如下命令根据提示下载缺失的库
bash ./configure
bash configure --with-debug-level=slowdebug
bash configure --disable-warnings-as-errors --with-debug-level=slowdebug --with-native-debug-symbols=internal
2.开始编译
make
出现错误
Error: No CONF given, but more than one configuration found.
Available configurations in /home/wly/dev/jdk/build:
* linux-x86_64-normal-server-slowdebug
* linux-x86_64-normal-server-release
Please retry building with CONF=<config pattern> (or SPEC=<spec file>).
选择一个配置后再次编译
make CONF=linux-x86_64-normal-server-slowdebug
编译成功,十几分钟就好了
Stopping sjavac server
Finished building target 'default (exploded-image)' in configuration 'linux-x86_64-normal-server-slowdebug'
验证JVM
1.创建javac和java命令链接
ln -s /home/charlie/jdk/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/javac javac9
ln -s /home/charlie/jdk/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java java9
- 创建Hello.java程序
public class Hello{public static void main(String[] args){System.out.println("hello world !");}
}
3.执行 javac 命令生成字节码
javac Hello.java
4.执行 java 命令 执行程序
java Hello
结果如下:
调试HotSpot
- 现在Linux版本Clion IDEA
- 打开IDEA, 选择 New CMake Project from Sources,选择已编译好的hotspot目录,打开
3. 配置调试环境(1. Edit Configuration 2.选择java 3.BeforeLaunch 去掉Build )
4. 断点调试
打开allocation.cpp 设置如图断点,点击绿色的bug虫。
总结
JVM是Java的核心,JVM屏蔽了底层硬件细节,为Java跨平台提供了可能。JVM是一个庞大的项目,里面包含了复杂的实现细节,JVM构建了代码执行引擎,以屏蔽各硬件平台差异。JVM包含了许多优秀的设计思想和实现,包括垃圾回收,JIT, AOT, OopKlass对象模型,执行引擎,字节码机制,类加载机制栈式指令集,字节码解释器,模版解释器等等,得益于其优秀的设计和不断地与时俱进,Java平台一直受到开发者的青睐。今天是JVM系列的开篇,JVM的优秀让人兴奋。
HotSpot 源代码编译相关推荐
- java 源码分析_Java 源代码编译成 Class 文件的过程分析
原标题:Java 源代码编译成 Class 文件的过程分析 在上篇文章< Java三种编译方式:前端编译 JIT编译 AOT编译 >中了解到了它们各有什么优点和缺点,以及前端编译+JIT编 ...
- JVM成神之路-HotSpot虚拟机-编译原理、JIT、编译优化
Java编译原理 什么是字节码.机器码.本地代码? 字节码是指平常所了解的 .class 文件,Java 代码通过 javac 命令编译成字节码 机器码和本地代码都是指机器可以直接识别运行的代码,也就 ...
- 浅析Hotspot JIT编译
1. 什么是编译? 像java,C语言这些高级程序语言,计算机并不能直接执行.计算机认识的是汇编或者机器语言,是可以直接由计算机直接执行的.所以从高级语言转化为计算机认识的低级语言的过程叫做编译. ...
- 【CLR的执行模型:将源代码编译成托管模块】
CLR:由多种不同编程语言使用的运行库 托管模块:中间语言和元数据 非托管语言:C/C++,不过此为特殊,可以写成托管代码 托管语言:C# 托管模块 1,PE32/PE32+头:PE32运行在win3 ...
- 从源代码编译里程碑的 ICS ROM
从源代码编译里程碑的 ICS ROM 操作系统选择 Ubuntu 10.04, 可以用虚拟机: 安装 Android SDK , 并更新: 打开命令行窗口, 输入下面的命令, 准备编译环境: sud ...
- Linux源代码编译安装详解
使用源代码编译安装软件有以下优点,获取软件的最新版及时修复bug,软件功能可按需选择或定制,有更多软件可供选择,源码包适用于各种平台. 工具/原料 一台装有Linux操作系统的电脑 接入互联网络并能正 ...
- linux ubuntu pkg-config工具的使用(源代码编译库接口查询工具)
后更... 文章目录 1. pkg-config介绍 2. pkg-config的使用 1. pkg-config介绍 pkg-config是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件 ...
- python3源代码_Python3源代码编译安装
Python3源代码编译安装 安装必要工具 yum-utils ,它的功能是管理repository及扩展包的工具 (主要是针对repository) $ sudo yum install yum-u ...
- 【AWSL】之Linux源代码编译及配置yum源(tar 解包、./configure配置软件模块、make)
源代码编译 序言 一.源代码概述 1.使用源代码安装软件的优点 2.应用场合举例 3.安装源代码软件为什么使用编译安装 二.编译安装的基本思路 三.配置本地yum源仓库 四.`yum常用命令` 五.` ...
最新文章
- 每一个C#开发者必须知道的13件事情
- Mathematica 8 的激活方法 (转载)
- scanner怎样回到文件开头_Radare2逆向分析dex/so/二进制等文件的使用方法
- 今天改bug遇到一个ie8样式错乱问题
- Linux正则表达式判断是否是数字示例
- C语言嵌入式系统编程修炼之道——屏幕操作篇
- linux – 我怎么知道我到somaxconn有多近?
- ▲为什么要用css Sprite技术?
- JavaScript 中的代码小技巧
- php Hash Table(四) Hash Table添加和更新元素
- 10.java 关键字与保留字
- Midi 乐器set
- 海天味业打造高端调味品领衔食品美味
- Team viewer 未就绪,请检查您的连接
- centos下smartctl安装配置(硬盘S.M.A.R.T信息及坏块检测命令)
- 2022年8月止,国外最佳游戏榜出炉
- 学校教务管理系统(第二弹
- Springboot毕设项目高校教材征订系统设计与实现ig8t1(java+VUE+Mybatis+Maven+Mysql)
- SCOI2012 喵星球上的点名 BZOJ 2754
- 无法下载钉钉群内回放视频?
热门文章
- 化学家V1.1.0正式版
- android接听ios电话,教程】教你用电脑连接 iPhone 、 Android ,在电脑上接打电话、收发短信。...
- C语言十六进制转十进制
- Unity3D简单的水面shader实现
- CPU一级缓存L1 D-cache\L1 I-cache与二级缓存L2 cache深度分析
- Maya角色跑步动画制作 │ 角色跑步动画案例(附资料)
- (不眠者①队)国电-F题:智能送药小车,广东赛区一等奖,推国赛,开源(代码+设计方案)
- sin和asin--正弦和反正弦函数
- 利用zabbix自带模板监控网络设备及配置邮件告警
- JavaScript复制内容到剪切板