1- JVM内存管理
1.1 JVM整体架构
JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。
部分特征
名称 | 特征 | 配置参数 | 异常 |
---|---|---|---|
程序计数器 | 占用内存小,线程私有,生命周期与线程相同。 | 无 | 无 |
虚拟机栈 | 线程私有,生命周期与线程相同,使用连续的内存空间。 | -Xss | StackOverflowError/ OutOfMemoryError |
堆 | 线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址。 | -Xms -Xsx -Xmn | OutOfMemoryError |
方法区 | 线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址。 | -XX:PermSize:16M- XX:MaxPermSize64M/- XX:MetaspaceSize=16M- XX:MaxMetaspaceSize=64M |
OutOfMemoryError |
本地方法栈 | 线程私有。 | 无 | StackOverflowError/ OutOfMemoryError |
JVM 调优
所谓JVM的调优,其实就是在调堆区+ 方法区域,而且99%情况下都在调堆。 栈有个栈帧,用完就释放内存。
1.2 JVM模块
JVM分为五大模块:类装载器子系统 、运行时数据区 、 执行引擎 、本地方法接口 和 垃圾收集模块 。