第 1 章 走近 Java

前言

  Java 的技术体系主要是由支撑 Java 程序运行的虚拟机、为各开发领域提供接口支持的 Java API、Java 编程语言及许许多多的第三方 Java 框架(如 Spring 和 Struts 等)构成。
  关于 Java 虚拟机的资料较少只要是由于 Java 开发技术的一个重要有点导致的:在虚拟机层面隐藏了底层技术的复杂性以及机器与操作系统的差异性。运行程序的物理机器情况千差万别,而 Java 虚拟机则在千差万别的物理机上面建立了统一的运行平台,实现了在任意一台虚拟机上编译的程序能在任何一台虚拟机上正常运行。
  随着 Java 技术的不断发展,它被应用于越来越多的领域之中。其中一些领域,如电力、金融、通信等,对程序的性能、稳定性和可扩展性方面都有极高的要求。所以,了解虚拟机的运行也是必要的。
  在绝大多数情况下,提升硬件效能无法等比例的提升程序的性能和并发能力,有时甚至可能对程序的性能没有任何改善作用。这里面有 Java 虚拟机的原因:为了达到为所有硬件提供一致的虚拟机平台的目的,牺牲了一些硬件相关的性能特性。更重要的人为原因:开发人员如果不了解虚拟机的一些技术特性的运行原理,就无法写出最适合虚拟机运行和可自优化的代码。

本章主要内容

概述
Java 技术体系
Java 发展史
展望 Java 技术的未来
实战:自己编译 JDK

1.1 概述

  Java 不仅仅是一门编程语言,它还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器和大型机等各种场合。
  Java 能获得如此广泛的认可,除了因为它拥有一门结构严谨、面向对象的编程语言之外,还有许多不可忽略的优点:它摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想;它提供了一种相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题;它实现了热点代码检测和运行时编译及优化,这使得 Java 应用能随着运行时间的增加而获得更高的性能;它有一套完善的应用程序接口,还有无数的来自商业机构和开源社区的第三方类库来帮助实现各种各样的功能。。。。。。 Java 所带来的的这些好处让程序的开发效率得到了很大的提升。

1.2 Java 技术体系

  Java 技术体系包括了一下几个组成部分:

  • Java 程序设计语言
  • 各种硬件平台上的 Java 虚拟机
  • Class 文件格式
  • Java API 类库
  • 来自商业机构和开源社区的第三方 Java 类库。

图 Java技术体系所包含的内容

  把 Java 程序设计语言、Java 虚拟机、Java API 类库这三部分统称为 JDK(Java Development Kit),JDK 是用于支持 Java 程序开发的最小环境。
  把 Java API 类库中的 Java SE API 子集和 Java 虚拟机这两部分统称为 JRE (Java Runtime Environment),JRE 是支持 Java 程序运行的标准环境。
  如果按照技术所服务的领域来划分,或者说按照 Java 技术关注的重点业务领域来划分,Java 技术体系可以分为四个平台,分别是:

  • Java Card:支持一些 Java 小程序(Applets)运行在小内存设备(如智能卡)上的平台。
  • Java ME (Micro Edition):支持 Java 程序运行在移动终端(手机、PDA)上的平台,对 Java API 有所精简,并加入了针对移动终端的支持,这个版本以前称为 J2ME。
  • Java SE (Standard Edition):支持面向桌面级应用(如 Windows 下的应用程序)的 Java 平台,提供了完整的 Java 核心 API ,这个版本以前称为 J2SE。
  • Java EE (Enterprise Edition):支持使用多层架构的企业应用(如 ERP、CRM 应用)的 Java 平台,除了提供 Java SE API 之外,还对其做了大量的扩充并提供了相关的部署支持,这个版本以前称为 J2EE 。

1.3 Java 发展史

  主要讲述了 Java 从诞生到现在的发展,每个版本新增的一些东西。

1.4 展望 Java 技术的未来

1.4.1 模块化

  模块化是解决应用系统与技术平台越来越复杂、越来越庞大而产生的一系列问题的一个重要途径。无论是开发人员还是产品的最终用户,都不希望为了系统中的一小块功能而不得不下载、安装、部署及维护整套庞大的系统。最近几年 OSGi 技术的迅速发展正说明了通过模块化实现按需部署、降低复杂性和维护成本的需求是相当迫切的。

1.4.2 混合语言

  Java 平台上的多语言混合编程正成为主流,没中语言都可以针对自己擅长的方面更好地解决问题。

1.4.3 多核并行

  CPU 硬件的发展方向已经从高频率转变为多核心,随着多核时代的来临,软件开发越来越关注并行编程的领域。

1.4.4 进一步丰富语法

  不断的扩充 Java 语法。

1.4.5 64 位虚拟机

  几年之前,主流的 COU 就开始支持 64 为架构。Java 虚拟机也在很早之前就推出了支持 64 位系统的版本。但 Java 程序运行在 64 为虚拟机上需要付出比较大的额外代价:首先是内存问题,由于指针膨胀和各种数据类型对齐补白的原因,运行于 64 位系统上的 Java 应用需要消耗很多的内存,通常要比 32 位系统额外增加 10% ~ 30% 的内存消耗;其次是多个机构的测试结果显示,64 位虚拟机的运行速度在各个测试项上几乎全面落后于 32 位虚拟机,两者大约有 15% 左右的性能差距。

