JVM运行时数据区详细介绍

JVM是虚构出来的计算机,跨平台运行的关键。不同系统下载不同的JVM 将中间码的class文件处理成各个系统可以识别的语言

JVM的内存结构概念图

在这里插入图片描述
class文件: 是.java编译后的二进制编码文件,运行在JVM中的java程序,可以运行在任何系统的JVM上,不同系统的JVM负责将class文件解析成不同系统的语言识别

程序计数器: 记录当前线程执行的字节码的行号指示器
java虚拟机栈:

  • 生命周期与线程一样,随线程死活
  • Java 方法执行的内存模型,用于存储栈帧。
  • 每一个方法或者说线程在执行的时候都会创建一个栈桢,栈桢存储了局部变量表(方法参数,方法内部的局部变量。八大基本数据类型),操作数栈,动态连接,返回地址。空间默认1M。
  • StackOverflowError :请求的栈深度大于虚拟机所允许的深度
  • OutOfMemoryError :扩展时无法申请到足够的内存

本地方法栈: 同java虚拟机栈作用一样,不同的是服务于Native方法。 Native 方法相当于 C/C++ 暴露给 Java 的一个接口
堆: 是jvm中最大的内存空间,存储了各种类的实例对象
在这里插入图片描述
堆细分为:

  • 新生代: 占据堆区的三分之一,内包含Eden和From、To区,内存比例8:1:1,对象新创建的时候会放心Eden,每一次GC,会将存活下来的对象放入From或者To,保证From和To有一个是空闲。具体解释下面会在GC的相关知识上讲
  • 老年代: 占据堆区的三分之二,存放声明周期较长的对象,比如在新生代多次GC为GC掉的对象会被归置到老年代

java堆配置参数如下:

-Xms:堆内存初始化大小
-Xmx:堆内存最大允许大小
-Xss :每个线程的Stack(堆栈)大小
-XX:newSize:表示新生代初始内存的大小,应该小于-Xms的值
-XX:MaxnewSize:表示新生代可被分配的内存的最大上限;当然这个值应该小于-Xmx的值
-Xmn256m //年轻代内存大小。整个JVM内存=年轻代 + 年老代 + 持久代
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

JDK1.8取消了PermGen,取而代之的是Metaspace,所以PermSize和MaxPermSize参数失效,取而代之的是-XX:MetaspaceSize -XX:MaxMetaspaceSize
-XX:MetaspaceSize=64m 设置metaspace区域的初始值
-XX: MaxMetaspaceSize=128m:设置metaspace区域的最大值

元空间:
JDK1.8以前的HotSpot JVM有方法区,也叫永久代(permanent generation)。
方法区用于存放已被虚拟机加载的类信息、常量、静态变量,即编译器编译后的代码。
元数据区存储内容还是和以前一样不变。

为什么把方法去改成元数据区?
随着动态类加载的情况越来越多,这块内存变得不太可控,如果设置小了,系统运行过程中就容易出现内存溢出OOM,设置大了又浪费内存。改成了元空间之后只有占满了操作系统可用内存后才OOM。

元数据区相关设置参数:

MetaspaceSize:元数据区初始化大小
MaxMetaspaceSize:元数据去最大大小
CompressedClassSpaceSize:默认1G。如果设置了-XX:-UseCompressedClassPointers,或者-Xmx设置大于32G,则这个参数不生效。
MinMetaspaceExpansion
MaxMetaspaceExpansion
MinMetaspaceFreeRatio
MaxMetaspaceFreeRatio
UseLargePagesInMetaspace
InitialBootClassLoaderMetaspaceSize

点击参考以上参数相关详细

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值