刚刚安装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
源文件 -> 编译器(javac) -> 字节码文件 -> 解释器 (java)-> 运行
字节码的执行分为 即时编译方式 和 解释执行方式
解释执行分为 装入 校验 执行
以及
JVM的内存结构
(1)方法区:加载硬盘上的类文件,读进到方法区中。用来存储程序运行时所需要的类信息, 如String.class,静态方法等,常量池。
(2)堆:所有引用类型的对象(实例)存储的位置,会给实例分配对应的空间
(3)栈:是用来存储方法的参数以及方法内的局部变量
其中栈有栈帧:
String str = "1111";
str = null
此时堆里的对象,没有任何引用,会被认为时垃圾,等待GC回收。
垃圾回收机制:GC 不定时的检查堆里的对象,是否被变量所引用(判断方法:引用技术和对象引用遍历)。如果发现这个对象没有被引用,就会处理这个对象
手工清空堆内存:System.gc();