栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM面试总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM面试总结

1. java内存模型

线程私有

    虚拟机栈:局部变量表、操作数栈、指向常量池的指针pc计数器:存放下一次操作地址本地方法栈:C帧,执行本地方法(C语言写的方法)

线程共享

    堆:用来存创建对象用的方法区:类的数据

2. java执行器

类加载器把字节码加入到jvm,类装载子系统就会对字节码进行,验证、准备、识别,如果正确之后就初始化(静态变量与原来的值被指配与静态块被执行)

3. GC垃圾回收

jvm垃圾回收是按分代回收,
新生代:老年代 = 1 : 2
新生代的话又分 = Eden : survivor to : survivor = 8:1:1
新生代: 存活率低,复制算法,对半分浪费空间,在细分,浪费1/10
老年代:存活率高,采取标记整理法回收。 jdk1.8移除了永久代,采用元空间,直接内存,原因永久代分配内存问题,太大浪费,太小OOM。

参数描述
-Xmn设置新生代堆空间
-Xms设置最小堆空间
-xmx设置最大堆空间
-XX:metaspaceSize设置元空间
-XX:MaxmetaspaceSize设置最大元空间

5.垃圾回收器

新生代收集器(复制算法):Serial、ParNew、Parallel Scavenge 老年代收集器:Serial Old(标记-整理)、CMS(标记-清除)、Par Old(标记-整理) 整堆收集器:G1(一个Region: 标记-清除,Region之间:复制算法)

    Serial: 单线程,高效(与其他收集器的单线程相比),Stop The World。Serial Old:单线程,标记-整理,JDK1.5 与 Parllel ScavengeCMS:最短回收停顿时间为目标的收集器,基于标记-清除算法,并发收集、低停顿。Par New:是Serial的多线程版本,默认开启线程数与CPU相同,也可以通过-XX:ParallelGCThreads来限制垃圾回收的线程数;Parallel Scavenge: 与吞吐量密切相关,因此也称为吞吐量优先收集器,GC自适应调节策略(开关开启时,可以不用手动设置,新生代大小,Eden与survivor的比例,以及晋升老年代的年龄等,虚拟机会根据运行状况收集性能监控信息,动态设置这些参数,来提供最优的停顿时间和最高的吞吐量)。Parallel Old:是Parallel Scavenge的老年待版本,多线程,采用标记-整理算法。G1: 并行与并发,充分利用多cpu、多核环境下的硬件优势,来缩短Stop The World停顿时间,G1能够独立管理整个java堆,分代收集,内存分区,空间整合,可预测停顿。 (JDK1.8 内存为16G的情况下推荐使用G1回收器)

6. 说一下堆栈的区别?

物理地址
堆的物理地址分配对对象是不连续的。因此性能慢些 栈使用的是数据结构中的栈,先进后出的原则,物理地址分配是连续的。所以性能快。

存放内容
栈存放局部变量,操作数栈,返回结果 堆存放的是对象的实例和数组

可见性: 堆对于整个应用程序都是共享、可见的。 栈只对于线程是可见的。所以也是线程私有。他的生命周期和线程相同。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号