JVM优化

文章目录


前言

学习java的我们怎么都离不开虚拟机。如果你是一个工作三年以上的朋友,那么jvm的学习将会是有必要的,许多线上的问题都需要通过理解它来更好的排查。


一、java虚拟机的内存管理

首先来看下虚拟机的五大模块:类加载器,运行时数据区,垃圾回收模块,执行引擎和本地方法接口。

在这里插入图片描述

运行时数据区:
jdk8做了改进,舍弃了方法区(永久代),取而代之的是–原数据区、直接内存(放在本地内存中)

在这里插入图片描述

在这里插入图片描述

下面分别来看下各个模块的功能划分:

模块功能划分
程序计数器当前线程执行的字节码行号指示器,线程私有
本地方法执行native方法 ,线程私有
虚拟机栈用于存储栈帧,每个方法执行都会创建一个栈帧用于存局部变量表、操作数栈等,线程私有
本地方法存放虚拟机栈执行后的方法、常量、静态变量,线程共享
所有对象创建的管理,所以也分为新生代和老年代,线程共享

jdk8中将方法区替换成了元数据区一起来看下:
HotSpots取消了永久代,那么是不是也就没有方法区了呢?当然不是,方法区是一个规范,规范没变,它就一直在,只不过取代永久代的是元空间(Metaspace)而已。

.Q:为啥做这个改变?
A:1.原来的方法区存放的元数据、常量、静态变量大小不固定,容易造成内存溢出。
2.移除永久代是为融合HotSpot VM与 JRockit VM而做出的努力,因为JRockit没有永久代,不需要配置永久代(这个蛮知道下哈哈。。。

相关文章

jinfo 命令可以用来查看 Java 进程运行的 JVM 参数,命令如下...
原文链接:https://www.cnblogs.com/niejunlei/p/5987611.ht...
java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是...
jvm
1.jvm的简单抽象模型:  2.类加载机制     双亲委派模...
堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代...
1.springboot和tomcat2.springcloud的请求如何通过网关鉴权?...