JVM_走近Java_ch.1

4 篇文章 0 订阅

深入理解Java虚拟机

世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。

当我们在使用一门技术时,不再依赖书本和他人就能得到这些问题的答案,那才算升华到了“不 惑”的境界。

走近Java

Java技术体系

Java程序设计语言

·各种硬件平台上的Java虚拟机实现

·Class文件格式 ·Java类库API

·来自商业机构和开源社区的第三方Java类库

我们可以把Java程序设计语言、Java虚拟机、Java类库这三部分统称为JDK(Java Development Kit),

  • ME

    终端

  • SE

    核心API

  • EE

    企业级应用

1991年4月,由James Gosling博士领导的绿色计划(Green Project)开始启动,此计划最初的目标 是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划 的产品就是Java语言的前身:Oak(得名于James Gosling办公室外的一棵橡树)。Oak当时在消费品市 场上并不算成功,但随着1995年互联网潮流的兴起,Oak迅速找到了最适合自己发展的市场定位并蜕 变成为Java语言。

JDK7->8

  • lambda表达式
  • 内置js引擎支持
  • 新的时间、日期API
  • 彻底移除HotSpot的永久代(方法区)heap+方法区JVM内存模型中对象生存的地方,转为元空间

不论如何,经过前后六轮投票,经历桌上桌下的斗争与妥协,Java没有分裂,JDK 9总算是带着 Jigsaw最终发布了,除了Jigsaw外,JDK 9还增强了若干工具(JS Shell、JLink、JHSDB等),整顿了 HotSpot各个模块各自为战的日志系统,支持HTTP 2客户单API等91个JEP。

Oracle的解决方案是顺理成章地终 结掉“每个JDK版本最少维护三年”的优良传统,从此以后,每六个JDK大版本中才会被划出一个长期 支持(Long Term Support,LTS)版,只有LTS版的JDK能够获得为期三年的支持和更新,普通版的 JDK就只有短短六个月的生命周期。JDK 8和JDK 11会是LTS版,再下一个就到2021年发布的JDK 17 了。

2018年9月25日,JDK 11发布,这是一个LTS版本的JDK,包含17个JEP,其中有ZGC这样的革命 性的垃圾收集器出现,也有把JDK 10中的类型推断加入Lambda语法这种可见的改进,但都比不过它发 布时爆出来的谣言轰动:“Java要开始收费啦!”

Oracle收购Sun是Java发展历史上一道明显的分界线。在Sun掌舵的前十几年里,Java获得巨大成 功,同时也渐渐显露出来语言演进的缓慢与社区决策的老朽;而在Oracle主导Java后,引起竞争的同时也带来新的活力,Java发展的速度要显著高于Sun时代。Java的未来是继续向前、再攀高峰,还是由盛 转衰、锋芒挫缩,你我拭目以待。

虚拟机

武林盟主:HotSpot VM

小家碧玉:Mobile/Embedded VM

天下第二:BEA JRockit/IBM J9 VM

软硬合璧:BEA Liquid VM/Azul VM

挑战者:Apache Harmony/Google Android Dalvik VM

没有成功,但并非失败:Microsoft JVM及其他

未来
  • 无语言倾向
  • 新一代即时编译器
  • 向Native前进
  • 灵活的胖子
  • 语言语法持续增强

2018年4月,Oracle Labs新公开了一项黑科技:Graal VM,如图1-4所示,从它的口号“Run Programs Faster Anywhere”就能感觉到一颗蓬勃的野心,这句话显然是与1995年Java刚诞生时的“Write Once,Run Anywhere”在遥相呼应。

对Java而言,Graal VM本来就是在HotSpot基础上诞生的,天生就可作为一套完整的符合Java SE 8 标准的Java虚拟机来使用。它和标准的HotSpot的差异主要在即时编译器上,其执行效率、编译质量目 前与标准版的HotSpot相比也是互有胜负。但现在Oracle Labs和美国大学里面的研究院所做的最新即时 编译技术的研究全部都迁移至基于Graal VM之上进行了,其发展潜力令人期待。如果Java语言或者 HotSpot虚拟机真的有被取代的一天,那从现在看来Graal VM是希望最大的一个候选项,这场革命很可能会在Java使用者没有明显感觉的情况下悄然而来,Java世界所有的软件生态都没有发生丝毫变化, 但天下第一的位置已经悄然更迭。

在这里插入图片描述

直把软件服务作为重点领域的Java自然不可能对此视而不见,在最新的几个JDK版本的功能清 单中,已经陆续推出了跨进程的、可以面向用户程序的类型信息共享(Application Class Data Sharing,AppCDS,允许把加载解析后的类型信息缓存起来,从而提升下次启动速度,原本CDS只支 持Java标准库,在JDK 10时的AppCDS开始支持用户的程序代码)、无操作的垃圾收集器(Epsilon, 只做内存分配而不做回收的收集器,对于运行完就退出的应用十分合适)等改善措施。而酝酿中的一 个更彻底的解决方案,是逐步开始对提前编译(Ahead of Time Compilation,AOT)提供支持。

笔者将语言的功能特性和语法放到最后来讲,因为它是相对最不重要的改进点,毕竟连JavaScript 这种“反人类”的语法都能获得如此巨大的成功,而比Java语法先进优雅得多的挑战者C#现在已经“江湖 日下”,成了末路英雄

自己编译JDK
  • 下载ZIP文件

    https://gitee.com/isspark/OpenJDK12

  • 解压

    unzip -o -d /root/jdk/ isspark-OpenJDK12-master.zip

  • 下载openjdk11

    yum install java-11-openjdk-devel -y

  • 配置

    bash configure

    出错:

    configure: error: Could not find all X11 headers (shape.h Xrender.h Xrander.h XTest.h Intrinsic.h). You might be able to fix this by running 'sudo yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel'.
    

    安装依赖

    sudo yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel -y

    再次执行

    configure: error: Could not find cups! You might be able to fix this by running 'sudo yum install cups-devel'.
    

    yum install cups-devel -y

    接下去还会遇到不少依赖问题,跟着提示安装

    结果:

    A new configuration has been successfully created in
    /root/jdk/OpenJDK12/build/linux-x86_64-server-release
    using default settings.
    
    Configuration summary:
    * Debug level:    release
    * HS debug level: product
    * JVM variants:   server
    * JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs zgc' 
    * OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
    * Version string: 12.0.2-internal+0-adhoc.root.OpenJDK12 (12.0.2-internal)
    
    Tools summary:
    * Boot JDK:       openjdk version "11.0.8" 2020-07-14 LTS OpenJDK Runtime Environment 18.9 (build 11.0.8+10-LTS) OpenJDK 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode, sharing)  (at /usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el7_8.x86_64)
    * Toolchain:      gcc (GNU Compiler Collection)
    * C Compiler:     Version 4.8.5 (at /usr/bin/gcc)
    * C++ Compiler:   Version 4.8.5 (at /usr/bin/g++)
    
    Build performance summary:
    * Cores to use:   1
    * Memory limit:   1819 MB
    
  • 运行make

    make image
    time make image
    

    估计得花不少时间(我只分配了2颗核心 2G内存)

    Stopping sjavac server
    Finished building target ‘images’ in configuration ‘linux-x86_64-server-release’

    real 69m10.253s
    user 49m10.483s
    sys 6m52.374s

/root/jdk/OpenJDK12/build/linux-x86_64-server-release/jdk

看到了完整编译结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值