1:程序计数器:他指的是字节码执行的行号指示器,代码执行到哪行了
2:虚拟机栈:他描述的是方法的执行,方法开始入栈,方法执行结束出栈,虚拟机栈只为虚拟机执行的方法进行服务
3:本地方法栈:作用与虚拟机栈相同,只不过服务的对象不一样,本地方法栈只为执行本地方法进行服务
4:方法区:也称永久代,主要存放的是一些常量、静态变量等,在JDK8之后,被元空间替代
5:Java堆:堆存放了几乎所有的java对象,是对象内存分配的空间
2:堆内存空间有了解吗?首先,因为堆存放了几乎所有的对象,针对堆会进行垃圾回收,常见的垃圾回收都基于分代收集理论进行垃圾回收,所以,java堆又可以分为新生代和老年代
其中新生代又可以继续划分为Eden区和两个Survivor区,他们比例默认是8:1:1
3:怎么判读一个对象死亡?怎么判断那些对象需要回收?两个算法:
1:引用计数算法 ,有一个计数器,当该对象被引用的时候加1,当引用失效的时候减1,计数器为0,则代表该对象已死亡,可以回收
2:可达性分析算法,有一个Roots根节点,可以查询到调用链,调用链不能达到根节点时,该调用链所有的对象均认为已死亡
4:常用的垃圾回收算法?1:标记-清除算法:分为两个步骤,先标记,再清除,缺点:不稳定效率低,会造成不连续的内存空间,碎片化问题
2:标记-复制算法:将内存区域划分为两个大小相对的内存空间,每次只用其中一块,当该片空间满时,将该空间或者的对象标记,复制到另外一片内存空间,并将当前空间全部清除回收。缺点:将内存一分为二,内存空间资源浪费
3:标记-整理算法:第一步将活着的对象进行标记,第二步,把活着的对象全部移动到内存的一端,把边界值之后的内存空间全部清除回收。
5:常用的垃圾回收器1:Serial/Serial Old收集器:单线程收集器,新生代采用标记-复制算法,老年代使用标记整理算法 stop the world
2:ParNew收集:是Serial收集器的多线程版本,使用算法和他一样
3:CMS收集器:特点最短暂停时间,不需要stop the world,使用标记清除算法
4:G1收集器:不划分区域,是新生代和老年代的综合收集器,它将内存划分为多个region区,每个region区都可以扮演新生代老年代等



