Java面试必备:JVM内存与垃圾回收深度解析

版权申诉
5星 · 超过95%的资源 5 下载量 145 浏览量 更新于2024-07-03 2 收藏 13.3MB PDF 举报
"JAVA面试核心知识点整理(283页).pdf" Java面试中涉及的核心知识点广泛而深入,这里主要集中在JVM(Java Virtual Machine)及其内存管理、垃圾回收(Garbage Collection, GC)以及不同类型的引用。以下是这些知识点的详细说明: 1. JVM: JVM是Java程序的运行环境,它负责解释执行字节码并提供运行时环境。JVM的内存区域分为以下几个部分: - 程序计数器:每个线程都有自己的程序计数器,用于存储当前线程执行的指令地址。 - 虚拟机栈:存放方法调用时的局部变量、运算结果等,与方法的执行密切相关,每个线程也有自己的虚拟机栈。 - 本地方法区:为JVM中的JNI(Java Native Interface)调用本地方法(如C/C++)提供支持,线程私有。 - 堆(Heap):所有对象都在堆中分配内存,是线程共享的数据区域,通过GC进行管理。 - 方法区/永久代:存储类信息、常量、静态变量等,Java 8后被元空间(Metaspace)取代。 2. JVM运行时内存分代: - 新生代(Young Generation):新生的对象首先在Eden区分配,经历Minor GC(年轻代GC),幸存下来的对象会被移到Survivor区,并增加年龄。 - 老年代(Old Generation):经过多次Minor GC仍存活的对象会进入老年代。 - 永久代/元空间(Permanent Generation/Metaspace):存储常量池、类信息等非实例对象。 3. 垃圾回收与算法: - 如何确定垃圾:通过引用计数法或可达性分析来判断对象是否可被回收。 - 标记清除算法:标记所有活动对象,然后清除未标记的对象。 - 复制算法:将活动对象复制到一块连续内存,然后清理原区域。 - 标记整理算法:标记后将活动对象向一端移动,然后清理另一端。 - 分代收集算法:根据对象生命周期的不同,采用不同的GC策略,如新生代采用复制算法,老年代采用标记整理算法。 4. 引用类型: - 强引用:最常规的引用,只要强引用存在,对象就不会被GC回收。 - 软引用:在系统内存不足时,会回收软引用对象。 - 弱引用:比软引用更弱,无论内存是否充足,只要GC扫描到,就会回收弱引用对象。 - 虚引用:几乎不提供任何控制,主要用于跟踪对象在GC过程中的状态。 5. GC分代收集算法与分区收集算法: - 分代收集:根据对象的生命周期特性,将堆分为新生代和老年代,分别应用不同的GC算法。 - 分区收集:将堆进一步细分成多个小的连续空间,减少长时间暂停,提高响应速度。 6. GC垃圾收集器: - Serial收集器:单线程,适用于客户端应用,使用复制算法。 - ParNew收集器:Serial收集器的多线程版本,常与CMS(并发标记扫描)配合使用。 - ParallelScavenge收集器:多线程,专注于吞吐量优化,使用复制算法。 - SerialOld收集器:单线程的老年代收集器,使用标记整理算法。 这些知识点是Java面试中常见的话题,理解和掌握它们对于成为一名合格的Java开发者至关重要,特别是在解决性能问题和优化代码时。
2021-06-17 上传
书籍1:互联网 Java 工程师面试题 内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、 Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、 Linux 等技术栈 1、MyBatis 面试题 1、什么是 Mybatis 2、Mybaits 的优点 3、MyBatis 框架的缺点 4、MyBatis 框架适用场合 5、MyBatis 与 Hibernate 有哪些不同? 6、#{}和${}的区别是什么? 7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ? 8、 模糊查询 like 语句该怎么写? 9、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗? 10、Mybatis 是如何进行分页的?分页插件的原理是什么? 11、Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式? 12、如何执行批量插入? 13、如何获取自动生成的(主)键值? 14、在 mapper 中如何传递多个参数? 15、Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql? 16、Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签? 18、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里? 19、 一对一、一对多的关联查询 ? 20、MyBatis 实现一对一有几种方式?具体怎么操作的? 21、MyBatis 实现一对多有几种方式,怎么操作的? 22、Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么? 23、Mybatis 的一级、二级缓存 24、什么是 MyBatis 的接口绑定?有哪些实现方式? 25、使用 MyBatis 的 mapper 接口调用时有哪些要求? 26、Mapper 编写有哪几种方式? 27、简述 Mybatis 的插件运行原理,以及如何编写一个插件 等等 书籍2:JAVA核心知识整理