jdk1.8下jvm虚拟机内存结构

JVM-01 JVM内存结构 文章目录1.JVM整体架构1.1 JVM(虚拟机)1.2 Java虚拟机阵营2.JVM子系统构成3.JVM内存结构3.1 名词解释3.2 JVM对该区域规范了两种异常3.3 实例详解Java栈3.4 栈+堆+方法区的交互关系3.5 堆(线程共享)3.5.1 **为什么jdk1.8用元数据区取代了永久代**?3.5.2 java虚拟机调优的目的3.6 JVM执行案例分析3.6.1 编写java类3.... 阅读详情

前言

前面说了jvm的概念,不太理解的朋友可以看看我上一篇博客,不过jvm也是比较复杂的一个东西,想深入了解看一两篇文章是不够的,可以去看看《深入理解java虚拟机》,这里我带大家来康康jvm的内存结构,中间不乏字数较多熬,毕竟是概念性的东西,嘿嘿嘿

首先我们得知道,jvm运行时数据区域分为五大部分:堆,java虚拟机栈,本地方法区,程序计算器,方法区(jdk1.8版本后叫做元区间,在jdk1.8版本后位置移到了本地内存)。

在这里插入图片描述

不知道大家看到这五个名词第一反应是什么,但是我第一次看到我直接阿巴阿巴,这啥啊,都是干啥的啊,随后我找了一些资料,也有了一些了解。

堆*

堆:该区域是线程共享的,主要用于用于存放对象实例。绝大多数创建的对象都会被存放到这里(除了部分由于逃逸分析而在对外分配的对象,该部分只是在方法体被引用,故被分配到了栈上)。

堆这块区域也是jvm虚拟机中占用最大的,因为我们写项目会写很多类,它们都被放在堆里面,如果java堆空间不足了,程序会抛出OutOfMemoryError异常。因此也是垃圾回收的主要目标。

而堆也划分了几个区域:年轻代(young)、老年代(old)、永久区(permanent 对HotSpot虚拟机而言,JDK1.8之后为metaspace(元区间)替代永久代)。

永久代

JDK1.8之后为metaspace(元区间)替代永久代,它采用永久代的方式来实现方法区,其他的虚拟机实现没有这一概念,而且HotSpot也有取消永久代的趋势,在JDK 1.7中HotSpot已经开始了“去永久化”,把原本放在永久代的字符串常量池移出。永久代主要存放常量、类信息、静态变量等数据,与垃圾回收关系不大,新生代和老年代是垃圾回收的主要区域。

老年代

在新生代中经历了多次(具体看虚拟机配置的阀值)GC后仍然存活下来的对象会进入老年代中。老年代中的对象生命周期较长,存活率比较高,在老年代中进行GC的频率相对而言较低,而且回收的速度也比较慢。
在这里插入图片描述

堆为什么要划分区域?

上面也说了,堆内存是jvm中管理的内存中最大的,也是垃圾回收器最主要的目标,我们所有的对象实例都存放在堆当中,给堆内存分代其实是为了提高对象内存分配和垃圾回收的效率,如果我们不进行区域划分,所有新创建的对象和生命周期很长的对象存放在一起,随着程序的执行,我们需要频繁的对堆内存进行垃圾回收,而每次回收都要遍历所有的对象,遍历这些对象所花费的时间代价是巨大的,这很影响我们程序的性能!

有了内存分代,情况就不同了,新创建的对象会在新生代中分配内存,经过多次回收仍然存活下来的对象存放在老年代中,静态属性、类信息等存放在永久代中,新生代中的对象存活时间短,只需要在新生代区域中频繁进行GC,老年代中对象生命周期长,内存回收的频率相对较低,不需要频繁进行回收,永久代中回收效果太差,一般不进行垃圾回收,还可以根据不同年代的特点采用合适的垃圾收集算法。分代收集大大提升了收集效率,这些都是内存分代带来的好处。

年轻代的堆为什么需要划分区域?

看到上面我粗糙的绘制的图,年轻代的堆也划分了区域,分别是Eden,form survivor,to survivor。

新生成的对象优先存放在新生代中,新生代对象朝生夕死,存活率很低,在新生代中,常规应用进行一次垃圾收集一般可以回收70% ~ 95% 的空间,回收效率很高。

HotSpot将新生代划分为三块,一块较大的Eden(伊甸)空间和两块较小的Survivor(幸存者)空间,默认比例为8:1:1。划分的目的是因为HotSpot采用复制算法来回收新生代,设置这个比例是为了充分利用内存空间,减少浪费。新生成的对象在Eden区分配(大对象除外,大对象直接进入老年代),当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。

