文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【最新Android高级面试知识点干货分享(三)】

2022-06-06 14:09

关注

【最新Android高级面试知识点干货分享(二)】
转载请说明出处

七、Java运行时数据区 与 JVM内存模型

优秀博文推荐:https://www.cnblogs.com/czwbig/p/11127124.html

$7.1、Java运行时数据区

在JDK8以前,Java运行时数据区域具体分为以下五块:

程序计数器(程序寄存器/PC寄存器Program Count Register):每个新开的线程都会有自己的PC。 栈(Java栈/堆栈Stack):用来存储对像的引用,基本类型的数据。优点:存取速度快,仅次于寄存器,栈数据可以共享。缺点:存在栈中的数据大小与生存期必须是确定的。 本地方法栈(Native Stack): 方法区(Method Area):JVM会将二进制class文件的类型信息(类信息、常量,静态变量)放到方法区中,所有线程共享。此区域会开辟一块特殊的空间做”常量池“ 堆(Heap):用来存储对像实例。也叫GC堆,垃圾回收器主要是对此进行回收。堆是运行时动态分配内存。优点:灵活,因为动态分配内存。缺点:存取速度比栈慢

JDK8后(图片来源于网络):
image

$7.2、JVM内存模型

Java内存模型(图片来源于网络):

image

主内存与工作内存的交互流程:
lock(锁定)—>unlock(解锁)---->read(读取主内存变量)---->load(将从主内存读取的变量载入至工作内存)—>use(在工作内存中使用此变量)---->assign(在工作内存中进行赋值操作)---->store(存储,把工作内存的变量传递给主内存)---->write(将从工作内存中得到的变量写入主内存变量中)

volatile关键字,就是用于确保这些变量在主内存到工作内存或工作内存到主内存的流程是完整的,确保数据的同步性。

八、 Java垃圾回收机制

像这些知识点,有时间的话,推荐阅读一下《深入理解Java虚拟机》。
下面这些是针对垃圾回收机制面试题的知识要点。

确定一个对象可被回收的算法:【引用计数法】、【可达性分析算法】(又叫GC_Root,根据引用链查找,跟GC_Root无关联的,将被回收) 垃圾收集算法:标记清除算法(对有引用的对象进行标记,清除未标记的对象)、复制算法、标记整理算法(先标记,再进行碎片整理)、分代收集算法(新生代、老年代、永久代) 根据分代收集算法,垃圾回收有2种类型: Minor GC(针对新生代,不会影响老年代,主要是回收刚创建没多久的对象,Minor GC比较频繁,速度快,效率高) Full GC(又称Major GC,是对整个堆进行回收,包括新生代,老年代,永久代,速度慢,效率低) 九、 Java多线程 $9.1、 Excutor、ExcutorService、Excutors的区别 Excutor为父类接口; ExcutorService为Excutor的子类接口,一般都是用ExcutorService; Excutors为工厂类,用来获取ExcutorService实例。 $9.2、 ThreadPoolExcutor自定义线程池 $9.2.1、 线程池参数 corePoolSize:核心线程池数量(即使线程处于空闲状态,线程也不会被回收) maximumPoolSize:线程池中允许的最大线程数 keepAliveTime:线程池中除核心线程外,其他线程允许的最长空闲时间,时间一到就会被回收 workQueue:线程池所使用的任务缓冲队列 RejectedExecutionHandler:线程池对拒绝任务的处理策略 AbortPolicy:为线程池默认策略。丢弃/中止任务,并抛出RejectedExecutionException异常; DiscardPolicy:丢弃任务,不会抛出异常。 DiscardOldestPolicy:丢弃执行队列中最老的任务,为当前提交的任务腾出空间 CallerRunsPolicy:直接由提交者执行所提交的任务。 $9.2.2、 核心线程数的配置

按照程序是【CPU密集型】(又称计算密集型)还是【IO密集型】分:

CPU密集型:核心线程数 = CPU核数 + 1

IO密集型: 核心线程数 = CPU核数*2

  注意:有时间且愿意钻研的同学,可以看下《Java 虚拟机并发编程》
十、 JVM类加载

同样推荐有时间阅读《深入理解Java虚拟机》
作为面试知识要点,我只是简单的记录了下类加载过程,还有参考博客。并没有做深入研究。

JVM把描述类的数据的Class文件(Class对象在堆中创建,而class二进制文件及其他类信息放在方法区)加载进内存,并对数据进行校验、转换解析与初始化的过程。

image
(图片来源于网上)
参考资料:https://www.cnblogs.com/czwbig/p/11127222.html

下一篇开始正式分享我的面试笔记《Android篇》

安静的Sunny 原创文章 80获赞 34访问量 17万+ 关注 私信 展开阅读全文
作者:安静的Sunny


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