0x00 了解Java
最早大概可追溯至1991年四月份,Sun的绿色计划(Green Project)开始着手于发展消费性电子产品(Consumer Electronics),所使用的语言是C、C++、及Oak (为Java语言的前身),到1994由于网络的兴起年计划改变。当时主要想寻找的嵌入式产品通用的语言。
Java 原来就叫Oak,但是由于商标问题,工程师由咖啡得到灵感,1995年更名为java,并在同年发布了1.0版本。下面是jdk版本,代号和发布时间
- JDK 1.1.4 Sparkler 宝石 1997-09-12
- JDK 1.1.5 Pumpkin 南瓜 1997-12-13
- JDK 1.1.6 Abigail 阿比盖尔--女子名 1998-04-24
- JDK 1.1.7 Brutus 布鲁图--古罗马政治家和将军 1998-09-28
- JDK 1.1.8 Chelsea 切尔西--城市名 1999-04-08
- J2SE 1.2 Playground 运动场 1998-12-04
- J2SE 1.2.1 none 无 1999-03-30
- J2SE 1.2.2 Cricket 蟋蟀 1999-07-08
- J2SE 1.3 Kestrel 美洲红隼 2000-05-08
- J2SE 1.3.1 Ladybird 瓢虫 2001-05-17
- J2SE 1.4.0 Merlin 灰背隼 2002-02-13
- J2SE 1.4.1 grasshopper 蚱蜢 2002-09-16
- J2SE 1.4.2 Mantis 螳螂 2003-06-26
- J2SE 5.0 (1.5.0) Tiger 老虎 2004-10
- J2SE 6.0 (Beta) Mustang 野马 2006-04
- J2SE 7.0 Dolphin 海豚 2011-07
- J2SE 8.0 2014-03
- J2SE 9.0 2017
2009.4.20 Oracle74亿美元收购Sun ,java开始由Oracle 主导开发。
截至到2017年4月,最新的是 jdk 8,今年下半年将会推出java9 版本分为java SE,java EE,java ME。
0x01 Java优点
- 体系结构中立
- 安全性优越
- 多线程
- 分布式
- 丰富的第三方开源组件。
java可以实现“一次编译,处处运行”(Write Once,Run Anywhere),功不可没的是字节码,java编译生成的是字节码,具有平台通用性。运行需要Java虚拟机JVM。
0x02 对象模型和语法结构
面向对象语言,吸收了c/c++的优点,没有指针,引入垃圾回收等。
体系结构:java,字节码,java API和JVM
字节码:跨平台的基石,与机器不相关,java编译后产生的文件是字节码,以.class后缀。其实也是语言无关,其他语言也可以编译成字节码。
JVM:负责运行java程序,主要是解析(或编译)字节码。现在主要是基于栈的JVM,如HotSpot,IBM J9等;android的Dalvik也是一个,基于寄存器的jvm,不过有的地方不符合jvm规范设置。JVM 内部:
0x03 OpenJDK
OpenJDK是sun/Oracle的一种开源版本,属于开源社区,GPL V2 协议,允许商业用途。
TaobaoVM 是淘宝基于OpenJDK的定制虚拟机,主要是根据业务调整,采用intel cup优化GC性能;使用crc32指令实现降低JNI的调用开销。还有创新的GCIH(GC invisible heap)实现off-heap,使生命周期长的对象移到堆外,GC不能管理到,降低GC回收频率和i、提升GC回收效率,并且GCIN对象可以JVM进程共享。
0x04 自行编译OpenJDK
OPENJDK官网下载,然后配置环境编译,具体看书本。可单独编译jdk和hotspot,还有讲了一些基本的调试。