复制算法回收新生代的过程:

GC开始时,对象只会存在于Eden区和From Survivor区,To Survivor区是空的(作为保留区域)。GC进行时,Eden区中所有存活的对象都会被复制到To Survivor区,而在From Survivor区中,仍存活的对象会根据它们的年龄值决定去向,年龄值达到年龄阀值(默认为15,新生代中的对象每熬过一轮垃圾回收,年龄值就加1,GC分代年龄存储在对象的header中)的对象会被移到老年代中,没有达到阀值的对象会被复制到To Survivor区。接着清空Eden区和From Survivor区,新生代中存活的对象都在To Survivor区。接着, From Survivor区和To Survivor区会交换它们的角色,也就是新的To Survivor区就是上次GC清空的From Survivor区,新的From Survivor区就是上次GC的To Survivor区,总之,不管怎样都会保证To Survivor区在一轮GC后是空的。GC时当To Survivor区没有足够的空间存放上一次新生代收集下来的存活对象时,需要依赖老年代进行分配担保,将这些对象存放在老年代中。

重点:

如果出现java.lang.OutOfMemoryError: Java heap space异常,说明是Java虚拟机的堆内存不够。原因有二:

1、Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整。
2、代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)。

指路设置参数-Xms、-Xmx:https://jingyan.baidu.com/album/624e7459653ca534e8ba5a26.html?picindex=3

如果出现java.lang.OutOfMemoryError: PermGen space,说明是Java虚拟机对永久代Perm内存设置不够。原因有两个:

1、程序启动需要加载大量的第三方jar包。例如:在一个Tomcat下部署了太多的应用。
2、大量动态反射生成的类不断被加载,最终导致Perm区被占满

程序计算器

每个线程一块,指向当前线程正在执行的字节码代码的行号。如果当前线程执行的是native方法,则其值为null。

java虚拟机栈*

该区域也是线程共享的,该区域也是每个线程所独有的,每当启动一个新线程时,Java虚拟机都会为它分配一个Java栈。Java栈以帧为单位保存线程的运行状态。虚拟机只会直接对Java栈执行两种操作:以帧为单位的压栈和出栈。

某个线程正在执行的方法被称为该线程的当前方法,当前方法使用的栈帧称为当前帧,当前方法所属的类称为当前类,当前类的常量池称为当前常量池。

在这里插入图片描述

**每当线程调用一个Java方法时,虚拟机都会在该线程的Java栈中压入一个新帧。而这个新帧自然就成为了当前帧。**在执行这个方法时,它使用这个帧来存储参数、局部变量、中间运算结果等数据。

如果java栈空间不足了,程序会抛出StackOverflowError异常

Java方法可以以两种方式完成。一种通过return返回的,称为正常返回;一种是通过抛出异常而异常终止的。不管以哪种方式返回,虚拟机都会将当前帧弹出Java栈然后释放掉,这样上一个方法的帧就成为当前帧了。

Java帧上的所有数据都是此线程私有的。任何线程都不能访问另一个线程的栈数据,因此我们不需要考虑多线程情况下栈数据的访问同步问题。当一个线程调用一个方法时,方法的的局部变量保存在调用线程Java栈的帧中。只有一个线程能总是访问那些局部变量,即调用方法的线程。

堆内存与栈内存需要说明

基础数据类型直接在栈空间分配,方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量new出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。方法调用时传入的literal参数,先在栈空间分配,在方法调用完成后从栈空间收回。字符串常量、static在DATA区域分配,this在堆空间分配。数组既在栈空间分配数组名称,又在堆空间分配数组实际的大小。

这是官方的说明,,,

其实,说明白一点,看图吧!

我只做了new方法和直接使用基础数据类型的,引用数据类型其实和new方法的差不多叭,如果使用数组来定义一串字符,即在栈内存分配一个地址空间,在堆内存分配对象区,,,而方法传递的参数,在栈空间分配完后方法调用结束从栈空间收回
在这里插入图片描述

本地方法栈

这个区域是每个线程锁独有的,主要用于VM的Native方法(本地方法)。这部分是有VM自行管理,程序员基本上不需要关系该部分。

方法区

方法区是各个线程共享的区域,存放类信息、常量、静态变量、即时编译器编译后的代码等,垃圾回收器对这块区域的回收主要是针对常量池和类。

总结

还是那句话,看一些文章只能了解jvm的一个大概,如果想深入了解,看书比较好哦,阿巴阿巴,这两天看完jvm这几个知识点,头发又掉了不少呢,个人觉得堆和栈比较复杂,但是理解完也还好哦!献丑了啊哈哈哈有什么不足欢迎指点!一定会改正!有问题也可以留言评论哇,不过可能我不会嘿嘿嘿