1.5 实战:自己编译 JDK

  想要一探 JDK 内部的实现机制,最便捷的路径之一就是自己编译一套 JDK 。通过阅读和跟踪调试 JDK 源码去了解 Java 技术体系的原理,虽然门槛会高一些,但肯定会比阅读各种文章、书籍更加容易切近本质。另外,JDK 中的很多底层方法都是 Native 的,当需要跟踪这些方法的运作或对 JDK 进行 Hack 的时候,都需要编译一套自己的 JDK 。

1.5.1 获取 JDK 源码

1.5.2 系统需求

1.5.3 构建编译环境

1.5.4 准备依赖项

1.5.5 进行编译

1.6 本章小结

  本章介绍了 Java 技术体系的过去、现在和未来的发展趋势,并通过实践的方式介绍了如何自己来独立编译一个 OpenJDK 7。

深入理解Java虚拟机-第1章-走进Java-读书笔记的更多相关文章

  1. 【深入理解JAVA虚拟机】第一部分.走进Java

    Java技术体系 如果仅从传统意义上来看,Sun官方所定义的Java技术体系包括以下几个组成部分:Java程序设计语言各种硬件平台上的Java虚拟机Class文件格式Java API类库来自商业机构和 ...

  2. 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区

    Java虚拟机运行时数据区 详解 2.1 概述 本文参考的是周志明的 <深入理解Java虚拟机>第二章 ,为了整理思路,简单记录一下,方便后期查阅. 2.2 运行时数据区域 Java虚拟机 ...

  3. 《深入理解Java虚拟机》- Java虚拟机是如何加载Java类的?

    Java虚拟机是如何加载Java类的?  这个问题也就是面试常问到的Java类加载机制.在年初面试百战之后,菜鸟喜鹊也是能把这流程倒背如流啊!但是,也只是字面上的背诵,根本就是像上学时背书考试一样. ...

  4. Java虚拟机(二):Java GC算法 垃圾收集器

    概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...

  5. Java虚拟机(三):Java 类的加载机制

    1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...

  6. 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 深入理解java虚拟机-第13章-线程安全与锁优化

    第十三章 线程安全与锁优化 线程安全 java语言中的线程安全 1 不可变.Immutable 的对象一定是线程安全的 2 绝对线程安全 一个类要达到不管运行时环境如何,调用者都不需要额外的同步措施, ...

  8. 深入理解java虚拟机-第六章

    第6章 类文件 6.3 Class类文件的结构 Class文件是一组以8位字节为基础单位的二进制流. Class文件格式采用一种类似C语言结构伪结构存储数据,这种伪结构中只有两种数据类型:无符号数和表 ...

  9. 《深入理解java虚拟机》第二章 Java内存区域与内存溢出异常

    第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域  

随机推荐

  1. 数据库历险记(一) | MySQL这么好,为什么还有人用Oracle?

    关系型数据库(Relational DataBase Management System),简称 RDBMS.说起关系型数据库,我们脑海中会立即浮现出 Oracle.MySQL.SQLServer 等 ...

  2. 利用java反射机制实现读取excel表格中的数据

    如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.Lis ...

  3. 高德地图 地铁图adcode 城市代码

    北京 1100天津 1200石家庄 1301沈阳 2101大连 2102长春 2201哈尔滨 2301上海 3100南京 3201无锡 3202苏州 3205杭州 3301宁波 3302合肥 3401 ...

  4. django(权限、认证)系统—— Permissions和Group

    接着上面的3篇讨论文章,我们阐述了Django中如何使用Authentication系统进行,用户的创建,登陆,登出,完成了用户的认证.接下来,我们要看另外一个议题,那就是Authorization授 ...

  5. BZOJ_3629_[JLOI2014]聪明的燕姿_dfs

    BZOJ_3629_[JLOI2014]聪明的燕姿_dfs Description 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 ...

  6. JVM内存异常与常用内存参数设置总结

    Java Web程序由于引入大量第三方java类库,在启动时经常会遇到内存溢出(Memory Overflow)或者内存泄漏(Memory leak)问题,导致程序启动失败. 一.OOM异常分类: O ...

  7. VUE+webpack+npm项目中的RSA加解密

    一.安装jsencrypt npm i jsencrypt node_modules文件夹中出现jsencrypt 二.引入jsencrypt 在main.js中import: import JsEn ...

  8. Github泄露扫描系统

    Github leaked patrol Github leaked patrol为一款github泄露巡航工具: 提供了WEB管理端,后台数据库支持SQLITE3.MYSQL和POSTGRES 双引 ...

  9. Jmeter----A接口response中body的某一个参数传递给B接口request的body中使用(参数的传递)

    示例:将接口"获取待办列表"response中body的id值传递给接口"删除待办"request的body中使用: 操作步骤如下: 第一步:给"获取 ...

  10. TensorFlow之DNN(三):神经网络的正则化方法(Dropout、L2正则化、早停和数据增强)

    这一篇博客整理用TensorFlow实现神经网络正则化的内容. 深层神经网络往往具有数十万乃至数百万的参数,可以进行非常复杂的特征变换,具有强大的学习能力,因此容易在训练集上过拟合.缓解神经网络的过拟 ...