JVM
描述:
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JNI
描述:
JNI是Java Native Interface的缩写,它提供了若干的API,实现了Java和其他语言的通信(主要是C&C++)。
JDK
描述:
主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库。
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。
SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。
没有JDK的话,无法编译Java程序,如果想只运行Java程序,要确保已安装相应的JRE。
JRE
描述:
内存/垃圾回收机制
描述:
通过 GC(一个守护进程)隐性回收内存资源。
产生原因:
- 对象无法使用,且没有任何线程可以使用到他;
- 给对象赋予了空值null,以下再没有调用过;
- 给对象赋予了新值,这样重新分配了内存空间;
内存泄露
描述:
无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露。
产生原因(部分):
- 关闭链接;
- 自动装箱;
- 静态集合类;
- 修改集合里面的对象属性;
- 单例对象持有外部对象的引用;
- 内存溢出;
内存溢出
描述:
指程序在申请内存时,没有足够的内存空间供其使用,堆栈已经达到系统设置的最大值,进而导致崩溃,那就是内存溢出。
产生原因:
如申请了一个integer,但给它存了long才能存下的数
堆(heap)和栈(stack)
描述:
堆:Java 的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
栈:栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
Heap(堆) | Stack(栈) | |
JVM中的功能 | 内存数据区 | 内存指令区 |
存储数据 | 对象实例 | 基本数据类型, 指令代码,常量,对象的引用地址 |
自动装箱、拆箱(享元模式)
描述:
装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
Integer i = 10; //装箱
int n = i; //拆箱
在装箱过程中,系统为我们执行了:Integer i = Integer.valueOf(10);而拆箱则执行了:i.intValue()。
产生原因:
比如我们有一个方法,接受一个对象类型的参数,如果我们传递一个原始类型值,那么Java会自动讲这个原始类型值转换成与之对应的对象。