赞
踩
第一章: 走近Java
第二章: Java内存区域与内存溢出异常
它不仅仅是一门编程语言,还是由一个由一系列计算机软件和规范组成的技术体系,这个体系提供了完整的用于软件开发和平台部署的支持环境,并广泛用于嵌入式系统、移动终端、企业服务、大型机等多种场合(大部分人接触最多的应该是企业服务)
从广义讲,Kotlin、Clojure、JRuby、Groovy等运行于Java虚拟机上的编程语言及相关程序都属于其中的一员;
从传统意义上分为以下几个部分
如图所示
JVM指Java虚拟机
JRE指用于支持Java程序运行的标准环境,可以把Java类库API中的JavaSE API子集和Java虚拟机这两部分统称为JRE
JDK指用于支持Java程序开发的最小环境,可以把Java程序设计语言、Java虚拟机、Java类库这三部分统称为JDK
1991.04 James Gosling领导设计Oak 1995.05.23 Oak改名Java,Sun World大会正式发布Java1.0Alpha/Beta版本 1997.02.19 Jdk1.1发布,技术代表(JAR文件格式、JDBC、JavaBean、RMI)、语言支持(内部类、反射) 1998.12.04 Jdk1.2发布,Sun公司将Java技术体系拆为三个方向:J2SE面向桌面开发、J2EE面向企业开发、J2ME面向手机等移动端开发,技术代表(EJB、JavaPlug-in、JavaIDL、Swing),第一次内置JIT即时编译器,语言API支持(strictfp关键字、一系列Collection集合类) 2000.05.08 Jdk1.3发布,主要改进体现在Java类库上 2002.02.13 Jdk1.4发布,真正走向成熟的一个版本。技术新特性(正则表达式、异常链、NIO、日志类、XML解析器、XSLT转换器等) 2004.09.30 Jdk5发布,语法特性(自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环等),虚拟机和API层面(改进内存模型、提供concurrent并发包等) 2006.12.11 Jdk6发布,提供初步的动态预言支持、提供编译器注解处理器和微型HTTP服务器API等,虚拟机改进层面(锁与同步、垃圾收集器、类加载器等) 故事...... 2011.07.28 Jdk7发布,提供G1收集器、加强对非Java语言的调用支持、可并行的类加载架构等 2014.03.18 Jdk8发布,功能特性(对Lamba表达式的支持、内置Nashorn JavaScript引擎的支持、新的时间/日期API、彻底移除HotSpot的永久代等) 2017.09.21 Jdk9发布,Jigsaw模块化功能支持、增强若干工具(JS Shell、JLink、JHSDB等)、整顿Hotspot日志系统、支持HTTP2客户端API等 2018.03.20 Jdk10发布,主要研发目标为内部重构 2018.09.25 Jdk11发布,ZGC垃圾收集、类型推断加入Lambda语法等,调整JDK授权许可证,同时发行Oracle OpenJDK(免费商用)和OracleJDK(付费商用) 2019.03.19 Jdk12发布,主要有Switch表达式、Java微测试套件等,加入首个非Oracle开发的垃圾收集器-Shenandoah 2019.09.17 Jdk13发布 2020.03.17 Jdk14发布 2020.09 Jdk15发布 2021.03 Jdk16发布 2021.09 Jdk17发布(待定)
https://zh.wikipedia.org/wiki/Java版本历史
Classic是世界上第一款商用虚拟机,随Jdk1.0发布,使用纯解释器方式执行Java代码或使用外挂即时编译
Exact VM是Jdk1.2时发布在Solaris平台的一款虚拟机,使用准确式内存管理(虚拟机可以知道内存中某个位置的数据具体是什么类型)
准确式内存管理、热点代码探测技术(通过执行计数器找到最有编译价值的代码通知即时编译器编译)
移动/嵌入式市场产品
JRockit VM是BEA在2002年收购所得,专注于服务端应用,不含解释器实现,全部代码依赖即时编译器编译后执行(BEA被Oracle收购,不再继续发展)
IBM J9 VM定位广泛,设计上全面考虑服务端、桌面应用、嵌入式等(活跃)
BEA Liquid是BEA开发直接运行在自家Hypervisor系统上的JRockit虚拟机虚拟化版本,由虚拟机越过通用操作系统直接控制硬件(项目停止)
Azul VM是Azul Systems公司基于Hotspot改进,运行于自家专有硬件Vega系统上的虚拟机(项目放弃)
Apache Harmony是Apache旗下兼容于JDK5和JDK6的Java程序运行平台,包含自己的虚拟机和Java类库API(失败)
Dalvik曾经是Andriod平台核心组成部分之一,不能直接执行Java的Class文件,使用寄存器架构而不是Java虚拟机常见的栈架构(被ART替代)
微软为在Internet Explorer3浏览器支持Java Applets应用而开发自己的虚拟机,是当时Window系统下性能最好的Java虚拟机(Sun起诉微软,产品夭折)
## 系统环境
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
## bootstrap JDK版本
$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
wget http://download.java.net/openjdk/jdk8u40/ri/openjdk-8u40-src-b25-10_feb_2015.zip
列举一些需要的依赖
安装依赖环境,推荐使用yum安装
yum -y install libX11-devel freetype-devel
yum -y groupinstall 'Development Tools'
yum -y install alsa*
yum -y install cups-devel ccache
yum -y install libXtst-devel libXt-devel libXrender-devel
配置编译环境
下载bootstrap jdk(JDK8)
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz
解压
tar -zxvf jdk-8u131-linux-x64.tar.gz
编辑/etc/profile,配置环境变量
export JAVA_HOME=/usr/local/src/jdk/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
刷新配置文件
source /etc/profile
校验
$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
解压下载的OpenJDK8源码压缩包
unzip -o -d /home/faker/ openjdk-8u40-src-b25-10_feb_2015.zip
cd到源码目录执行 .configure命令(这里笔者加了参数开启debug模式)
[root@localhostopenjdk]#./configure --with-debug-level=fastdebug # 根据检测的信息,如果出现错误,按提示安装需要的依赖即可 #一切正常,会打印出如下信息,列举了当前的配置信息 A new configuration has been successfully created in /software/java/my-openjdk/openjdk/build/linux-x86_64-normal-server-fastdebug using configure arguments '--with-debug-level=fastdebug'. Configuration summary: * Debug level: fastdebug * JDK variant: normal * JVM variants: server * OpenJDK target: OS: linux, CPU architecture: x86, address length: 64 Tools summary: * Boot JDK: java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) (at /software/java/1.8.0_181) * C Compiler: gcc (GCC) 4.4.7 20120313 (Red Hat-18) version 4.4.7-18) (at /usr/bin/gcc) * C++ Compiler: g++ (GCC) 4.4.7 20120313 (Red Hat-18) version 4.4.7-18) (at /usr/bin/g++) Build performance summary: * Cores to use: 2 * Memory limit: 15951 MB * ccache status: installed and in use
执行编译
[root@localhost openjdk]#make
笔者机器大约等待了30分钟,编译成功且在build目录生成linux-x86_64-normal-server-fastdebug目录
## Finished jdk (build time 00:06:14) ----- Build times ------- Start 2021-04-18 19:56:41 End 2021-04-18 20:26:46 00:00:58 corba 00:20:36 hotspot 00:00:26 jaxp 00:00:38 jaxws 00:06:14 jdk 00:01:13 langtools 00:30:05 TOTAL ------------------------- Finished building OpenJDK for target 'default' [root@localhost build]# ll 总用量 4 drwxr-xr-x. 9 root root 4096 4月 18 20:20 linux-x86_64-normal-server-fastdebug
简单测试下
[root@localhost build]# cd linux-x86_64-normal-server-fastdebug/jdk/bin/
[root@localhost bin]# ./java -version
openjdk version "1.8.0-internal-fastdebug"
OpenJDK Runtime Environment (build 1.8.0-internal-fastdebug-root_2021_04_18_19_55-b00)
OpenJDK 64-Bit Server VM (build 25.40-b25-fastdebug, mixed mode)
关于configure的一些参数说明:
--enable-debug 开启dubug模式 --with-debug-level=level debug模式的等级 --with-alsa=path 添加依赖,指定alsa的位置(yum安装的alsa不需要用这个指定) --with-boot-jdk=path boot-jdk的位置(我们已配置到环境变量也无需指定) --with-boot-jdk-jvmargs=“args” boot-jdk的jvm参数 --with-cups=path cups的位置 --with-freetype=path freetype的位置 --with-target-bits=arg 如果编译32位 可指定为32 --with-memory-size=size 指定GNU编译时 所需的RAM大小
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
更多请参考 : OpenJDK构建自述文件
结束。。。。。。。。。。。.。。。。。。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。