JVM学习日记😊垃圾回收之回收哪块

“这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战java

引言

前面讲了jVM有哪些内存区域怎么划分的,何时会出现内存溢出的异常,学完了草原上的基本环境,咱们进入狼的篇章,等待你是否是跑题了,这跟狼有啥关系,由于若是把对象比喻成羊,那垃圾回收就是群狼,狼来限制羊的数量,保证天然正常运转,在蒙古,狼是神灵,每当有人去世,都会把尸体喂狼,狼在他们眼中就是神秘的存在,一样,咱们的垃圾回收也有不少奥秘等着咱们揭开,那就和我一块儿来看看吧。markdown

概述

其实,最先垃圾回收不是诞生于java语言的,最先是麻省的lisp(呀呀呀,怎么又是美国的),哎没错,认可吧,这货1960年就使用内存动态分配和垃圾收集技术的语言了,其实归根结底垃圾回收主要解决三个问题:何时回收?回收哪块啊?怎么回收啊?并发

为何学(why)?

由于日常要排查各类内存溢出和泄漏的问题,还有就是高并发场景下须要对垃圾回收进行必要的监控和调节。高并发

回收哪块

前面提到了一些基础,因此假设你们都不是小白了,咱们知道Java中有三块内存是和线程的生命周期是相同的,分别是:程序计数器、本地方法栈和虚拟机栈,咱们知道每一个方法的执行都会在栈中由线程建立一个栈帧,伴随着方法的调用和结束进行着入栈和出栈的操做,每一个栈帧的大小都是能够肯定下来的,说白了,这几块区域本身都内心有数,因此不是咱们考虑垃圾回收的对象。post

那就剩堆和方法区了,就这俩块区域本身内心没数,你就有疑问了这两块哪里没数了啊,那我问你哦(一本正经),方法区是干吗的?那还用说,存放类的信息和方法信息的啊,那好,那你知道一个接口有多少个实现类嘛?每一个类的内存是多少呢?方法里会用到多少参数?占多少内存,建立多少对象?支支吾吾不出来吧,因此啊,这两快区域有很显著的不肯定性,须要动态分配内存。spa

题外话

尽心尽力才是对本身真实世界的不辜负,作任何事都要尽心尽力,什么叫尽心尽力啊?线程

《狼图腾》中有这样一段描述:你要是想在草原生活下去,就必需要比狼聪明,比狼强大。code

谁敢和狼斗啊,我敢保证碰见了绝对会发抖,就那犀利的眼神都能让你的灵魂抖上一抖,可是你能稳定本身焦躁的心,你不怕,你不光不怕,还能和它对视,了解以后,还能用所学和它战斗,若是遭遇失败,还能总结经验再战,直到打败它,这就叫尽心尽力。orm

实际上,咱们每一个人的心理都住着一匹狼,慢慢地了解它,接近它,靠近它,最终驯服它(怎么有种体内封印了一条九尾的感受),没错它就会变成你的力量,随你征战沙场。对象

相关文章
相关标签/搜索