每次面试的时候基本都会被问到jvm的垃圾回收,每次回答的都不是那么的完美,这次来总结一下。

1、概念问题。

  a、什么是堆?存放所有的对象实例和数组,是垃圾回收的最主要区域,因此也叫“GC堆”。

  b、什么是栈?存放局部变量表(8中基本数据类型,对象引用类型),操作数栈,动态链接,方法出口信息等。

  c、什么是方法区?存放类信息,常量,静态变量,即时编译器编译后的代码,在HotSpot上也被成为“永久代”。

  d、什么是运行常量池?方法区的一部分,存放编译期存放的字面量和符号引用。

2、相关问题、

  a、什么时候开始回收的。当jvm无法为一个对象分配空间出发Minor GC(Eden区满了),每次Minor GC会清理年轻带的内存。多次Minor GC后存活次数达到一定次数后会将这些            对象放到老年代,当升入老年代的对象大于老年代剩余空间发生Major GC,对老年代的对象进行回收。

  b、回收的对象是什么?从GC Roots开始进行可达性分析,经过第一次标记后,并调用finalize()方法没有复活的对象。每个对象的该方法只能被调用一次。

   GC Roots:虚拟机栈中的对象,方法区里面的静态对象,方法区常量池的对象,本地方法JNI应用对象。

  c、怎样回收的?新生代采用复制算法,将新生代分成一个Eden区,两个survivor区(存活率较高),老年代采用标记整理或者标记清理算法。

未完待续。。。

posted on 2017-10-02 18:53  rookie111  阅读(927)  评论(0编辑  收藏  举报