1、java语言的运行过程。首先java源文件(.java)通过java编译器编译成java字节码文件(.class),接着通过JVM虚拟机将java字节码加载、解析成运行主机能识别的机器码。
2、jvm中的堆和栈。
Stack(栈)是JVM的内存指令区。主要存储基本的数据类型、Java 指令代码、常量等字节长度已知的数据。
Heap(堆)是JVM的内存数据区。主要存储对象的实例(包括属性),一般分配的存储空间是不定长的。
总结:栈是运行时的单位(控制执行逻辑),而堆是存储的单位(数据存储);堆中存的是对象,栈中存的是基本数据类型和堆中对象的引用(即对象指针)。
3、Jvm的构成。主要包括类加载子系统、数据存储区、执行引擎。
4、JVM中对象的引用分类。
(1)强引用:默认情况下,对象采用的均为强引用(这个对象的实例没有其他对象引用,GC时才会被回收)。
(2)软引用:软引用是java中提供的一种比较适合于缓存场景的应用(只有在内存不够用的情况下才会被GC)。
(3)弱引用:在GC时一定会被GC回收。
(4)虚引用:由于虚引用只是用来得知对象是否被GC。
(1)强引用:默认情况下,对象采用的均为强引用(这个对象的实例没有其他对象引用,GC时才会被回收)。
(2)软引用:软引用是java中提供的一种比较适合于缓存场景的应用(只有在内存不够用的情况下才会被GC)。
(3)弱引用:在GC时一定会被GC回收。
(4)虚引用:由于虚引用只是用来得知对象是否被GC。
5、类加载器。类加载机制从自上往下查找的过程。
https://blog.csdn.net/ns_code/article/details/17881581
转:https://blog.csdn.net/u011067360/article/details/46047521