深入JVM GC概述

GC(Garbage Collection) 是Java语言的伴生产物,而内存回收也是Java区分C C++的一大特征,使得程序设计过程无需过多考虑内存回收 泄漏等问题,使得内存分配 自动化成为可能

GC主要解决3个问题:

  • 哪些内存需要回收?
  • 什么时候回收?
  • 怎么回收?

Java运行时数据区域其中的几大部分:包括 程序计数器、虚拟机栈、本地方法栈 

这3个区域是线程私有的,也就是生命周期是和线程一致的。

栈中的栈帧随着方法的进入和退出而执行者入栈和出栈的操作,

并且每一个栈帧分配的内存大小基本由类结构确定后就已知(通常认为编译器就确定)

因此这些部分内存的分配和回收具备确定性,所以不需要过多考虑内存回收的问题,

因为方法结束或线程结束后,相应的内存自然回收了

 

——而Java堆的区域却大不相同,堆存放者对象实例,一个接口的多个实现类需要内存不确定,一个方法的多个分支

需要的内存也不一样,只有程序运行期间才能确定哪些对象被创建,需要创建多少对象,也就是这部分内存是动态的

垃圾回收GC 所关注的便是这部分内存。

你可能感兴趣的:(Java进阶,深入理解Java虚拟机)