首先,第一点面试过程中一定不要说了解或精通JVM,很容易掉坑里。可以说我了解JVM相关参数的调优。
    设置 JVM 参数

    -server -Xmx4g -Xms4g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70

    1. server VM有两种运行模式Server与Client,两种模式的区别在于,Client模式启动速度较快,Server模式启动较慢;但是启动进入稳定期长期运行之后Server模式的程序运行速度比Client要快很多; (一般是server模式启动)
    2. Xmx2g 最大堆大小 (堆越大,创建对象越多)
    3. Xms2g 初始堆大小 (初始堆越小,JVM启动速度越快)
    4. Xmn256m 堆中年轻代大小; (年轻代堆越大,推迟Java垃圾回收机制时间越长,也可以提高时间,JVM效率越高,因为堆空间不够,就需要将创建最早的对象到老年代,老年代随时随刻会被垃圾回收机制回收,如果最早的对象又被调用,则会将该对象移到年轻代,这样反复操作,得出对象占用空间越大,效率越高)
    5. XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4. (非堆内存越多,可创建的类越多,可创建栈越多,可创建的线程越多)
    6. Xss 每个线程的Stack大小 (每个线程栈空间越大,那么我们创建的递归调用的方法数量越多,调用的压栈的方法越多,同样带来的缺点,需要物理空间越大,创建的线程的速度很慢)
    7. XX:+DisableExplicitGC,这个参数作用是禁止代码中显示调用GC。代码如何显示调用GC呢,通过 System.gc()函数调用。如果加上了这个JVM启动参数,那么代码中调用System.gc()没有任何效果,相当于是没有这行代码一样。 (file标记这个对象可以回收,但是JVM不会立即回收,只是标记回收,优先回收,但是具体什么时候回收,由JVM决定。)
    8. XX:+UseConcMarkSweepGC 并发标记清除(CMS)收集器,CMS收集器也被称为短暂停顿并发收集器;
    9. XX:+CMSParallelRemarkEnabled 降低标记停顿;
    10. XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩.
    11. XX:LargePageSizeInBytes 指定 Java heap 的分页页面大小
    12. XX:+UseFastAccessorMethods 原始类型的快速优化
    13. XX:+UseCMSInitiatingOccupancyOnly 使用手动定义的初始化定义开始CMS收集

    XX:CMSInitiatingOccupancyFraction 使用cms作为垃圾回收使用70%后开始CMS收集;