最后附上一张用来学习的画图,比我画的清楚一点(caimeiyou):
https://www.processon.com/view/link/5b891cc9e4b0fe81b620b2c0

JVM 内存结构基于JDK1.8【JVM篇三】 在我的上一篇文章别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】中,相信大家已经对java类加载机制有一个比较全面的理解了,那么类加载之后,字节码数据在 Java 虚拟机内存中是如何存放的 ?Java 虚拟机在为类实例或成员变量分配内存是如何分配的 ?是的,这两个问题就涉及到了JVM 内存结构的知识了,那么这篇文章将进行解答。 文章目录1、内存结构还... 阅读详情

相关推荐

深入了解JVM

之前看了一本书《深入理解Java虚拟机》,里面将的主要就是关于Java虚拟机的发展史,Java虚拟机的主要功能介绍,还有其他的关于Java虚拟机底层的东西。 对于Java开发者来说,现在最新的JDK版本应该是JDK12,我们都知道在Java语言是夸平台的,这里的夸平台并不是指Java这个编程语言的夸平台,而是指JVM的夸平台特性。我们在不同的环境上可以使用不同的虚拟机来实现不同的平台上运行Ja...

初学者 2802

JVM-内存区域 堆、方法区,虚拟机栈、程序计数器详解

  JVM 把内存分为若干个不同的区域,这些区域有些是线程私有的,有些则是线程共享的,Java 内存区域也叫做运行时数据区,它的具体划分如下: 虚拟机栈   Java 虚拟机栈是线程私有的数据区,Java 虚拟机栈的生命周期与线程相同,虚拟机栈也是局部变量的存储位置。方法在执行过程中,会在虚拟机栈中创建一个 栈帧(stack frame)。每个方法执行的过程就对应了一个入栈和出栈的过程。 本地方法栈   本地方法栈也是线程私有的数据区,本地方法栈存储的区域主要是 Java 中使用 native 关键字修饰的

ALONG的博客 1412

Linux 系统管理员必备:Chrome 企业版离线部署全攻略(含 RPM/DEB 双版本)

本文详细介绍了Linux系统管理员如何离线部署Chrome企业版,涵盖RPM和DEB双版本。从获取官方离线安装包到静默安装、权限配置及企业级策略管理,提供全流程解决方案,特别适合Ubuntu等DEB系系统管理员参考。

f9g0h的博客 483

JVM内存结构简述(JDK1.8)

JVM的内存结构在JDK1.8有所改变,本文简述JDK1.8的内存结构。

swlimuhao的博客 2127

C51:PWM+舵机角度控制

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.脉冲宽度调制通过占空比编码模拟信号一个周期内,高电平占据时长的百分比如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制。

qq_73379310的博客 3388

matlab 三维绘图 抛光,瓷砖抛光过程建模与仿真

:瓷砖抛 光过程 建模与仿真朱 成 就(广 东工业大学 机 电工程 学院, 广东广州 )摘要 :瓷砖的抛磨影响 因素众 多 ,实际磨削加工时容易出现漏抛 、返抛现象 。对陶瓷抛光机磨头进行运动学分析 ,并基于不 同粒度号 的磨 粒在一定压力下的加工深度模型 ,探讨抛光机磨 头转 速 、横梁摆动频率 、传送速度对瓷砖抛光加工表 面均匀性 的影响,然 后结合 磨削机理使 用 对陶瓷抛光过程进行仿真 ...

weixin_36331058的博客 747

Java进阶之路JVM内存结构(jdk1.8)

一、JVM概述 1.1什么事JVM Java Virtual Machine:Java虚拟机,用来保证Java语言跨平台。 Java虚拟机可以看做是一台抽象的计算机,如同真实的计算机那样,它有自己的指令集以及各种运行时内存区域 Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式(class文件格式所关联) ...

eternally_zh128@sina.com的博客 1733

深度学习中的编码器-解码器架构

解码的作用:转换为人类可理解的形式,解码器的任务是将编码器生成的中间表示(上下文向量)转换回人类可理解的输出形式(如翻译后的文本、生成的图像描述等)。解码器通过逐步生成输出序列,使得最终的输出符合人类的理解和需求。编码的作用:转换为机器可理解的形式,编码器将输入数据(如文本、图像等)转换为一种机器更容易处理和理解的形式,即上下文向量或编码。在深度学习中,编码器(Encoder)解码器(Decoder)是常见的神经网络架构,通常用于处理序列到序列(seq2seq)任务,如机器翻译、文本摘要和图像描述等。

