《深入理解Java虚拟机》读书笔记——第1章 走近Java

(注:原文请见《深入理解Java虚拟机》周志明 著,知识点部分参考百度百科)

总述

第1章分为两个部分:Java概述及自己动手编译JDK的教程。

1 Java概述

介绍了Java的整体特性、Java的技术体系组成、Java及JVM的发展史。

1.1 Java的总体特性

1)Java不仅仅是一门编程语言,更是由一系列计算机软件和规范组成的技术体系。

2)Java具有众多优点:

a.Java虚拟机在千差万别的物理机上建立了统一的运行平台,实现了跨平台性。(主要)

b.提供了相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题。

c.实现了热点代码检测和运行时编译及优化,使得Java应用能随着运行时间的增加而获得更高的性能。

d.完善的应用程序接口及大量第三方类库的支持

3)Java目前短板:(截至JDK1.7)

a.Java尚不支持模块化,主要由于Sun公司提出的JSR没有获得通过,但是在Sun公司在OpenJDK中建立了一个名为Jigsaw的项目用来推动Sun提出的JSR标准在Java平台中转为具体实现。此外,IBM提出了自己的Java平台模块化标准JSR-291:Java SE动态组件支持(实际就是OSGi R4.1)。

b.函数式编程的一个重要优点是能够天然地适应并行运行。目前在Java中可以实现函数式编程,但是会带来代码的臃肿,在Java 8中,将会提供Lamda支持来改善对函数式编程的支持。

c.Java虚拟机很早之前就支持64位系统了,但Java程序运行在64位虚拟机上需要付出比较大的额外代价:由于指针膨胀和各种数据类型对其补白的问题,需要消耗更多内存,通常要比32位系统增加10%~30%的内存消耗;在运行速度上全靠面落后于32位虚拟机,大约有15%的性能差距。为此Sun公司提供了指针压缩功能,但是,开启指针压缩会增加执行代码的数量。

1.2 Java技术体系组成

Sun公司所定义的Java技术体系包括以下几个部分:

1)Java程序设计语言

2)JVM

3)Class文件格式

4)Java API类库

5)第三方Java类库

JDK(Java Development Kit,用于支持Java程序开发的最小环境)包括:Java程序设计语言、JVM、Java API类库。

JRE(Java Runtime Environment,支持Java程序运行的标准环境)包括:Java程序设计语言、JVM、Java SE API子集。

JDK 1.8 示意图

按技术领域可以划分成4个平台:

1)Java Card:为Java小程序(Applets)在小内存设备(如智能卡)上运行提供支持。

2)Java ME(Micro Edition):移动终端(手机、PAD)。对Java API有所精简,并加入了针对移动端的支持。

3)Java SE(Standard Edition):桌面级应用。提供了完整的Java核心API。

4)Java EE(Enterpeise Edition):企业级应用(如ERP(Enterprise Resource Planning),CRM(Customer Relationship Management)应用)。除提供Java SE API外,还对其做了大量的扩充并提供了相关部署支持。

2 其他知识点:

1)Class文件:全称Java Class文件。采用C/C++等传统语言编写的程序通常首先被编译,然后被连接成单独的、专门支持特定硬件平台及操作系统的二进制文件,通常一个平台上的二进制可执行文件不能在其他平台上运行,主要是由于这个二进制文件包含了对目标处理器的机器语言。而Java编译器把Java源文件的指令翻译成字节码,这种字节码就是Java虚拟机的“机器语言”,与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。

2)JVM通过编译器和解释器协同工作达到高效的目的。

编译器和解释器的联系和区别:解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。

编译器和解释器的联系和区别参见:http://www.cnblogs.com/sword03/archive/2010/06/27/1766147.html

时间: 2024-10-25 07:24:23

《深入理解Java虚拟机》读书笔记——第1章 走近Java的相关文章

深度理解java虚拟机读书笔记(二)HotSpot Java对象创建,内存布局以及访问方式

内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的时候,首先会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号代表的类是否被加载.解析并初始化.如果没有完成这个过程,则必须执行相应类的加载. (二)在堆上为对象分配空间.对象需要的空间大小在类加载完成后便能确定.之后便是在堆上为该对象分配固定大小的空间.分配的方式也有两种:

深入理解JAVA虚拟机--读书笔记

如上图,判断线段AB和线段CD相交. 分析:如果线段AB和线段CD相交,只能是图中的两种相交情况.可以用向量叉乘来判断.如果(向量AB叉乘向量AC)*(向量AB叉乘向量AD)<= 0 并且(向量CD叉乘向量CA)*(向量CD叉乘向量CB)<= 0,那么说明线段AB与线段CD相交. 设A(X1,Y1), B(X2, Y2), C(X3, Y3), D(X4, Y4),三角形ABC的面积为:2A =  = X1*Y2 + X3*Y1 + X2*Y3 - X3*Y2 - X1*Y3 - X2*Y1.

【Todo】深入理解Java虚拟机 读书笔记

有一个在线系列地址 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M..) /Users/baidu/Documents/Data/Interview/Java 全书共分为五大部分,围绕内存管理.执行子系统.程序编译与优化.高效并发等核心主题对JVM进行了全面而深入的分析  

深入理解Java虚拟机读书笔记---运行时数据区域

运行时数据区域 1.程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等基础功能都需要依赖这个计数器来完成.由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令.因此,为了线

深入理解java虚拟机读书笔记1--java内存区域

Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁. Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1 程序计数器 它是一块较小的内存空间,它的作用可以看做是当先线程所执行的字节码的信号指示器. java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多

《深入理解Java虚拟机》笔记 第七章 虚拟机加载机制及双亲委派模型

? ? 站在虚拟机的角度上,只存在两种不同的类加载器: ? ? 一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分: ? ? 另外一种就是其它所有的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,并且全部继承自java.lang.ClassLoader. ? 从Java开发人员的角度看,类加载器还可以划分得更细一些,如下: ? ? 1.启动类加载器(Bootstrap ClassLoader):这个类加载器负责将放

《深入理解Java虚拟机》笔记 第三章 GC算法和GC器

? ? [哪些内存需要回收] ? ? 当对象判定为"已死"状态,虚拟就要采取一定的手段将这些对象从内存中移除. ? ? 1.引用计数算法 ? ? 很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1:当引用失效时,计数器减1:任何时刻计数器都为0的对象就是不可能再被使用的. ? ? 引用计数算法(Reference Counting)的实现简单,判断效率也很高,在大部分情况下它都是一个不错的算法.但是Java语言中没有选用引用计数算

《深入理解Java虚拟机》笔记 第三章 内存分配与回收策略

几条主要的最普遍的内存分配规则: ? ? 1.对象优先在Eden分配 ? 大多数情况下,对象在新生代的Eden区中分配. ? ? 当Eden区没有足够的空间进行分配时,虚拟将发起一次Minor GC,如果GC后新生代中存活的对象无法全部放入Survivor空间,则需要通过分配担保机制提前进入到老年代中,前提是老年代中不能容纳所有存活对象,即只能容纳部分. ? ? 则未能进入到老年代的存活对象将继续分配在Eden区中 ? ? 如果Eden区也还未能容纳剩余的存活对象虚拟机抛出OutOfMemory

《深入理解Java虚拟机》笔记 第三章 理解GC日志

? ? ? ? ? ? ? ? ? ? ? ?