《Java虚拟机精讲》第一章捡漏

Java体系结构捡漏(Java7)

1.1认识Java

1.1.1Java技术体系

1、JavaEE活跃在企业领域,除了包含JavaAPI组件外,还扩充了Web组件、事务组件、分布式组件、EJB组件(EJB是Enterprise Java Beans技术的简称, 又被称为企业Java Beans)、消息组件等;

1.1.2Java技术优点

1、体系结构中立
2、安全性优越
3、多线程
4、分布式:RMI(远程方法调用)
5、丰富的第三方开源组件

1.1.3Java语法结构和对象模型

1、在Java对象中的初始化和创建其实是同一个操作,被设计者绑定在了一块。

1.2Java重要概念

1.2.1Java体系结构

1、体系结构主要由Java编程语言、字节码、JavaAPI,虚拟机4部分组成(其实它们是一个Java程序编译执行要经历的技术处理);

1.2.2Java和C++相比

1、代码风格上来讲。比C++优美(C++语法庞杂得很);从安全性上来讲:
(1)废弃了指针(最明显的区别)
(2)自动内存管理(垃圾回收)
(3)数组边界检查
(4)类型转换检查
(5)线程安全机制(这个c++学得不够深入,并不知道有)
(6)物理环境访问限制等

1.2.3字节码

1、一组8位的字节单位的字节流组成了一个完整的字节码文件(对字节码文件处于懵懂的状态,后面再回滚复习一下)。

1.2.4JavaAPI

1、其实就是基础类库的集合,应用程序编程接口,可以有安全性和平台无关性。

1.2.5Java虚拟机

1、Sun公司的HotSpotVM(JVM简称VM)是市面上目前应用最广的虚拟机,JDK和OpenJDK自带的虚拟机,百度了一下,虚拟机这东西用C++写的,这里测试了一下自己的JDK虚拟机版本:
在这里插入图片描述
后面的ServerVM又是啥啊,继续搜了一下,可以看这里:
Hspot(热点最新的一种虚拟机)详解
最后:黑框里的mixed代表的是又解释又编译型的。
2、HotSpot具备的热点探测功能:将一个频繁调用的方法或者方法体(代码块也算)标记成热点代码,然后通过内嵌的两个JIT(Just In Time,Client Compiler和Server Compiler简称C1和C2
,C1会对字节码进行简单可靠的优化,C2会更讲究质量因此时间长点)编译器将字节码直接编译成本地代码****存储起来(后面想用就是拿来主义),这里区别一下解释型:一行一行得解释执行,没有存储的功能(有啥用?快啊,编译要编译全部,解释一行一行的快),这两个JIT和解释器可以自选策略配置究竟要不要,如何要(上面的链接配置里有命令)。

1.3安装和配置Java运行环境

主要是捡漏,具体安装细节就不写了

1.3.1环境变量

1、Java_HOME:JDK所在的路径;
PATH:许多程序默认会从这里面取JDK的bin目录中的工具;
CLASS_PATH:加载类库的路径;
配置环境变量就是能让程序直接去加载而不用去考虑所在的路径。

1.3.2利用bin目录下工具检查

windows+r进入命令行窗口
1、>java:检查安装配置成功
在这里插入图片描述
2、>java -version:检查版本,可以考虑设置一下编译解释策略
在这里插入图片描述

1.3.3黑框编译和运行

1、写一个HellowWorld类(注意文件名和类名一致),放在桌面
在这里插入图片描述

2、启动命令行窗口,切换目录到桌面
在这里插入图片描述

3、javac HelloWorld.java,编译成字节码文件
在这里插入图片描述
桌面上生成的字节码文件:
在这里插入图片描述
4、java HelloWorld执行它
在这里插入图片描述
5、System类:预定义类,给开发人员提供对底层操作系统API的只读访问操作,System.out是调用的系统内置输出流的PrintWriter类型。

1.4Java技术新特性

1.4.1Java模块化思想

1、模块化:将系统的功能进行独立开发部署,实行逻辑的解耦,模块间也有相应的接口进行通信。
2、OSGI技术(面向Java的动态模型系统):是Java模块化规范标准。

1.4.2语言无关性

1、虚拟机其实要的就是字节码文件,如果提供语言实现版本的虚拟机,那么就可以支持除了Java以外的编程语言。

1.4.3粗粒度的多核并行和细粒度的多核并行(Fork/join框架)

1、Java5的时候,在java.util.concurrent包下为开发人员提供了基于粗粒度的多核并行计算框架,但是粗粒度并不能够满足需求;
2、Java7中有了细粒度的多核并行框架Fork/join在java.util.concurrent.forkjoin中,所谓的细粒度,就是任务会划分成尽可能小的独立并行计算。
3、另外关于函数式编程,Java8出现的Lambda表达式解决了原本Java函数编程的****代码冗余缺点

1.4.4丰富的语法特性

1、Java7:
(1)Switch支持String;
(2)直接二进制字面值定义(就是可以直接使用二进制值进行定义);
(3)try-with-resources自动资源管理(资源回收不等于对象回收,也就是不会回收内存中的对象实例,回收的资源是虚拟机内部资源或者是外围系统的有限资源);
(4)cache语句表达式改变(后面再了解);
(5)全新文件系统NIO2.0(封装了IO的底层操作,直接一个Path类和File类增删改查);
(6)Fork/join模型;
(7)泛型类型推断运算符支持(其实就是new一个泛型实例,前面定义了类型,后面不用再定义:Type a=new Type<>());

1.4.5 64位和32位虚拟机

1、64位虚拟机性能不如32位虚拟机主要原因:64位指针在相同的缓存内存上占的空间比32位更大,这样子它的普通对象指针(OOPS)就会更少,导致性能下降,不过在Java1.6中通过对齐补白等操作压缩64位成32位,改善了性能。可以通过一定的配置参数将64位虚拟机开启指针压缩功能,不过在一定版本后一般是缺省开启。

1.5实战:玩转OpenJDK

1、暂不实战了,看后面的学习需求。

参考书籍:
高翔龙. Java虚拟机精讲[M]. 1. 北京:电子工业出版社, 2015.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值