刚刚安装Java时,只是按照网上的步骤操作了一遍,也没有想了解一下具体的JDK JRE JVM都代表了啥
最近讲到这里,正好总结一下。
他们之间的关系可以简单理解为 JDK包含了JRE JRE包含了JVM
JDK - Java Development Kit 是 Java 语言的软件开发工具包(SDK),从JDK5.0后改名为SE,用来编译Java程序
JRE+Java外部工具(javac.exe等)
JRE - Java Runtime Environment缩写,指Java运行环境,提供了很多现成的类
JDK+Java核心类库
JVM - Java Virtual Mechine,指Java虚拟机,用来运行Java程序
一个程序的实现过程:Hello.java -> javac -> Hello.class -> JVM -> 输出: Hello World
以及
JVM的内存结构
假如说JVM所管理的内存(假如:500M)时,主要分三大区域:
(1)方法区:加载硬盘上的类文件,读进到方法区中。用来存储程序运行时所需要的类信息, 如String.class,静态方法等,常量池。
(2)堆:所有引用类型的对象(实例)存储的位置,会给实例分配对应的空间
(3)栈:是用来存储方法的参数以及方法内的局部变量
其中栈有栈帧:
在栈中,jvm会给每一个方法单独分配空间,这个空间用来存储此方法内的所有局部变量。当此方法运行结束后,栈帧小时(内存释放)
引用变量存储的是堆中对象的地址信息,当有很多指向对象的变量越来越多时,有可能造成内存溢出,需要清空变量的地址信息
String str = "1111";
str = null
此时堆里的对象,没有任何引用,会被认为时垃圾,等待GC回收。
垃圾回收机制:GC 不定时的检查堆里的对象,是否被变量所引用。如果发现这个对象没有被引用,就会处理这个对象
手工清空堆内存:System.gc();