知识点记录
1.计算机高级语言按程序执行方式可分为编译型和解释型两种;
.编译型有C、C++、Swift、Kotlin等高级语言;编译型语言可以脱离开发环境独立运行,运行效率高;但因为编译型语言的程序被编译成特定平台上的机器码,所有可移植性不是很高。
.解释型有JavaScript、Ruby、Python等语言 ;解释性语言是使用专门的解释器对源码逐行解释成特定平台的机器码并执行,可以认为:每次执行解释型语言的程序都需要先编译一次,因此解释语言的程序运行效率通常比较低,而且不能脱离计解释器独立运行,但它的优势就是可以跨平台。
2.java语句比较特效,可以理解为它既是编译型又是解释型
.首先由java编写的程序需要经过编译步骤,但这编译的步骤不会生成特定平台的机器码,而是一种与平台无关的字节码(.class)文件,它是不可执行的,需要使用jvm有执行;它的执行过程如下:
java源文件(java程序员的.java文件) --> javac编译—>字节码文件(.class)—>jvm解释—>特定平台的机器码
3.Oracle公司制定java虚拟机规范在技术上规定了jvm的统一标准,具体定义了jvm的如下细节;
.指令集
.寄存器
.类文件的格式
.栈
.垃圾回收堆
.存储区
4.java程序的基本规则
.class Test{} 这是java的一个空类,它的程序是正确的,它可以被javac编译,但是运行这个类时,则会得到如下错误:在Test类中找不到main方法…
上述错误表名:这个类只是不能被解释执行,并不代表错误。实际上java解释器规定:如需某个类能被解释器解释执行,则这个类中需要包含main方法。而对一个大型java程序而言,往往只需要一个类包含main方法,而其他类都是用于被main方法直接或间接的调用的。
5.java源文件的命名规则
.通常情况下,java源程序文件名是可以任意的,但是有一种情况例外,如果java程序定义了一个public类,则该源文件的文件名必须与该public类名相同。由于java程序源文件名必须与public类的类名相同,所以一个java源文件中只能定义一个public类
6.java9的GI垃圾回收器
.java的堆内存是一个运行时数据区,它保存着类的实例(对象),java虚拟机中储存着正在运行时的应用程序所有建立的对象,这些对象都是由垃圾回收器自动释放,
.垃圾回收器一般都是在jvm后台自动进行,可能是在cup空闲或者内存不足是自动进行,程序员是无法做得到精确控制垃圾回收的时间和顺序等;
.在java中,当没有引用变量指向原先分配给某个对象的内存时,该内存便成为垃圾;垃圾回收器会回收该内存,之后重新分配给新的对象。除释放没用的对象外,垃圾回收器也会清理内存记录碎片。它是由于创建对象和垃圾回收器释放丢弃对象所占的内存,内存中会出现碎片。碎片是分配给对象的内存块之间的空闲内存区,碎片整理将所占用的堆内存移到堆的一端,jvm将整理出的内存分配给新的对象
.垃圾回收器有如下几个特点:
a.垃圾回收器是回收无用对象的内存空间,这个内存空间是jvm的内存空间,它只能回收内存中的资源,对于其他物流资料,如数据库连接、磁盘I/O等就行不通。
b.可以通过将对象设置为null来暗示垃圾回收器可以回收该对象。
c.垃圾回收的发生是不可预知性的。
d.垃圾回收有2个精确性:一是垃圾回收机制能够精确标记活着的对象;二是垃圾回收器能够精确定位对象之间的引用关系。前者是完全回收垃圾对象的前提,否则就可能造成内存泄漏,而后者是实现并归和复制等算法的必要条件。
e.现在的jvm有多种不同的垃圾回收实现,每种回收机制因为算法不同而表现各不相同。
所以编写java程序时,一个基本的原则是:对于不再需要的对象,不要引用他们。如果保持对这些对象的应用,则垃圾回收器则暂时不会回收他们。则会导致系统可用内存越来越少;当系统的可用内存越来越少时,垃圾回收器的执行频率会越来越高,则程序的性能则会不断下降。