一、GC是什么时候触发的(面试最常见的问题之一)
由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Minor GC和Full GC。
Minor GC
  一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Minor GC,对Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor区。然后整理Survivor的两个区。这种方式的GC是对年轻代的Eden区进行,不会影响到年老代。因为大部分对象都是从Eden区开始的,同时Eden区不会分配的很大,所以Eden区的GC会频繁进行。因而,一般在这里需要使用速度快、效率高的算法,使Eden去能尽快空闲出来。
Full GC
对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比Scavenge GC要慢,因此应该尽可能减少Full GC的次数。在对JVM调优的过程中,很大一部分工作就是对于Full GC的调节。有如下原因可能导致Full GC:
a) 年老代(Tenured)被写满;
b) 持久代(Perm)被写满;
c) System.gc()被显示调用;
d) 上一次GC之后Heap的各域分配策略动态变化;
二、面试题:jvm查看gc命令
jstat -gc 12538 5000
即会每5秒一次显示进程号为12538的java进成的GC情况,
三、面试题:如果频繁老年代回收怎么分析解决(蚂蚁金服面试题)
(个人理解)老年代是存放那些在程序中经历了好几次回收仍然还活着或者特别大的对象(这个大就要看你是否设置了-XX:PretenureSizeThreshold 参数了)。检查程序中是否有比较大的对象,或者这个参数设置

四、GC回收哪些空间(如何判断并回收作用域)

从root搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象。

五、GC主要做了什么

新生代做的是复制清理、from survivor、to survivor是干啥用的、老年代做的是标记清理、标记清理后碎片要不要整理、复制清理和标记清理有有什么优劣势

六、那些对象可以作为GC Roots?
虚拟机栈(栈帧中的本地变量表)中的引用的对象
方法区中的类静态属性引用的对象
方法区中的常量引用的对象
本地方法栈中JNI(Native方法)的引用对象

七、Java中的static变量和static方法在JVM运行中内存的分配管理有什么不同和一般变量方法?
      静态对象                                    非静态对象
拥有属性: 是类共同拥有的          是类各对象独立拥有的
内存分配: 内存空间上是固定的        空间在各个附属类里面分配
分配顺序: 先分配静态对象的空间       继而再对非静态对象分配空间,也就是初 始化顺序是先静态
八、类的加载过程

类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。

其中类加载过程包括加载、验证、准备、解析和初始化五个阶段。

九、Java虚拟机规范将JVM虚拟机所管理的内存分为几部分?

1. 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行字节码的行号指示器。是线程私有,生命周期与线程相同。
2. Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。
Java虚拟机栈描述的是Java方法(区别于native的本地方法)执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动作链接、方法出口等信息。每个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
3. 本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机所使用到的Native方法服务。

4. 方法区

 
posted on 2018-11-08 21:12  studyAnddaydayup  阅读(504)  评论(0编辑  收藏  举报