AndroidJVM面试专题:阿里100,android算法面试题.pdfVIP

AndroidJVM面试专题:阿里100,android算法面试题.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

132****6651 + 关注
实名认证
文档贡献者

初中毕业生

1亿VIP精品文档

相关文档