目录
1、JVM 的体系结构
2、双亲委派机制
3、堆内存调优
4、关于GC垃圾回收机制
4.1 GC中的复制算法
4.2 GC中的标记清除算法
1、JVM 的体系结构
"堆"中存在垃圾而"栈"中不存在垃圾的原因:
堆(Heap)
- 用途:堆主要用于存储对象实例和数组。在Java中,几乎所有通过
new
关键字创建的对象都会存储在堆内存中。- 内存分配与释放:堆内存的分配和释放由JVM的垃圾回收器(Garbage Collector, GC)自动管理。当对象不再被引用时,它们被认为是垃圾,但并不会立即被释放。相反,垃圾回收器会在合适的时机进行垃圾回收,以释放这些不再使用的内存空间。
- 垃圾存在的原因:由于垃圾回收器并不是实时运行的,且对象的生命周期可能跨越多个垃圾回收周期,因此在堆内存中可能会存在已经不被使用但仍未被回收的垃圾对象
栈(Stack)
- 用途:栈主要用于存储局部变量、方法调用信息和对象的引用变量(但对象本身存储在堆中)。每个线程都有自己独立的栈空间,用于存储该线程执行过程中的局部变量和方法调用信息。
- 内存分配与释放:栈内存的分配和释放是自动的,且与方法的调用和返回紧密相关。每当一个方法被调用时,JVM会在栈上为该方法创建一个新的栈帧&