为什么需要编译自己的jvm源码?

想象下, 你想看看java线程是如何start的?

去源码里一找 native void start0(), 此时如果你对jvm源码比较熟悉, 那么可以下载openJDK源码借助vscode去查询底层实现, 但如果你不知道呢?

又比如 java高并发编程艺术 一书中说final在构造函数return之前会添加一个StoreStore内存屏障,在初次读取前会添加一个LoadLoad内存屏障, 那么您怎么做? (方法也有, 根据反汇编查找到有个关键字JVM_ACC_FINAL在vscode上查找这个关键字会知道一个叫is_final的方法,借助这个方法可以找到)

ubuntu安装openJDK

  • 安装方式其实很简单, 输入

    sudo apt search openjdk

    会看到好多openjdk版本, 找到并复制 openjdk-11-jdk
openjdk-11-jdk/focal,now 11.0.7+10-3ubuntu1 amd64 [已安装] OpenJDK Development Kit (JDK)
  • 输入sudo apt install openjdk-11-jdk至此java环境安装完毕
  • 输入java -version验证下自己的java版本吧
  • (这句代码可以先不执行)执行命令 sudo apt-get install build-essential 准备下等下需要用到的工具

这里其实有个坑, 我们的ubuntu20默认安装gcc版本过高了, 参考编译文档发现需要低于gcc7.4版本一下

下载openJDK源码编译

下载openJDK

  1. 访问网址 openJDK所有版本都有

    下载自己想要的openJDK源码



完毕之后通过ftp上传到我们的ubuntu

编译openJDK

  1. 使用 unzip -q openjdk-11+28_src.zip 解压出源码
  2. cd openjdk
  3. 执行 bash configure --enable-debug --with-jvm-variants=server (这里我们使用的是默认64bit和fastdebug方式编译jvm)

    更多参数可以参考我从 java高并发编程艺术 复制的图片

执行上面那段shell指令后会发现错误, 不要怕看其中这句话:

You might be able to fix this by running 'sudo apt-get install autoconf'.

(1) 把sudo apt-get install autoconf -y复制出来在shell上执行下

等待安装完毕, 继续使用

sudo bash configure --enable-debug --with-jvm-variants=server不断的测试

中途可能还会错误几次, 没关系继续copy

比如我又遇到了这个错误



看到红框框了指令了么?? 继续复制粘贴 entry

(2) sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev

__ 你们看到的错误可能不一样不要复制我的(都到自己编译jvm的程度了,这点基本功你要会,我就不详述了) __

(3) sudo apt-get install libcups2-dev 有遇到了,执行下, 回去继续做检测指令

(4) sudo apt-get install libfontconfig1-dev

(5) sudo apt-get install libasound2-dev

接着我发现全程正常编译完毕...

那么我们可以正式开始编译jvm了

make images -j 4 开始正式编译, 最终会在终端中看到



或者



都代表编译成功

这里笔者一边看电视剧一边编译的, 没注意到已经编译完成, 认为编译失败, 又make images 编译了一回, 不过没关系, 第二次编译没有clean掉已经编译好的jdk, 所以速度很快

对了编译期间会遇到, 无视就好

注: 某些输入文件使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。

至此我们编译完成...

