JVM-垃圾收集器主要作用的区域

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

大家都知道虚拟机栈、本地方法栈和程序计数器是线程独占的,生命周期也会随着线程的创建和销毁而产生和被回收,并且在类加载完成,类的结构确定以后,它们所占用的内存大小也就基本确定了,所以并不需要垃圾收集器花费太多的精力。

而对于java堆和方法区,主要分别存储对象和类。程序运行过程中会动态产生大量的对象,并且不确定性也很大,比如一个接口有多个实现类或存在分支,除非程序运行,否则无法判断出调用的哪个实现类创建的对象,也无法提前知道程序会走哪个分支、创建哪些对象;对于类来说,现在好多框架或咱们自己编码时都会经常用到类动态生成的技术,如cglib、jsp等,所以在运行时也会产生大量的动态类,同样是一个不确定因素。这两种情况都很容易导致内存溢出,因此垃圾收集器最主要关注是这两块区域。

猜你喜欢

转载自blog.csdn.net/a13662080711/article/details/108139527