xxk1323的博客 1093

JVM的堆内存模型1.7和1.8对比

JVM的堆内存模型 jvm的堆内存模型在1.7和1.8有较大的区别,下面将对两个版本堆内存模型进行讲解 1. jdk1.7的堆内存模型 jdk1.7堆内存分为三块,新生代,老年代以及永久代 新生代(young):新生成的对象优先存放到新生代中,新生代对象存活率很低,常规应用一次垃圾收集一般可以回收70%~95%的空间。 新生代内存区域被分为三部分,Eden区 和两个Suvivor区(To和Form),默认比例为8:1:1。两个Suvivor区只有From区是被使用的,另一个留做垃圾回收时复制对象

qq_42315935的博客 2057

使用pytorch-superpoint与pytorch-superglue项目实现训练自己的数据集

superpoint与superglue的组合可以实现基于深度学习的图像配准,官方发布的superpoint与superglue模型均基于coco数据训练,与业务中的实际数据或许存在差距,为此实现基于开源的pytorch-superpoint与pytorch-superglue项目实现训练自己的数据集。然而,在训练pytorch-superpoint有诸多细节需要优化,特此整理成技术文档。本文档描述了实验pytorch-superpoint与pytorch-superglue项目训练自己的图像配准模型。

a486259的博客 9504

用 SQL Trace 透视 SAP HANA 执行链路:从会话层到内部语句,一次把性能问题抓个现行

摘要:SAP HANA 的 SQL Trace 是性能分析和故障定位的关键工具,它记录会话层所有执行的 SQL 语句。文章解释了 SQL Trace 的工作原理、使用场景和配置方法,包括图形界面和 SQL 命令两种启用方式。重点讨论了存储过程内部语句的捕获问题,指出需要通过设置 internal 参数才能获取过程体中的详细 SQL 语句。文章还提供了实用的排查建议,强调要精准控制 Trace 范围,避免生成过大文件。最后通过真实案例展示了如何利用 SQL Trace 快速定位性能问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1041

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

墨鸦的博客 4万+

133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能

《Vue3+OpenLayers实现多边形绘制与区域处理》摘要:本文介绍如何基于Vue3+OpenLayers+ol-ext实现地图多边形交互功能。核心功能包括:鼠标绘制任意多边形、拖动顶点编辑边界、遮罩显示(非选区变红)、选区剪切显示及功能重置。技术方案采用OpenLayers处理地图渲染,ol-ext实现高级遮罩/剪切效果,ElementPlus提供UI控件。该方案适用于城市规划、园区展示等需要区域标记的场景,完整代码展示了从初始化、绘制、编辑到特效处理的全流程实现。

小彭的博客 959

深入理解Java虚拟机之(二):jdk1.7和jdk1.8 JVM管理的内存结构

一、java代码编译执行过程(粗略介绍)  1.源码编译:通过Java源码编译器将Java代码编译成JVM字节码(class文件)     2.类加载:通过ClassLoader及其子类来完成JVM的类加载     3.类执行:字节码被装入内存,进入JVM虚拟机(由虚拟机进行内存分配),被解释器解释执行 二:JVM内存...

weixin_41987908的博客 1220

YOLO26涨点改进 | 全网独家首发 主干改进篇 | TGRS 2025 | RepViT-TD,告别庞大骨干!YOLO26 + RepViT-TD轻量又强大,实现更快更准的小目标检测!

本文提出将RepViT-TD轻量级主干网络应用于YOLO26目标检测框架,以提升小目标检测性能。RepViT-TD通过优化计算资源分配,强化前两层高分辨率特征提取能力,在保持轻量化的同时(仅4.85M参数)显著提升微小目标的检测精度(AI-TODv2数据集AP50达54.6%)。文章详细介绍了三种主干改进方案(RepVit_ldy1/2/3)的代码实现,并提供了完整的YAML配置文件修改指南,使模型能高效部署于边缘设备。实验表明,该方法在计算复杂度(38.19G FLOPs)和检测精度间取得了良好平衡。

Ai缝合怪、助力小伙伴高效发论文 328

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JDK1.8 JVM运行时数据区域划分

一、JDK1.8 JVM内存模型概览 这里介绍的是JDK1.8 JVM内存模型。1.8同1.7比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存。 二、各区域介绍 1. 程序计数器 每个线程一块,指向当前线程正在执行的字节码代码的行号。如果当前线程执...

bruce128的专栏 5万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

JVM运行时数据区——JDK1.7、JDK1.8

