中国大数据教育领跑者

IT培训上市机构

您现在的位置:首页 > Java培训 > java求职技巧>Java开发面试知识点总结之JVM 内存管理(1)

Java开发面试知识点总结之JVM 内存管理(1)

2018-01-12 18:15:12 作者:魔据大数据学院

Java开发者在面试的时候都可能遇到哪些知识点呢?相信这是很多参加Java技术培训Java初学者都想要知道的问题,今天魔据教育的Java技术培训班就为大家分享一篇Java开发面试知识点总结。今天先给大家分享一下基础知识面试中的JVM 内存管理的第一部分

既然是 Java 开发面试那么对 JVM 的考察当然也是必须的,面试官一般会问你对 JVM 有了解吗?

我通常都会把我所了解的都说一遍,包括:JVM 内存划分、JVM 垃圾回收的含义有哪些 GC 算法,年轻代和老年代各自的特点统统阐述一遍。

Java开发面试知识点总结之JVM 内存管理

Java开发面试知识点总结之JVM 内存管理

1JVM 内存划分:

方法区(线程共享):常量、静态变量、JIT(即时编译器) 编译后的代码也都在方法区;

堆内存(线程共享):垃圾回收的主要场所;

程序计数器: 当前线程执行的字节码的位置指示器;

虚拟机栈(栈内存):保存局部变量、基本数据类型变量以及堆内存中某个对象的引用变量;

本地方法栈 :为 JVM 提供使用 native 方法的服务。

2)类似-Xms-Xmn 这些参数的含义:

答:

堆内存分配:

JVM 初始分配的内存由-Xms 指定,默认是物理内存的 1/64

JVM 最大分配的内存由-Xmx 指定,默认是物理内存的 1/4

默认空余堆内存小于 40% 时,JVM 就会增大堆直到-Xmx 的最大限制;空余堆内存大于 70% 时,JVM 会减少堆直到 -Xms 的最小限制;

因此服务器一般设置-Xms-Xmx 相等以避免在每次 GC 后调整堆的大小。对象的堆内存由称为垃圾回收器的自动内存管理系统回收。

非堆内存分配:

JVM 使用-XX:PermSize 设置非堆内存初始值,默认是物理内存的 1/64

XX:MaxPermSize 设置最大非堆内存的大小,默认是物理内存的 1/4

-Xmn2G:设置年轻代大小为 2G

-XX:SurvivorRatio,设置年轻代中 Eden 区与 Survivor 区的比值。

3)垃圾回收算法有哪些?

答:

引用计数 :原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为 0 的对象。此算法最致命的是无法处理循环引用的问题;

标记-清除 :此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除;

此算法需要暂停整个应用,同时,会产生内存碎片;

复制算法 :此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中;

此算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现碎片问题。当然,此算法的缺点也是很明显的,就是需要两倍内存空间;

标记-整理 :此算法结合了 标记-清除复制两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象 压缩到堆的其中一块,按顺序排放。

此算法避免了标记-清除的碎片问题,同时也避免了 复制算法的空间问题。

相关推荐
[免责声明]本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归原作者所有,如涉及作品内容、版权和其它问题请在30日内与本网联系,我们将在第一时进行处理

值班手机:18501996998

咨询QQ: 226594285 / 428683440

校区地址:北京市海淀区中关村科技园首农蓝海中心C座-7层

全国咨询热线:400-690-5006

点击关注:

魔据教育官方微博

魔据官方微信