成为Java顶尖程序员,先过了下面问题!(二)

三、JVM

1.JVM堆的基本结构。

堆可以细分为:新生代(Young Generation ) 和老年代(Tenured Generation) ;
也可分为: Eden空间,From Survivor 空间、 To Survivor空间;

2.JVM的垃圾算法有哪几种?CMS垃圾回收的基本流程?
  1. 引用计数法(简单高效,但是无法处理循环引用,jvm中不采用)
  2. 可达性分析算法
  • 标记清除算法
  • 复制算法
  • 标记整理算法

CMS(Concurrent Mark Sweep)基本流程:

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除
3.JVM有哪些常用启动参数可以调整,描述几个?
参数名 使用说明
Xms 设置 Java 堆的初始化大小
Xmx 设置 Java 堆最大值大小
Xss 设置Java虚拟机栈大小
Xmn 设置年轻代大小
-XX:PermSize 设置持久代(perm gen)初始值
-XX:MaxPermSize 设置持久代最大值
4.如何查看JVM的内存使用情况?

在jdk的bin目录下有
jstat.exe jconsole.exe jvisualvm.exe 等工具可以查看内存状况

5.Java程序是否会内存溢出,内存泄露情况发生?举几个例子。

创建一个大数组就会内存溢出:long[] arr=new long[102410241024];
不关资源,比如数据库连接,打开的文件等,就会出现内存泄漏。

6.你常用的JVM配置和调优参数都有哪些?分别什么作用?

参考第3题

7.JVM的内存结构?

由所有线程共享:方法区,堆。
线程隔离的数据区: 虚拟机栈,本地方法栈,程序计数器。

8.常用的GC策略,什么时候会触发YGC,什么时候触发FGC?

设置安全点,安全区域。

JVM的YGC&FGC
YGC :对新生代堆进行GC。频率比较高,因为大部分对象的存活寿命较短,在新生代里被回收。性能耗费较小。
FGC :全堆范围的GC。默认堆空间使用到达80%(可调整)的时候会触发FGC。以我们生产环境为例,一般比较少会触发FGC,有时10天或一周左右会有一次。

对YGC的 触发时机,相当的显而易见,就是eden空间不足, 这时候就肯定会触发ygc

对于FGC的触发时机, old空间不足, 和perm的空间不足, 调用system.gc()这几个都比较显而易见,就是在这种情况下, 一般都会触发GC。

目录列表
一、数据结构与算法基础
二、Java基础
三、JVM
四、多线程/并发
五、Linux使用与问题分析排查
六、框架使用
七、数据库相关
八、网络协议和网络编程
九、Redis等缓存系统/中间件/NoSQL/一致性Hash等
十、设计模式与重构
本文是针对知乎文章《成为Java顶尖程序员,先过了下面问题》的解答

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,430评论 11 349
  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 11,207评论 2 31
  • 转载blog.csdn.net/ning109314/article/details/10411495/ JVM工...
    forever_smile阅读 10,738评论 1 56
  • 思想的深远 秘密的深处 眼睛所不能的窥视 正如大山里流出的一弯清水 源头的去处 影子和泥土混为一体 而这姑娘的深邃...
    零温度阅读 1,716评论 0 1
  • 我的房间,大小没有丈量过,长应有三米半米,宽有两米半,约八平方米。 先看房屋的大床,它占据了很大一部分面积,三平方...
    三凡先生阅读 3,134评论 0 0