在ubuntu16下编译openJDK11的更多相关文章

  1. Ubuntu16下编译linux内核,报"mkimage" command not found错的解决

    "mkimage" command not found - U-Boot images will not be built /work/system/linux-3.4.20/ar ...

  2. Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python)

    Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python) 前提是已经安装了python2,python3 1)安装各种依赖库 sudo apt-get update ...

  3. ubuntu16.04下编译安装vim8.1

    之前写过一篇centos7下编译安装vim8.0的教程,ubuntu16.04相比centos7下安装过程不同在于依赖包名字的不同,其余都是一样.下面给出ubuntu16.04编译安装vim8.0需要 ...

  4. Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件)

    Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件) https://blog.csdn.net/woainishifu/article/details/79712110 我们在做项 ...

  5. ubuntu下编译caffe

    Ubuntu下编译caffe 纯粹是个人编译的记录.不用CUDA(笔记本是amd卡,万恶的nvidia):不手动编译依赖包(apt-get是用来干啥的?用来直接装二进制包,以及自动解决依赖项的) ca ...

  6. Ubuntu16.04编译安装php

    #Ubuntu16.04编译安装php Ubuntu16.04上面搭建基于Nginx的php服务.Nginx使用apt直接安装的. sudo apt install nginx php的安装部署步骤主 ...

  7. 在Ubuntu下编译Qt错误及处理办法

    平台:Ubuntu16.04  64bit 虚拟机:VirtualBOX 编译软件:Qt 32bit (在64位环境下编译32bit的程序会出现很多错误,从编译器的安装以及整个库的编译) 问题一:er ...

  8. ubuntu16下用QT5实现对话框应用

    ubuntu16下用QT5,实现对话框程序,步骤:生成界面Dialog.ui,将它应用到主程序,通过主程序显示. 一 界面练习 1 Dialog.ui界面生成 在命令行输入:designer 进入界面 ...

  9. 01.ubuntu16.06编译安装Hi3518EV200 SDK

    转载,侵删 HI3518EV200 SDK安装并编译osdr. 1.开发环境 windows10电脑 + 虚拟机14 Pro + Ubuntu16.0.4 2.拷贝并解压.将 Hi3518E_SDK_ ...

随机推荐

  1. python基础之python牛逼的设计模式

    七大设计原则: 1.单一职责原则[SINGLE RESPONSIBILITY PRINCIPLE]:一个类负责一项职责. 2.里氏替换原则[LISKOV SUBSTITUTION PRINCIPLE] ...

  2. 那些天,shell脚本中曾经踩过的坑

    前些天,需要实现一个需求,用脚本轮流kill服务器上的进程,观察内存变化情况,并写日志.脚本逻辑不难,但shell脚本好久不用,看过书里的语法都忘得差不多了,中间踩了不少的坑,特此记录一下,留作后续参 ...

  3. C语言进阶日志二

    1.一个功能模块最好使用一个文件夹包含 2.基本就需要几个文件,比如定时器取反  LED: bsp_led.c 和 bsp_led.h : 包含你需要的led外设GPIO的初始化代码 led_it.c ...

  4. xshell 终端 中文乱码

    我们在终端输入命令,中文显示乱码了. 解决方案:将xshell 传输采用的默认encode改为utf-8 解决:

  5. 『动善时』JMeter基础 — 25、JMeter参数化补充练习

    目录 1.使用"CSV数据文件设置"组件实现参数化 (1)测试计划中的元件 (2)数据文件内容 (3)线程组元件内容 (4)HTTP信息头管理器组件内容 (5)CSV数据文件设置组 ...

  6. USB中TOKEN的CRC5与CRC16校验(神奇的工具生成Verilog实现)

    USB2.0IP设计 最近,在学习USB2.0IP的设计,其中包含了CRC校验码的内容,之前学习千兆以太网曾经用到过CRC32校验(https://www.cnblogs.com/Xwangzi66/ ...

  7. mysql数据库-备份方式简介与规范

    目录 1 应对场景: 2. 备份方式分类 2.1 按备份数据类型划分 2.2 按侵入程度划分 2.3 按备份方式划分 3 备份注意要点 4 还原要点 4.1 定期还原测试,验证备份可用性 4.2 还原 ...

  8. Python+Selenium自动化-设置浏览器大小、刷新页面、前进和后退

    Python+Selenium自动化-设置浏览器大小.刷新页面.前进和后退   1.设置浏览器大小 maximize_window():设置浏览器大小为全屏 set_window_size(500,5 ...

  9. GO语言常用标准库01---strings包

    package main import ( "fmt" "strings" ) func main031() { fmt.Printf("字符形式:% ...

  10. CVPR2020论文解析:实例分割算法

    CVPR2020论文解析:实例分割算法 BlendMask: Top-Down Meets Bottom-Up for Instance Segmentation 论文链接:https://arxiv ...