JVM优化
作者:互联网
文章目录
前言
学习java的我们怎么都离不开虚拟机。如果你是一个工作三年以上的朋友,那么jvm的学习将会是有必要的,许多线上的问题都需要通过理解它来更好的排查。
一、java虚拟机的内存管理
首先来看下虚拟机的五大模块:类加载器,运行时数据区,垃圾回收模块,执行引擎和本地方法接口。
运行时数据区:
jdk8做了改进,舍弃了方法区(永久代),取而代之的是–原数据区、直接内存(放在本地内存中)
下面分别来看下各个模块的功能划分:
模块 | 功能划分 |
---|---|
程序计数器 | 当前线程执行的字节码行号指示器,线程私有 |
本地方法栈 | 执行native方法 ,线程私有 |
虚拟机栈 | 用于存储栈帧,每个方法执行都会创建一个栈帧用于存局部变量表、操作数栈等,线程私有 |
本地方法区 | 存放虚拟机栈执行后的方法、常量、静态变量,线程共享 |
堆 | 所有对象创建的管理,所以也分为新生代和老年代,线程共享 |
jdk8中将方法区替换成了元数据区一起来看下:
HotSpots取消了永久代,那么是不是也就没有方法区了呢?当然不是,方法区是一个规范,规范没变,它就一直在,只不过取代永久代的是元空间(Metaspace)而已。
.Q:为啥做这个改变?
A:1.原来的方法区存放的元数据、常量、静态变量大小不固定,容易造成内存溢出。
2.移除永久代是为融合HotSpot VM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代(这个蛮知道下哈哈。。。
标签:堆外,对象,虚拟机,回收,线程,内存,JVM,优化 来源: https://blog.csdn.net/weixin_54604802/article/details/118416481