微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM优化

文章目录


前言

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


一、java虚拟机的内存管理

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