JVM

作者: sunyuan1125 | 来源:发表于2018-07-05 08:28 被阅读10次

    1、为什么JVM调优经常会将-Xms和-Xmx参数设置成一样;

      针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值

    2、Java内存模型,方法区存什么;

    3、类的基本信息、常量、静态变量、编译后的代码

    4、CMS垃圾回收过程;

    5、Full GC次数太多了,如何优化;

    full gc频繁说明old区很快满了。

    如果是一次fullgc后,剩余对象不多。那么说明你eden区设置太小,导致短生命周期的对象进入了old区。

    如果一次fullgc后,old区回收率不大,那么说明old区太小。

    6、直接内存如何管理的;

    Minor GC与Full GC分别在什么时候发生?什么时候触发Full GC;

    minorGC 针对年轻代 full gc 年轻代老年代同时进行

    当Eden区满时,触发Minor GC

    Full GC触发条件:

    (1)调用System.gc时,系统建议执行Full GC,但是不必然执行

    (2)老年代空间不足

    (3)方法去空间不足

    (4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存

    (5)由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小

    7、GC收集器有哪些?CMS收集器与G1收集器的特点。

    Serial 单线程串行进行垃圾收集,复制算法

    ParNew Serial 多线程版本,复制算法,可以与CMS配合

    Parallel 重吞吐,复制,多线程

    SerialOld 串行 单线程 标记 整理

    ParallelOld  标记整理

    CMS 标记清除  获取最小停顿时间,特别适合BS使用

    G1 布局不是只有新生代活老年代,整个布局逻辑划分region,G1跟踪每个region里垃圾大小,维护优先的列表,根据允许的收集时间,优先收集收集价值最大的Region

    年轻代一般用复制算法,老年代一般用标记--算法

    9、Java在什么时候会出现内存泄漏;

    内存泄漏:程序申请的内存无法释放,始终占用空间,分配的对象可达但是无用,一般是一个很大的对象无法释放,老年代的大对象,内存泄漏最终会导致内存溢出

    内存溢出:程序申请内存时,没有内存空间可分配了

    10、Java中的大对象如何进行存储;

    超过EDEN区一半,直接跳过年轻代进入老年代

    11、rt.jar被什么类加载器加载,什么时间加载;

    Bootstrap Classloader

    12、自己写的类被什么加载,什么时间加载;

    13、自己写的两个不同的类是被同一个类加载器加载的吗?为什么?

    14、为什么新生代内存需要有两个Survivor区?

    15、几种常用的内存调试工具:jmap、jstack、jconsole;

    16、dump日志

    17、类加载的五个过程:加载、验证、准备、解析、初始化;

    18、G1停顿吗,CMS回收步骤,CMS为什么会停顿,停顿时间;

    19、栈主要存的数据是什么,堆呢?

    20、堆分为哪几块,比如说新生代老生代,那么新生代又分为什么?

    Eden survior 1  survior  2

    21、软引用和弱引用的使用场景(软引用可以实现缓存,弱引用可以用来在回调函数中防止内存泄露);

    相关文章

      网友评论

          本文标题:JVM

          本文链接:https://www.haomeiwen.com/subject/rqjuyftx.html