JVM 面试题及答案 在 Java 虚拟机(JVM)中,内存区域是非常重要的一部分。JVM 中的内存区域主要包括堆、元空间、Java 虚拟机栈、本地方法栈、程序计数器等。其中,堆是占用内存最大的一块区域。 堆(Heap) 堆是 JVM 中的主要内存区域,是共享的,是占用内存最大的一块区域。我们平常的-Xmax、-Xms 等参数,就是针对于堆进行设计的。堆是用于存储对象和数组的内存区域,是 JVM 中最重要的内存区域。 虚拟机栈(Java Virtual Machine Stack) 虚拟机栈是基于线程的,用来服务字节码指令的运行。每个线程都有自己的虚拟机栈,用于存储局部变量、方法参数、返回值等信息。 程序计数器(Program Counter) 程序计数器是当前线程所执行的字节码的行号指示器。它是 JVM 中的一种内存区域,用于记录当前执行的字节码的位置。 元空间(Meta Space) 元空间是方法区就在这里,非堆本地内存区域。它用于存储类的元数据,如类的字段、方法等信息。 Java 内存模型(Java Memory Model,JMM) JMM 是 JVM 试图定义一种统一的内存模型,能将各种底层硬件及操作系统的内存访问差异进行封装,使 Java 程序在不同硬件及操作系统上都能达到相同的并发效果。它分为工作内存和主内存,线程无法对主存储器直接进行操作。JMM 是 Java 并发的基础,它的定义将直接影响多线程实现的机制。 垃圾回收(Garbage Collection) JVM 采用的是可达性分析算法。JVM 是通过 GC Roots 来判定对象的存活的。从 GC Roots 向下追溯、搜索,会产生一个叫做 Reference Chain 的链条。当一个对象不能和任何一个 GC Root 产生关系,就判定为垃圾。 GC Roots GC Roots 大体包括: 1. 活动线程相关的各种引用,比如虚拟机栈中栈帧里的引用。 2. 类的静态变量的引用。 3. JNI 引用等。 JVM 参数配置 在 JVM 中,我们可以使用-XX:+PrintFlagsFinal 参数来查看 JVM 系统默认值。这个默认值还和垃圾回收器有关,比如 UseAdaptiveSizePolicy。 常用的 JVM 参数配置有: * -Xms:初始化大小内存,默认为物理内存的 1/64。 * -Xmx:最大分配内存,默认物理内存的 1/4。 * -Xss:设置单个线程栈的大小,一般默认为 512K~1024K。 * -XX:MetaSpaceSize:设置元空间大小,一般不需要改动。 JVM 的内存区域和垃圾回收机制是非常重要的,它们直接影响着 Java 程序的性能和稳定性。
剩余19页未读,继续阅读
- 粉丝: 120
- 资源: 1689
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助