JVM运行时数据区

JVM是JavaVirtualMachine的缩写,用于执行Java字节码。它包括程序计数器、虚拟机栈、Java堆和元空间等内存区域,其中堆和元空间为线程共享,其他区域线程私有。程序计数器记录字节码执行位置,虚拟机栈处理方法调用,堆存储对象实例,元空间存放类的信息。内存溢出发生在堆内存无法扩展时,可通过调整JVM参数如-Xms、-Xmx来控制内存大小。
摘要由CSDN通过智能技术生成

JVM是什么

定义:
JVM是Java Virtual Machine(Java虚拟机)的缩写,是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制。
可以将JVM理解为是一个运行字节码的平台。
作用:

  • 提供Java的运行环境
  • 加载代码、验证代码、执行代码
  • 垃圾回收

JVM整个运行原理图

在这里插入图片描述
元空间(JDK1.7,方法区、JDK1.6永久代)

JVM的内存结构划分

加载进来的.class字节码文件、代码执行创建的对象、代码执行调用方法,方法中有变量等数据需要一个地方存放,所以JVM划分出了几个区域,用于存放这些信息;hotspot
在这里插入图片描述
在JDK1.8之前,元空间就是原来的方法区(永久代);

  • 堆、元空间(方法区)是线程共享的;
  • 其他区域是线程私有的;

程序计数器 的特点及作用

1、程序计数器是一块较小的内存空间,几乎可以忽略;
2、是当前线程所执行的字节码的行号指示器;
3、Java多线程执行时,每条线程都有一个独立的程序计数器,各条线程之间计数器互不影响;
4、该区域是“线程私有”的内存,每个线程独立存储;
5、该区域不存在OutOfMemoryError;
6、无GC回收;(随着线程结束而销毁)

虚拟机栈的特点及作用

一个方法一个栈帧
在这里插入图片描述
1、线程私有;
2、方法执行会创建栈帧,存储局部变量表等信息;
3、方法执行入虚拟机栈,方法执行完出虚拟机栈;(先进后出)
4、栈深度大于虚拟机所允许StackOverflowError;
5、栈需扩展而无法申请空间OutOfMemoryError(比较少见);hotspot虚拟机没有;
6、栈里面运行方法,存放方法的局部变量名,变量名所指向的值(常量值、对象值等)都存放到堆上的;
7、栈一般都不设置大小,栈所占的空间其实很小,可以通过-Xss1M进行设置,如果不设置默认为1M;
8、随线程而生,随线程而灭;
9、该区域不会有GC回收;

Java堆的特点及作用

在这里插入图片描述
1、线程共享的一块区域;
2、虚拟机启动时创建;
3、虚拟机所管理的内存中最大的一块区域;
4、存放所有实例对象或数组;
5、GC垃圾收集器的主要管理区域;
6、可分为新生代刚刚创建的对象、老年代;
7、新生代更细化可分为Eden、From Survivor、To Survivor,Eden:Survivor = 8:1:1
8、可通过-Xmx(设置堆的最大内存)、-Xms (设置堆的最小内存)调节堆大小;
9、无法再扩展java.lang.OutOfMemoryError: Java heap space
10、如果从分配内存的角度看,所有线程共享的Java堆中可以划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB),以提升对象分配时的效率;

JVM什么情况下会发生堆内存溢出

Java堆中用于储存对象,只要不断地创建对象,并且保持GC Roots到对象之间有可达路径
来避免垃圾回收机制清理这些对象,那么随着对象数量的增加,总容量达到最大堆的容量限制后就会产生内存溢出;
MAT工具分析xxx.hprof文件,排查溢出的原因;

-Xms3072M 最小堆的大小
-Xmx3072M 是最大堆的大小 
-Xmn1536M 设置年轻代大小
-Xss1M  设置每个线程的堆栈大小
-XX:-UseCompressedClassPointers
-XX:MetaspaceSize=256M
-XX:MaxMetaspaceSize=256M 
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=5
-XX:PretenureSizeThreshold=1M
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:d:/dev/gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=d:/dev/heapdump.hprof
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值