1.JDK和JRE
JDK的全称是Java SE Development Kit,即Java标准开发包,是Oracle提供的一套用于开发Java应用程序的开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时的环境,以及常用的Java类库。
JRE,即Java运行时环境,它的全称是Java Runtime Environment,是运行Java程序的必需条件。
2.不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢?
简单地说,JRE包括JVM。JVM是运行Java程序的核心虚拟机,而运行Java程序不仅需要核心虚拟机,还需要其他的类加载器、字节码校验器以及大量的基础类库。JRE除包含JVM之外,还包含运行Java程序的其他环境支持。
一般而言,如果只是运行Java程序,可以只安装JRE,无需安装JDK。
注意:如果需要开发Java程序,则应该选择安装JDK;当然,安装了JDK之后,就包含了JRE,也可以运行Java程序。但如果只是运行Java程序,则需要在计算机上安装JRE,仅安装JVM是不够的。实际上,Oracle网站上提供的就是JRE的下载,并不提供单独的JVM的下载。
3.Java源文件的命名规则
Java程序源文件的命名不是随意的,Java文件的命名必须满足如下的规则。
(1)Java程序源文件的扩展名必须是.java,不能是其他文件的扩展名
(2)在通常情况下,Java程序源文件的主文件名可以是任意的。但有一种情况例外:如果Java程序源代码里定义了一个public类,则该源文件的主文件名必须与该public类(也就是该类定义使用了public关键字修饰)的类名相同。
由于Java程序源文件的文件名必须与public类的类名相同,因此,一个Java源文件里最多只能定义一个public类。
注意:一个Java源文件可以包含多个类定义,但最多只能包含一个public类定义;如果Java源文件里包含public类定义,则该源文件的文件名必须与这个public类的类名相同。
4.Java的垃圾回收器
传统的C/C++等编程语言,需要程序员负责回收已经分配的内存。显示进行垃圾回收是一件比较困难的事情,因为程序员并不总是知道内存应该何时被释放。如果一些分配出去的内存得不到及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这种现象被称为内存泄漏。总体而言,显示进行垃圾回收主要有如下两个缺点:
(1)程序忘记及时回收无用内存,从而导致内存泄露,降低系统性能。
(2)程序错误地回收程序核心类库的内存,从而导致系统崩溃。
与C/C++程序不同,Java语言不需要程序员直接控制内存回收,Java程序的内存分配和回收都是有JRE在后台自动进行的。JRE会负责回收那些不再使用的内存,这种机制被称为垃圾回收(Garbage Collection,GC)。通常JRE会提供一个后台线程来进行检测和控制,一般都是在CPU空闲或内存不足时进行垃圾回收,而程序员无法精确控制垃圾回收的时间和顺序等。