精华内容
下载资源
问答
  • 在我的上一篇文章别翻了,这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析【JVM篇二】中,相信...是的,这两个问题就涉及到了JVM 内存结构的知识了,那么这篇文章将进行解答。@1、内存结构还是运行时...

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

    @

    1、内存结构还是运行时数据区?

    要解答本篇上面的这些问题,我们首先需要了解一下 Java 虚拟机的内存结构。

    从某一角度来说,Java 虚拟机的内存结构 == 运行时数据区,在《Java 虚拟机规范》中用的是【运行时数据区】术语的,并没有内存结构这么一说法。内存结构只是听着更加贴切,更加形象,因此知道内存结构就是运行时数据区的意思就好了!也没必要钻牛角尖纠结这个问题~

    2、运行时数据区

    JVM被分为三个主要的子系统:类加载器子系统、运行时数据区和执行引擎 。而今天的这篇文章主要讲解其中的运行时数据区(Runtime Data Areas)

    6422795210912307f4956a9d08bd9791.png

    在 Java 虚拟机规范中,定义了五种运行时数据区,分别是 Java 堆、方法区、虚拟机栈、本地方法区、程序计数器 !

    顺道提一句运行时常量池也会进入方法区,也就是说方法区中就已经包括了常量池。

    特别注意其中Java 堆和方法区是 线程共享的。其他都是 线程私有的。

    9ee99f75e03279e9e63648ce8684879c.png

    3、线程共享:Java堆、方法区

    我们首先来了解了解一下线程共享的Java堆和方法区!

    3.1、Java堆

    Java 堆是所有线程共享的,它在虚拟机启动时就会被创建

    Java 堆是内存空间占据的最大一块区域了,Java 堆是用来存放对象实例及数组,也就是说我们代码中通过 new 关键字 new 出来的对象都存放在这里。所以这里也就成为了垃圾回收器的主要活动营地了,于是它就有了一个别名叫做 GC 堆,并且单个 JVM 进程有且仅有一个 Java 堆。根据垃圾回收器的规则,我们可以对 Java 堆进行进一步的划分,具体 Java 堆内存结构如下图所示:

    d7d34dd88d6bc7e75d1053f77f220f3f.png

    从上图可以看出Java 堆并不是单纯的一整块区域,实际上java堆是根据对象存活时间的不同,Java 堆还被分为年轻代、老年代两个区域,年轻代还被进一步划分为 Eden 区、From Survivor 0、To Survivor 1 区。并且默认的虚拟机配置比例是Eden:from :to = 8:1:1 。简单来说就是:

    Java堆 = 老年代 + 新生代

    新生代 = Eden + S0 + S1

    默认Eden:from :to = 8:1:1

    仔细看过上面的 Java 堆结构图童鞋可能会发现了-Xms和-Xmn的字样,是的这个正是控制堆的JVM的参数,实际上我们是可以通过JVM参数动态控制 Java 堆中的各空间大小的,关于JVM的参数是有很多的,但是常用的也就那么几个,不多的,用的多了都会很容易记住的,下面我们来讲讲关于堆的JVM常见的参数:

    -Xms: 堆容量初始大小(堆包括新生代和老年代)。 例如:-Xms 20M

    -Xmx: 堆总共(最大)大小。 例如:-Xmx 30M

    注意:建议将 -Xms 和 -Xmx 设为相同值,避免每次垃圾回收完成后JVM重新分配内存!

    -Xmn: 新生代容量大小。例如:-Xmn 10M

    -XX: SurvivorRatio 设置参数Eden、form和to的比例 【比例参数Eden、form和to默认是8:1:1】例如:-XX: SurvivorRatio=8 代表比例8:1:1

    虽然没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制:

    老年代空间大小 = 堆空间大小 - 年轻代大空间大小

    当我们的 Java 堆内有足够的空间去完成实例分配时,并且堆也无法扩展,将会抛出我们常见的OutOfMemoryError异常,也就是我们常说的OOM 异常

    3.2、 JVM 堆内存溢出后,其他线程是否可继续工作?

    JVM 堆内存溢出后也就是OOM 异常,网上有一道非常火的面试题:JVM 堆内存溢出后,其他线程是否可继续工作?

    实际上这个问题需要具体的场景分析。但是就一般情况下,发生OOM的线程都会终结(除非代码写的太烂),该线程持有的对象占用的heap都会被gc了,释放内存。因为发生OOM之前要进行gc,就算其他线程能够正常工作,也会因为频繁gc产生较大的影响。

    也就是说发生OOM的线程一般情况下会死亡,也就是会被终结掉,该线程持有的对象占用的heap都会被gc了,释放内存。因为发生OOM之前要进行gc,就算其他线程能够正常工作,也会因为频繁gc产生较大的影响。

    3.3、方法区

    拿HotSpot 虚拟机来说,在 JDK1.7的时候,方法区被称作为永久代, 从JDK1.8开始,Metaspace (元空间)也就是我们所谓的方法区!

    也就是说,如果你身边的小伙伴还在说着永久代,那绝壁是在扯1.8之前的概念了,1.8之后已经废弃了永久代这个概念!

    方法区(Method Area)与上面讲的Java堆一样,都是各个线程共享的,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。

    Java虚拟机规范中是这样定义方法区的:

    它存储了每个类的结构信息,例如运行时常量池、字段、方法数据、构造函数和普通方法的字节码内容,还包括一些在类、实例、接口初始化时用到的特殊方法。

    3.4、JDK1.8 之前的方法区

    就以HotSpot 虚拟机来说,在 JDK1.8 之前,方法区也被称作为永久代,这个方法区会发生我们常见的 java.lang.OutOfMemoryError: PermGen space 异常,注意是永久代异常信息,我们也可以通过启动参数来控制方法区的大小:

    -XX:PermSize 设置方法区最小空间

    -XX:MaxPermSize 设置方法区最大空间

    在JDK7之前的HotSpot虚拟机中,纳入字符串常量池的字符串被存储在永久代中,因此导致了一系列的性能问题和内存溢出错误。特别突出的例子就是String的intern()方法

    3.5、JDK1.8 之后的方法区

    JDK8之后就没有永久代这一说法变成叫做元空间(meta space),而且将老年代与元空间剥离。元空间放置于本地的内存中,因此元空间的最大空间就是系统的内存空间了,从而不会再出现像永久代的内存溢出错误了,也不会出现泄漏的数据移到交换区这样的事情。用户可以为元空间设置一个可用空间最大值,不设置默认根据类的元数据大小动态增加元空间的容量。对于一个 64 位的服务器端 JVM 来说,其默认的–XX:MetaspaceSize 值为 21MB。也就是说默认的元空间大小是21MB。

    只要类加载器还存活,其加载的类的元数据也是存活的,不会被回收掉!也就是同生共死

    9fc16ae5c7853d886350ebde41c3eaf5.png

    3.6、JDK1.8 之后的方法区为何变化如此之大?

    做这个改变呢也许主要是基于以下两点原因:

    1、由于 永久代(PermGen)内存经常会溢出,引发恼人的 java.lang.OutOfMemoryError: PermGen,因此 JVM 的开发者希望这一块内存可以更灵活地被管理,不要再经常出现这样的 OOM错误。

    2、移除 永久代(PermGen)可以促进 HotSpot JVM 与 JRockit VM 的融合,因为 JRockit 没有永久代。

    还有需要注意一点的是永久代的移除并不代表自定义的类加载器泄露问题就解决了。因此,你还必须监控你的内存消耗情况,因为一旦发生泄漏,会占用你的大量本地内存,并且还可能导致交换区交换更加糟糕。

    4、线程私有:程序计数器、Java 虚拟机栈、本地方法栈

    Java 堆以及方法区的数据是共享的,但是有一些部分则是线程私有的。线程私有部分可以分为:程序计数器、Java 虚拟机栈、本地方法栈三大部分。

    4.1、Java 虚拟机栈(JVM Stacks)

    1、 Java 虚拟机的每一条线程都有自己私有的 Java 虚拟机栈,这个 Java 虚拟机栈跟线程同时创建,所以它跟线程有相同的生命周期。

    2、Java 虚拟机栈描述的是 Java 方法执行的内存模型:每一个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息,每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中的入栈到出栈的过程。

    3、局部变量表存放了编译期可知的各种基本数据类型、对象引用和 returnAddress 类型。

    1、基本类型:八种基本类型

    2、对象引用:reference 类型,它不等同于对象本身,根据不同的虚拟机实现,它可能是一个指向对象起始地址的引用指针,也可能指向一个代表对象的句柄或者其他与此对象相关的位置。

    3、 returnAddress 类型:指向了一条字节码指令的地址。

    其中 64 位长度的 long 和 double 类型的数据会占用 2 个局部变量空间(Slot),其余的数据类型只占用 1 个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

    4、Java 虚拟机栈既允许被实现成固定的大小,也允许根据计算动态来扩展和收缩,如果采用固定大小的话,每一个线程的 Java 虚拟机栈容量可以在线程创建的时候独立选定。在 Java 虚拟机栈中会发生两种异常,这个在虚拟机规范中有指出:

    如果线程请求分配的栈容量超过 Java 虚拟机栈允许的最大容量,Java 虚拟机将会抛出 StackOverflowError 异常;也就是栈溢出错误!方法递归调用产生StackOverflowError 异常这种结果。

    如果 Java 虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存或者在创建新的线程时没有足够的内存去创建对应的 Java 虚拟机栈,那么虚拟机将会抛出 OutOfMemoryError 异常。也就是OOM内存溢出错误!(线程启动过多)

    当然,可以通过参数 -Xss 去调整JVM栈的大小!

    4.2、本地方法栈(Native Method Stacks)

    和虚拟栈相似,只不过它服务于Native方法,线程私有。当 Java 虚拟机使用其他语言(例如 C 语言)来实现指令集解释器时,也会使用到本地方法栈。如果 Java 虚拟机不支持 natvie 方法,并且自己也不依赖传统栈的话,可以无需支持本地方法栈。

    与 Java 虚拟机栈一样,本地方法栈区域也会抛出 StackOverflowError 和 OutOfMemoryError 异常。

    HotSpot虚拟机直接就把本地方法栈和虚拟机栈合二为一。

    4.3、程序计数器

    当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节指令地址,线程私有。

    需要特别注意的是,程序计数器是唯一一个在Java虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。

    5、JVM 内存结构总结

    9ee99f75e03279e9e63648ce8684879c.png

    程序计数器:

    1、 当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节指令地址,线程私有。

    2、程序计数器是唯一一个在Java虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。

    Java虚拟栈:

    1、存放基本数据类型、对象的引用、方法出口等,线程私有。

    2、栈容量超过 Java 虚拟机栈的最大容量,会抛出 StackOverflowError 异常;也就是栈溢出错误!方法递归产生

    3、如果 Java 虚拟机栈可以动态扩展,无法申请到足够的内存或者在创建新的线程时没有足够的内存去创建对应的 Java 虚拟机栈,会抛出 OutOfMemoryError 异常。也就是OOM内存溢出错误!(线程启动过多)

    4、参数 -Xss 调整JVM栈的大小

    Native方法栈:

    1、和虚拟栈相似,只不过它服务于Native方法,线程私有。

    2、HotSpot虚拟机直接就把本地方法栈和虚拟机栈合二为一。

    Java堆:

    java内存最大的一块,所有对象实例、数组都存放在java堆,GC回收的地方,线程共享。

    Java堆 = 老年代 + 新生代

    新生代 = Eden + S0 + S1

    默认Eden:from :to = 8:1:1

    方法区:

    1、存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据等,回收目标主要是常量池的回收和类型的卸载,各线程共享

    2、方法区在JDK1.7的时候叫做永久代,到JDK1.8之后废弃了永久代改为元空间(meta space)

    如果本文对你有一点点帮助,那么请点个赞呗,谢谢~

    最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!

    欢迎各位关注我的公众号,一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...

    展开全文
  • 单项链表内存结构图(也叫原理图) 单项链表内存结构
    1. 单项链表内存结构图(也叫原理图)

    在这里插入图片描述

    1. 单项链表内存结构图

    在这里插入图片描述

    展开全文
  • JVM的内存结构

    图 1:
    在这里插入图片描述
    图 2:
    在这里插入图片描述

    图 3:
    在这里插入图片描述

    图 4:

    在这里插入图片描述

    展开全文
  • Java内存结构、内存模型、对象模型这几个概念经常会被混为一谈。理论知识容易忘写下来帮助记忆,方便以后查看。 1、Java内存结构 Java内存结构其实说的是JVM在运行时内存区域的划分,是根据Java虚拟机规范来实现的...

    Java内存结构、内存模型、对象模型这几个概念经常会被混为一谈。理论知识容易忘写下来帮助记忆,方便以后查看。

    1、Java内存结构

    JVM运行时内存区域
    Java内存结构其实说的是JVM在运行时内存区域的划分,是根据Java虚拟机规范来实现的。说的是JVM中划分出的各块内存区域分别用来干什么。如上图分为了5大块:方法区,虚拟机栈(有的叫方法栈也有叫线程栈的)、本地方法栈、堆、程序计数器(也有叫寄存器的)。其中方法区和堆是线程共享的内存区域,而虚拟机栈、本地方法栈和程序计数器是线程私有的,或者说是线程隔离的。

    1.1 程序计数器:

    它是当前线程执行字节码的指示器,通过改变它的值来选取下一条要执行的Java字节码指令。Java代码中的循环、跳转、异常处理、线程获得时间片后的恢复都需要依赖程序计数器。程序计数器所占内存很小,也是唯一一块不会出现内存溢出异常的内存区域。

    1.2 虚拟机栈:

    虚拟机栈是线程私有的,每一个线程都会分配一个虚拟机栈,它描述的是Java方法执行的内存模型,每个方法执行时都会同步创建一个栈帧,用于存储方法运行过程中需要的数据,指令,返回地址等信息。

    1.3 本地方法栈

    本地方法栈和虚拟机栈描述类似,区别只在于虚拟机栈描述的是Java方法,而本地方法栈描述的是Native方法(c++语言)。

    1.4 方法区

    它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区只是Java虚拟机规范中的一种理论思想,在jdk1.7之前这部分内容被存放于永久代中,在jdk1.8之后用元空间来代替。jdk的做法是理论的实现方式。永久代和元空间都可以通过jvm参数来调整其大小,不同的是元空间使用的是直接内存。

    1.5 堆

    堆是这几块内存区域中最大的一块,存放的是Java中几乎所有的对象实例。几乎所有对象也就是说不是全部,从jdk1.7之后开启了逃逸分析,感兴趣的可以查一查,它说的是当方法中的一个对象,未被外部引用并且未被方法返回,也就是说这个对象只在这个方法内有用,那么这个对象可以直接在栈上分配内存。

    2、Java内存模型(JMM)

    JMM
    JMM可以理解为Java模拟了cpu的硬件架构所规定的一种规范。由于cpu处理速度非常块比内存的读写速度要快很多,为了不妥协内存的读写速度,cpu引入了高速缓存,cpu要想修改主内存的值必须先将主内存中的数据拷贝到高速缓存中进行读取,然后再回写入主内存。
    从上节内容可知,Java堆和方法区域是多个线程共享的数据区域。也就是说,多个线程可以操作保存在堆或者方法区中的同一数据。
    JMM和多线程相关,它定义了一个线程对共享变量的写入对另一个线程是可见的。Java的多线程间是通过共享内存进行通信的,在通信过程中就会存在一系列如可见性、原子性、顺序性等问题。而JMM就是围绕多线程通信以及其相关的一系列特性而建立的模型。JMM定义了一系列语法集,这些语法集映射到Java中就是volatilesynchronized等关键字。

    展开全文
  • jvm的内存结构主要包含哪几个部分发布时间:2020-06-04 14:24:33来源:亿速云阅读:196作者:Leahjvm的内存结构主要包含哪几个部分?针对这个问题,今天小编总结这篇有关内存结构的文章,希望能帮助更多想解决这个...
  • 最简单的JVM内存结构

    千次阅读 2021-03-11 20:42:03
    JVM内存结构图 方法区 堆 栈 程序计数器 本地方法栈 直接内存 内存分配性能优化-逃逸分析 总结 JVM内存结构图 大家好,好几天没有更新了,今天的内容有点多,我们详细介绍下JVM内部结构图,还是和之前...
  • JVM内存结构

    千次阅读 热门讨论 2021-05-09 22:16:25
    JVM内存结构1.JVM中主要的三块内存空间:1.1.栈(stack)内存1.2.方法区1.3.堆区 堆内存(heap)2.栈数据结构2.1.一种非常经典的数据结构。2.2什么是数据结构?2.3.常见的数据结构有哪些?2.4.数据结构通常出现在一...
  • 文章目录一、内存结构(运行时数据区)二、程序计数器(PC寄存器)三、虚拟机栈四、本地方法栈五、堆六、方法区 一、内存结构(运行时数据区) 这里引用尚硅谷的中英文的图(运行时数据区) 二、程序计数器(PC...
  • Oracle内存结构常见问题

    千次阅读 2021-11-16 00:10:15
    问题1:哪些SGA结构是必需的,哪些是可选的? 数据库缓冲区缓存、日志缓存区和共享池 大池、Java池、流池 问题2:
  • 【JVM】内存结构

    千次阅读 2021-10-18 12:53:12
    文章目录JVM-内存结构1.程序计数器1-1 定义1-2 作用1-3 特点2.虚拟机栈2-1 定义2-2 演示2-3 常见问题2-4 栈内存溢出2-5 线程运行诊断3.本地方法栈4.堆4-1 定义4-2 特点4-3 堆内存溢出4-4 堆内存诊断5.方法区5-1 定义...
  • 一、CE 结构剖析工具、 二、从内存结构中根据寻址路径查找子弹数据的内存地址、
  • 详解Jvm内存结构

    千次阅读 2021-12-10 20:38:43
    近期在学习研究内存,那么Jvm内存结构和Jvm的内存模型即JMM(Java momery model)这两项内容都是学习java虚拟机、java内存知识的基础。为了让自己加深理解,有不至于嵌入到底层细节太深,会通过一段代码片段类比到内存...
  • java7内存结构

    2021-11-10 15:30:17
    先给一张java7的内存结构图吧(我用Windows里面的画图工具画的,所以看起来不怎么美观) 首先对这个图有一个认识,从上面可以看到java7的内存结构大致分了五个部分:PC寄存器,java虚拟机栈、本地方法栈、java...
  • jvm内存结构

    千次阅读 2021-04-16 22:38:49
    jvm内存结构 堆、方法区是线程共享的,java方法栈、程序计数器是线程私有的。 jdk1.7和jdk1.8有略微的不同,1.8移除了方法区,改为了元数据区,将其存在本地内存中;字符串长常量池放到堆中方便回收。 堆: new ...
  • 瀚高数据库内存结构

    千次阅读 2021-10-18 13:41:54
    了解瀚高数据库的内存结构,调整相关内存参数的大小以适应当前的运行环境。 详细信息 瀚高数据库的内存结构如下: 下面将详细介绍这些内存结构。 在瀚高数据库中,内存大概被分为两大类: (1)本地内存(Local ...
  • JVM内存结构阐述

    千次阅读 多人点赞 2021-12-15 15:43:13
    内存结构 程序计数器 作用,是记住下一条jvm指令的执行地址 是线程私有的 在线程上下文切换的过程中需要记录到下一条要执行的指令的地址,等到线程再次被调度到执行的时候,还是根据该线程的程序...
  • JVM 学习笔记(一)内存结构

    千次阅读 多人点赞 2021-02-07 15:32:56
    自动的内存管理,垃圾回收机制 数组下标越界检查 3)比较 JVM、JRE、JDK 的关系如下图所示 2、学习 JVM 有什么用? 面试必备 中高级程序员必备 想走的长远,就需要懂原理,比如:自动装箱、自动拆箱是怎么实现的...
  • 一、人物数据内存结构、 二、人物三维坐标数据分析
  • STM32内存结构介绍和FreeRTOS内存分配技巧 这是我第一次使用FreeRTOS构建STM32的项目,踩了好些坑,又发现了我缺乏对于操作系统的内存及其空间的分配的知识,故写下文档记录学习成果。 文章最后要解决的问题是,如何...
  • JVM内存结构 推荐:在准备面试的同学可以看看这个系列 一、概述 二、运行时数据区 1、程序计数器 2、堆 3、栈 4、方法区/元数据区 4.1 常量池 推荐:在准备面试的同学可以看看这个系列 面试干货1——请你说说Java类...
  • 浅谈JVM内存结构,Java内存模型和Java对象模型

    多人点赞 热门讨论 2021-10-01 22:45:43
    JVM内存结构:1.1 Java虚拟机栈:1.2 堆:1.3 方法区:2. Java内存模型:3. Java对象模型:4. 三者区别: 1. JVM内存结构: Java代码是要运行在Java虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为...
  • JVM之堆内存结构和垃圾收集算法

    千次阅读 2021-04-21 22:26:16
    内存结构 jvm将我们的堆区间 各个区间默认比例是: eden:s0:s1 8:1 :1 young:old: 1:2 什么是垃圾回收机制? 不定时去堆内存中清理不可达对象。垃圾收集器在一个Java程序中的执行是自动的,不能强制...
  • JVM虚拟机(1)- 内存结构

    万次阅读 2021-09-16 15:37:20
    自动内存管理,垃圾回收功能 数组下标越界检查 多态 2. JVM、JRE、JDK的关系图: 逐级包含的关系 3. 常见JVM实现 不同的公司只要遵循虚拟机规范,都可以自己实现 4. 学习路线 ClassLoader:将编译后的二进制...
  • JVM-内存结构

    2021-11-17 11:25:31
    自动内存管理机,垃圾回收功能,自动释放内存,减少开发因操作不当造成内存泄漏的问题 数组下标越界检查 多态 2、jvm、jre、jdk之间的关系 jvm是最基本的运行环境 jre能够在jvm的基础上提供一些的类库,构成...
  • JVM的内存结构主要分为: 程序计数器 虚拟机栈 本地方法栈 堆 方法区 下面先开始学习程序计数器部分 程序计数器(Program Counter Register) JVM 指令, java程序的源文件, 被编译为.class字节码文件, 在字节码文件...
  • JAVA中的内存结构、重载、this与继承

    千次阅读 2021-03-13 00:48:45
    JAVA中的内存结构、重载、this与继承 一.对象在JVM的内存结构 JAVA内存管理由JVM来管理。 1)堆,所有new出来的对象(包括成员变量) 2)栈,所有局部变量(包括方法的参数) 3)方法区,class字节码文件(包括方法...
  • JVM篇-JVM内存结构与存储机制

    千次阅读 2021-06-13 22:33:25
    JVM内存结构 首先分清楚几个词:JVM内存结构、Java内存模型、Java对象模型 JVM内存结构 Java程序执行过程中,内存会被划分为不同的数据区域,各个区域有各自的用途。 有些区域随虚拟机的启动而存在。有些区域随线程...
  • 由浅入深了解JVM-内存结构

    千次阅读 2021-02-06 23:34:12
    无论如何都得对JVM有一定的了解,如果在互联网公司,尤其像BATM这样的大厂,如果想在技术上有一定的造诣那么对JVM就得有非常深入的了解,但作为一名普通的java工程师个人觉得最起码需要知道JVM内存结构(运行时数据...
  • 内存结构组成 程序计数器 程序计数器:指示当前程序执行到了哪一行,执行Java方法时记录正在执行的虚拟机字节码指令地址;执行本地方法时,计数器值为null 虚拟机栈 虚拟机栈:用于执行Java方法,栈针存储布局部

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,756,067
精华内容 702,426
关键字:

内存结构