JAVA虚拟机-JVM

了解类加载的完整过程吗?

  • 类加载过程可以分为加载、链接和初始化三个阶段,其中链接阶段可以划分为验证、准备和解析三个子阶段。
  1. 在加载阶段,类加载器负责查找类的字节码文件并将其加载到内存中。
  2. 链接(Linking) 包含三个子阶段:验证、准备、解析
    • 验证(Verification):在验证阶段,会确保加载的类文件格式正确,并且不包含不安全的构造。
    • 准备(Preparation):在准备阶段,在内存中为类的静态变量分配内存空间,并设置默认初始值。
    • 解析(Resolution):在解析阶段,会将类、接口、字段和方法的符号引用解析为直接引用,也就是内存地址。
  3. 在初始化阶段,执行类的静态初始化代码,包括静态字段的赋值和静态代码块的执行。静态初始化在类的首次使用时进行,可以是创建实例、访问静态字段或调用静态方法。

类初始化时,静态代码块、静态常量、复合函数的执行顺序是什么?

  1. final static作为编译期常量在编译时会被存入调用类的常量池,类加载阶段中的链接阶段进行内存分配与赋值;
  2. 静态变量的赋值和静态代码块则是在初始化阶段执行,二者的执行顺序是代码编写的先后顺序;
  3. 复合函数(静态方法)属于方法调用,静态方法不会在类初始化阶段自动执行,如果静态变量通过调用静态方法赋值,此时方法会随变量赋值执行。

请讲解JVM的内存结构?

  1. JVM内存结构(运行时数据区)可以分为Java虚拟机栈、堆、方法区、本地方法栈和程序计数器五个部分。在JDK8之前,方法区通过永久代实现,JDK8及以后,永久代被元空间取代。
  2. 其中堆和方法区是线程共享的,虚拟机栈、程序计数器和本地方法栈是线程私有的。
  3. Java虚拟机栈存储方法执行时的栈帧,用来存储局部变量、操作数栈动态链接和返回地址,每个线程的虚拟机栈生命周期和线程相同;堆存放对象的实例和数组,是垃圾回收的主要区域;本地方法栈登记本地方法,管理本地方法的调用;程序计数器记录当前线程执行的字节码指令地址;方法区保存已经被加载的类信息、静态变量和即时编译后的代码等数据,关闭JVM后释放。

常见的垃圾回收器有哪些?

  1. Serial:新生代单线程收集器,使用复制算法,简单高效
  2. Serial Old:老年代单线程收集器,使用标记-整理算法
  3. ParNew:新生代并行收集器,使用复制算法,在多核CPU环境下比Serial好
  4. Parallel Scavenge收集器:新生代并行收集器,使用复制算法,追求高吞吐量。
  5. Parallel Old收集器:老年代并行收集器,使用标记-整理算法,吞吐量优先。
  6. CMS(Concurrent Mark Sweep) 收集器:老年代并行收集器,使用标记-清除算法,以获取最短回收停顿时间为目标的收集器,具有高并发、低停顿的特点,追求最短GC回收停顿时间。
  7. G1收集器:Java堆并行收集器,使用标记-整理算法,不会产生内存碎片。

了解JVM的相关参数吗?请举例说明。

JVM参数为JVM运行提供配置依据,可以对内存分配、垃圾回收、日志等方面进行配置,为不同的业务场景选择合适的参数。

  1. 进行内存配置时可以使用-Xms和-Xmx设置堆内存的初始值和最大值;-Xmn设置新生代大小,-XX:NewRatio设置老年代与新年代比例;
  2. 进行垃圾回收时可以使用-XX:+UseParallelGC、-XX:+UseConcMarkSweepGC、-XX:+UseG1GC等参数进行垃圾回收器的选择。
  3. 关于日志可以使用-XX:PrintGCDetails打印GC详细信息,使用-XX:PrintGCDateStamps打印GC日期和时间,还可以使用-Xloggc:/path/to/gc-%t.log打印GC日志到指定文件。%t表示当前时间。
  4. JVM参数也可以处理OOM异常,使用-XX:+HeapDumpOnOutOfMemoryError可以在OOM时自动生成堆快照,使用-XX:HeapDumpPath=/path/to/heapdump.hprof可以指定堆快照文件路径。
相关推荐
一个处女座的程序猿O(∩_∩)O2 小时前
Python多重继承详解
开发语言·python
SmartBrain2 小时前
技术总结:VLLM部署Qwen3模型的详解
开发语言·人工智能·算法·vllm
玄〤2 小时前
枚举问题的两大利器:深度优先搜索(DFS)与下一个排列(Next Permutation)算法详解(Java版本)(漫画解析)
java·算法·深度优先·dfs
wuqingshun3141592 小时前
HashMap的长度为什么是2的N次方呢?
java·开发语言·jvm
白太岁2 小时前
C++:(4) 内存布局、编译流程、关键字及其链接性
c语言·汇编·jvm·c++
岱宗夫up2 小时前
【前端基础】HTML + CSS + JavaScript 基础(二)
开发语言·前端·javascript·css·架构·前端框架·html
indexsunny2 小时前
互联网大厂Java面试实录:Spring Boot与微服务在电商场景中的应用
java·jvm·spring boot·微服务·面试·mybatis·电商
予枫的编程笔记2 小时前
【Kafka基础篇】Kafka高可用核心:ISR机制与ACK策略详解,吃透可靠性与吞吐量权衡
java·kafka·消息队列·高可用·分布式系统·isr机制·ack策略
时72 小时前
Java 版本管理工具:Jabba
java