一、运行时数据区 1、程序计数器 程序计数器是一个较小的内存空间,是线程私有的且不发生OOM,它记录的是当前线程字节码指令的行号。 由于JAVA虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,一个处理器只会执行一条线程中的指令。所以,为了线程切换时恢复到正确的位置执行,每个线程都有自己的一个程序计数器来记录字节码指令的行号。 如果正在执行的是JAVA方法,则程序计数器的值为字节码指令的行号;如果是Native方法,则程序计数器的值为空。 2、虚拟机栈 虚拟机栈也是线程私有的,它的生命周

小白学编程~ 1150

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JVM(1)——运行时内存结构

读《深入Java虚拟机》的时候,第一章就是描述JVM在内存上的结构模型,特此记录整理。(图暂时借一下YSOcean的,稍后用自己画的替换)。 4. JVM运行时内存结构(内存结构模型) java虚拟机规范定义的运行时数据区: 最大的的一块是堆,属于线程公有的区域,用来存放对象实例。 栈分为本地方法栈,以及虚拟机栈,是线程私有的,分别用于调用native方法和java方法。每次调用方法的时候,...

Aviato 193

Java底层基础-JVM内存结构

待补充

Huang1178387848的博客 270

JVM结构

线程私有的(每个线程都有一个自己的程序计数器),是一个指针.代码运行,执行命令.而每个命令都是有行号的,会使用程序计数器来记录命令执行到多少行了.记录代码执行的位置.线程私有的(每个线程都有一个自己的本地方法栈),和Java虚拟机栈类似,Java虚拟机栈加载的是普通方法,本地方法加载的是native修饰的方法.线程私有的(每个线程都有一个自己的Java虚拟机栈)( java 开启一个线程都会开启一个虚拟机栈,默认大小是1M)markWord 数据结构。

lcl020809的博客 229

JVM之JVM运行时内存结构, JDK1.7 JVM内存结构, JDK1.8 JVM内存结构, JVM堆内存结构

1. JVM内存图 1.1 JDK1.7 JVM内存图 程序计数器: 线程私有的(每个线程都有一个自己的程序计数器), 是一个指针. 代码运行, 执行命令. 而每个命令都是有行号的,会使用程序计数器来记录命令执行到多少行了. Java虚拟机栈: 线程私有的(每个线程都有一个自己的Java虚拟机栈). 一个方法运行, 就会给这个方法创建一个栈帧, 栈帧入栈执行代码, 执行完毕之后出栈(弹栈) 本地方法栈: 线程私有的(每个线程都有一个自己的本地方法栈), 和Java虚拟机栈类似, Java虚拟机栈加载

啊策策大数据社区 887

JVM详解(对象内存布局,markWord 数据结构,JDK1.8 JVM 内存结构,堆内存结构(年轻代,年老代),GC垃圾回收,JVM调优参数,垃圾回收器)

markWord 数据结构。

zhzjn的博客 1160

JVM 内存结构(jdk8)

基于JDK1.8的JVM 内存结构 在我的上一篇文章别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】中,相信大家已经对java类加载机制有一个比较全面的理解了,那么类加载之后,字节码数据在 Java 虚拟机内存中是如何存放的 ?Java 虚拟机在为类实例或成员变量分配内存是如何分配的 ?是的,这两个问题就涉及到了JVM 内存结构的知识了,那么这篇文章将进行解答。 @ 目录 1、内存结构还是运行时数据区? 2、运行时数据区 3、线程共享:.

来自菜鸟的摸索 1088

JVM内存结构->看这篇文章就够了

JVM的内存结构知识整理

Java怎么写的博客 162

JVM 内存结构|1.7 1.8 区别详解

目录 概述 JVM内存分配 各个分区介绍 1.7和1.8区别 概述 字节码文件生成:首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。 在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。因此,在Java中我们常常说到的内存管理.

一名路过的小码农啊 5805

静态方法多次调用内存_JVM内存结构图(1.8之后发生了什么)

JDK1.8之前JVM1.8之前主要由五个部分组成:线程共享堆:主要存储实例对象,GC的主要活动区域。方法区:主要存储类的原始信息,静态方法,类,属性,运行时常量池,即时编译,常量等信息线程私有程序计数器:指向当前线程正在执行的字节码的地址和行号,线程抢夺CPU时间片的现场。虚拟机栈:里边包含多个栈帧,每个栈帧就是一个方法,栈帧记录着{局部变量表、方法出口、操作数栈}本地方法栈:JVM调用本地方法...

weixin_39737368的博客 176
上一篇: JVM虚拟机概念
下一篇: layUI树形菜单后端动态加载数据和遇到的bug
Jiang呀
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值