- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AndroidJVM⾯试专题:阿⾥100,android算法⾯试题
我们普通的开发涉及不到JVM,然⽽App性能与它有着千丝万缕的联系,每个App都会有⾃⼰的art虚拟机,甚⾄每⼀个进程都是有⾃⼰独
⽴的虚拟机,内存的回收是由虚拟机来管理的,GC回收算法怎样,adj内存管理,这⼀切都基于虚拟机。
然⽽很多半路出家、甚⾄科班出⾝、⼯作好⼏年的安卓开发者,对JVM的核⼼原理并不了解。接下来这些⼤⼚关于JVM的⾯试题,你能不
能答上来?
1.内存模型以及分区,需要详细到每个区放什么?
JVM 分为堆区和栈区,还有⽅法区,初始化的对象放在堆⾥⾯,引⽤放在栈⾥⾯,class 类信息常量池(static 常量和 static 变量)等放
在⽅法区new:
**⽅法区:**主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字节码)等数据
**堆:**初始化的对象,成员变量 (那种⾮ static 的变量),所有的对象实例和数组都要在堆上分配
**栈:**栈的结构是栈帧组成的,调⽤⼀个⽅法就压⼊⼀帧,帧上⾯存储局部变量表,操作数栈,⽅法出⼝等信息,局部变量表存放的
是 8 ⼤基础类型加上⼀个应⽤类型,所以还是⼀个指向地址的指针
**本地⽅法栈:**主要为 Native ⽅法服务
**程序计数器 :**记录当前线程执⾏的⾏号
2.堆⾥⾯的分区:Eden,survival(from+ to),⽼年代,各 ⾃的特点。
堆⾥⾯分为新⽣代和⽼⽣代(java8 取消了永久代,采⽤了 Metaspace),新⽣代包含 Eden+Survivor 区,survivor 区⾥⾯分为 from
和 to 区,内存回收时,如果⽤的是复制算法,从 from 复制到 to,当经过⼀次或者多次 GC 之后,存活下来的对象会被移动到⽼年区,当
JVM 内存不够⽤的时候,会触发 Full GC,清理 JVM ⽼年区当新⽣区满了之后会触发 YGC,先把存活的对象放到其中⼀个 Survice区,
然后进⾏垃圾清理。
因为如果仅仅清理需要删除的对象,这样会导致内存碎⽚,因此⼀般会把 Eden 进⾏完全的清理,然后整理内存。那么下次 GC 的时候,就
会使⽤下⼀个 Survive,这样循环使⽤。如果有特别⼤的对象,新⽣代放不下,就会使⽤⽼年代的担保,直接放到⽼年代⾥⾯。因为 JVM
认为,⼀般⼤对象的存活时间⼀般⽐较久远。
3.对象创建⽅法,对象的内存分配,对象的访问定位。
new ⼀个对象
4. GC的两种判定⽅法:
**引⽤计数法:**指的是如果某个地⽅引⽤了这个对象就+1,如果失效了就-1,当为 0 就会回收但是 JVM 没有⽤这种⽅式,因为⽆法判定
相互循环引⽤ (A 引⽤ B,B 引⽤ A)的情况
引⽤链法: 通过⼀种 GC ROOT 的对象 (⽅法区中静态变量引⽤的对象等-static 变量)来判断,如果有⼀条链能够到达 GC ROOT 就说
明,不能到达 GC ROOT 就说明可以回收
5. SafePoint是什么
⽐如 GC 的时候必须要等到 Java 线程都进⼊到 safepoint 的时候 VMThread 才能开始执⾏ GC,
1. 循环的末尾 (防⽌⼤
《Android学习笔记总结+最新移动架构视频+⼤⼚安卓⾯试真题+项⽬实战源码讲义》
【/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
循环的时候⼀直不进⼊ safepoint,⽽其他线程在等待它进⼊safepoint)
2. ⽅法返回前
3. 调⽤⽅法的 call 之后
4. 抛出异常的位置
6. GC 的三种收集⽅法:标记清除、标记整理、复制算法的原理与特点,分别⽤在什么地⽅,如果让你优化收集
⽅法,有什么思路?
先标记,标记完毕之后再清除,效率不⾼,会产⽣碎⽚
**复制算法:**分为 8:1 的 Eden 区和 survivor 区,就是上⾯谈到的 YGC
**标记整理:**标记完毕之后,让所有存活的对象向⼀端移动
7. GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
**并⾏收集器:**串⾏收集器使⽤⼀个单独的线程进⾏收集,GC 时服务有停顿时间
**串⾏收集器:**次要回收中使⽤多线程来执⾏
CMS 收集器是基于“标记—清除”算法实现的,经过多次标记才会被清除
G1 从整体来看是基于**“标记—整理”**算法实现的收集器,从局部(两个 Region 之间)上来看是基于“复制”算法实现的
8. Minor GC 与 Full GC 分别在什
原创力文档


文档评论(0)