后端知识库(八股文大全 没事的时候再看)_20230303012103.docx

preview
需积分: 0 0 下载量 190 浏览量 更新于2023-03-03 收藏 21.71MB DOCX 举报
后端开发涉及众多知识领域,其中包括Java虚拟机(JVM)的相关概念。本文主要讨论JVM的对象创建过程、内存结构以及常量池。 1. JVM对象创建步骤: - 类加载检查:在创建对象时,JVM会首先确保类已经被加载、解析和初始化。如果未加载,JVM会进行加载。 - 内存分配:根据对象大小在Java堆中划分内存。内存分配有两种策略:指针碰撞(内存规整)和空闲列表(内存不规整)。并发情况下,JVM可能使用CAS(Compare and Swap)算法或本地线程分配缓存(TLAB)来保证线程安全。 - 初始化零值:分配完内存后,所有字段会被初始化为0。 - 设置对象头:记录对象类型、哈希码、GC信息等。 - 执行<init>方法:初始化对象的成员变量,完成对象的实际构造。 2. JVM内存结构: - 程序计数器:每个线程都有自己的计数器,记录当前执行的指令地址。 - 虚拟机栈:每个方法对应一个栈帧,存储局部变量、操作数、动态链接等。栈溢出会导致StackOverflowError。 - 本地方法栈:处理native方法,存储native方法相关的信息。 - 堆:所有线程共享,存放对象实例和数组,是垃圾回收的主要区域。 - 方法区:存储类信息,如Class、静态变量等。JDK 1.8后,方法区被元空间(Metaspace)取代。 3. JVM中的常量池: - Class文件常量池:存在于.class文件中,包含编译时的常量信息。 - 运行时常量池:在运行时可动态添加常量,如String.intern()。 - 全局字符串常量池:JVM维护的字符串引用表,使用Hashtable实现,存储字符串实例的引用。 - 基本类型包装类对象常量池:Byte、Short等基本类型包装类实现了常量池技术,用于优化内存使用。 理解这些基础概念对于后端开发者来说至关重要,它们有助于优化代码性能,避免内存泄漏,以及正确处理并发问题。深入学习JVM的工作原理能够帮助开发者编写更高效、更稳定的代码。