精华内容
下载资源
问答
  • java运行时数据区域

    2021-11-18 09:42:35
    java运行时数据区域 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 这些区域每一个都有自己的用途。java虚拟机所管理的内存包括以下几个运行时数据区域。 程序计数器 程序...

    java运行时数据区域

    java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 这些区域每一个都有自己的用途。java虚拟机所管理的内存包括以下几个运行时数据区域

    clipboard.png

    程序计数器

    程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型例,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令分支、循环、跳转、异常处理、线程恢复等功能都需要以来这个计数器完成。

    由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每一条线程都要有一个独立的程序计数器。各线程之间的计数器互不影响,独立存储。这种,线程之间独立的区域,我们管他们叫做线程私有的内存。因此,程序计数器是线程私有的内存区域。

    java虚拟机栈

    和程序计数器一样,java虚拟机栈也是线程私有的,他的生命周期和线程相同。虚拟机栈描述的是java方法执行的内存模型,每一个方法在执行的同时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从调用直到执行完成的过程,就对应这一个栈帧在虚拟机栈中入栈到出栈的过程。

    局部变量表存放了编译期间可知的基本数据类型、对象的引用(注意不是对象,而是对象的引用)。其中基本变量中的64位长度的long和double会占用2各局部变量空间,其他数据类型只会占据一个。

    局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

    在Java虚拟机规范中,对这个区域规定了两种异常:如果线程请求的栈的深度大于虚拟机所允许的深度,将抛出stackOverllowError异常;如果虚拟机可以动态扩展,如果扩展时无法申请到足够的内存,那么就会抛出OutOfMemoryError异常

    本地方法栈

    本地方法栈于虚拟机栈所发挥的作用非常相似,他们之间的区别是一个执行Java方法,一个执行本地方法——一个Native Method就是一个java调用非java代码的接口。

    java堆

    java堆是虚拟机所管理内存最大的一块。java堆内存是被所有的线程共享的。java堆里面存放的就是对象的实例,几乎所有的对象实例都在这里分配内存。 在java虚拟机规范中描述,所有的对象实例以及数组都是要在堆上分配内存的。但是随着一些JIT编译器的发展与逃狱分析技术的逐渐成熟,所有对象都在堆上分配内存并不是那么绝对了。

    java堆是垃圾收集器的主要管理区域。从内存回收的的角度来看,现在收集器基本都是采用分代收集算法,java堆还可以分为:新生代和老生代。

    根据java虚拟机的规范,java堆可以处于物理上不连续的内存空间,只要逻辑上是连续的即可,就像我们的磁盘空间一样,在实现的时候,既可以实现固定大小的,也可以实现可扩展的的,如果在分配内存的时候,已满,并且不可扩展,那么将会抛出OutOfMemoryError异常

    方法区

    和java堆一样,是各个线程共享的内存区域,它用于已被虚拟机加载的类信息,常量、静态变量,即时编译器编译后的代码等数据,法区也有一个别名叫做Non-Heap(非堆),用于与Java堆区分。对于HotSpot虚拟机来说,方法区又习惯称为“永久代”(Permancent Generation),但这只是对于HotSpot虚拟机来说的,其他虚拟机的实现上并没有这个概念。相对而言,垃圾收集行为在这个区域比较少出现,但也并非不会来收集,这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载上。根据Java 虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError 异常。

    运行时常量池

    运行时常量池是方法区的一部分。 Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量表,用于存放编译期生成的各种字面常量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放(JDK1.7开始,常量池已经被移到了堆内存中了)。 也就是说,这部分内容,在编译时只是放入到了常量池信息中,到了加载时,才会放到运行时常量池中去。运行时常量池县归于Class文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入Class文件中常量池的内容才能进入方法区的运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用的比较多的是String类的intern()方法。

    当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常,常量池属于方法区,同样可能抛出OutOfMemoryError异常。

    补充:

    直接内存

    直接内存并不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域,但是这部分内存被经常使用。

    在JDK1.4中加入NIO(new Input/Output)类,引用了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。本机的直接内存不会受到java堆大小影响,但是会受到本机总内存大小以及处理器寻址空间的限制。

    以上就是《深入理解JAVA虚拟机》中关于java内存区域的知识点了。

    展开全文
  • Java运行时数据区域划分JavaJVM内存堆栈1、 概述对于Java程序员来说,在虚拟机自动内存管理机制下,不容易出现内存泄漏和内存溢出现象。但如果不了解虚拟机是如何使用内存的,一旦出现了内存泄漏和溢出方面的问题,...

    Java运行时数据区域划分

    Java

    JVM

    内存

    1、 概述

    对于Java程序员来说,在虚拟机自动内存管理机制下,不容易出现内存泄漏和内存溢出现象。但如果不了解虚拟机是如何使用内存的,一旦出现了内存泄漏和溢出方面的问题,那么排错就无从下手了。

    2、 运行时数据区域

    Java虚拟机在执行Java程序的过程中会将它所管理的内存划分为若干个不同的数据区域,如下图所示。

    cd1bb3ee87d0a571162f90efe8f0a255.png

    2.1、 程序计数器

    程序计数器(Program Counter Register):是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。(虚拟机的概念模型中,字节码解释器依靠程序计数器的值来选择下一条需要执行的字节码指令)

    为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间计数器互不影响独立储存。由上图也可知程序计数器为线程隔离的数据区。

    若线程执行Java方法: 程序计数器记录的是正在执行的虚拟机字节码指令的地址。

    若执行Native方法: 计数器值为空

    2.2、 Java虚拟机栈

    与程序计数器一样Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。

    Java虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行时都会创建一个栈帧(Stack Frame)。每个方法从调用直至执行完成的过程中,就对应一个栈帧从Java虚拟机栈中入栈到出栈的过程。

    栈帧(Stack Frame):用于储存局部变量表,操作数栈,动态链接,方法出口等信息。

    局部变量表:局部变量表中存放了编译器可知的各种基本数据类型(boolean,byte,int...etc)、对象引用和 returnAddress 类型。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

    在Java虚拟机规范中对Java虚拟机栈区域规定了二种异常:

    若线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。

    如果当前Java虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。

    2.3、 本地方法栈

    本地方法栈(Native Method Stack)与Java虚拟机栈作用相似。Java虚拟机栈为Java方法(也就是字节码)服务。本地方法栈则为虚拟机使用到的Native方法服务。

    在虚拟机规范中对本地方法栈中方法使用的语言、使用方式、数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。例如:Sun HotSpot虚拟机直接就把虚拟机栈与本地方法栈合二为一。

    抛出的异常同Java虚拟机栈一样。

    2.4、 Java堆

    一般来说Java堆是Java虚拟机所管理的内存中最大的一块。Java堆(Java Heap)是被所有线程共享的一块内存区域,在虚拟机启动时创建。

    Java虚拟机规范对Java堆的描述是:

    所有的对象及数组都要在堆上分配内存(随着技术的发展这一点也不那么“绝对”了)。

    Java堆可以处在物理上不连续的内存空间中,只要逻辑上是连续的即可。

    当前主流的虚拟机对Java堆都是按照可扩展来实现的,如果在堆中没有内存可供实例完成分配,并且堆也无法在扩展时,将会抛出OutOfMemoryError异常。

    2.5、 方法区

    方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,用于储存已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    Java虚拟机规范对堆的描述为:

    方法区是堆的一个逻辑部分,有一个别名Non-Heap(非堆),目的应该是与Java堆区分开来。

    方法区和堆一样不需要连续的内存和可扩展外,还可以不实现垃圾收集。

    当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。

    2.6、 运行时常量池

    运行时常量池(Runtime Constant Poll)是方法区的一部分。

    Class文件中包含了类的版本、字段、方法、接口等描述信息外还包含常量池(Costant Pool Table)——用来存放在编译期间生成的各种字面量和符号引用。这部分内容将在类加载后再进入方法区的运行时常量池中存放。

    Java虚拟机对Class文件的每一部分(包括常量池)的格式都有严格的规定,必须符合规范才能被虚拟机认可、装载和执行。但对于运行时常量池,Java虚拟机规范没有做任何细节要求,不同的虚拟机可以有不同的实现,但一般来说,除了保存Class文件中的符号引用外,还会把翻译出来的直接引用也保存在运行时常量池中。

    运行时常量池相对于Class文件常量池来说具有一个重要特征——动态性,并非只有预置入Class文件常量池的内容才能进入运行时常量池,运行期间也可以将新的常量放入运行时常量池中。(这种特性运用比如String类的intern()方法)

    运行时常量池是方法区的一部分,所以受到方法区内存的限制,当常量池无法再申请到内存时将抛出OutOfMemoryError异常。

    展开全文
  • Java运行时数据区域

    2021-03-03 12:43:41
    主要分为以下几种数据区域:程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。Java虚拟机可以支...

    Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。主要分为以下几种数据区域:

    程序计数器

    Java虚拟机栈

    本地方法栈

    Java堆

    方法区

    运行时常量池

    c90528ed695392d55a7788431f409296.png

    程序计数器

    程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。Java虚拟机可以支持多条线程同时执行,每一条Java虚拟机线程都有自己的程序计数器,Java虚拟机的多线程是通过线程轮流切换并分配时间片来实现的,在任何一个确定的时刻,一个处理器(单核)都只会执行一条线程中的指令,为了多线程切换后还能恢复到正确的执行位置,因此每条线程都有一个独立的程序计数器,各条线程之间互不影响。就是线程隔离数据。

    如果现成正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行执行的是Native方法,这个计数器值则为空(undefined)。

    此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

    Java虚拟机栈

    与程序计数器一样,Java虚拟机栈为线程私有,每一条Java虚拟机线程都有自己私有的Java虚拟机栈,这个栈与线程同时创建,用于存储栈帧。Java虚拟机栈的作用与传统语言(例如c语言)中的栈相似,用于存储局部变量与一些尚未计算好的结果。另外,他在方法调用和返回中也扮演了很重要的角色。因为除了栈帧的出栈和入栈之外,Java虚拟机栈不会再受其他因素影响,所以栈帧可以在堆中分配,Java虚拟机栈所使用的内存不需要保证是连续的。

    Java虚拟机规范中既允许Java虚拟机栈实现成固定大小,也允许根据计算来动态扩展。

    Java虚拟机实现应当提供给程序员或者最终用户调节虚拟机栈初始容量的手段,对于可以动态扩展和收缩Java虚拟机栈来说,则应当提供调节其最大、最小容量的手段。

    Java虚拟机栈可能发生如下异常情况:

    如果线程请求分配的栈容量超过Java虚拟机栈允许的最大容量,Java虚拟机栈会抛出一个StackOverflowError异常。

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

    可以通过以下参数设置Java虚拟机栈:

    -Xss108K

    本地方法栈

    Java虚拟机实现可能会使用到传统的栈来支持Native方法的执行,这个栈就是本地方法栈。如果Java虚拟机不支持native方法,或是本身不依赖传统栈,那么可以不提供本地方法栈,日过支持本地方法栈,那这个栈一般会在线程创建的时候按线程分配。

    Java虚拟机规范允许本地方法栈实现成固定大小或者根据计算来动态扩展和收缩。

    Java虚拟机实现应当提供给程序员或者最终用户调节本地方法栈初始容量的手段,对于长度可动态变化的本地方法栈来说,则应当提供调节其最大、最小容量的手段。

    本地方法栈可能发生如下异常情况:

    如果现成请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机会抛出一个StackOverflowError异常。

    如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程是没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出OutOfMemoryError异常。

    可以通过一下参数设置本地方法栈:

    -Xoss1M

    在Sun提供的HotSpot虚拟机中并不区分虚拟机栈和本地方法栈,对HotSpot来说,-Xoss参数无效。

    Java堆

    在Java虚拟机中,堆是可供各个线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域。在虚拟机启动时创建,此区域的唯一目的就是存放实例对象,几乎所有的对象实例都在这里分配内存。但也不是绝对的,因逃逸分析的技术出现,会致使一些对象在栈上分配,这些对象会随着栈帧的出栈而销毁,这样大大减轻了GC回收的压力。Java堆所使用的内存不需要保证是连续的。

    Java虚拟机实现应当提供给程序员或者最终用户调节Java堆初始容量的手段,对于可以动态扩展或收缩Java堆来说,则应当提供调节其最大、最小容量的手段。

    Java堆可能发生如下异常情况:

    如果实际所需要的堆超过了自动内存管理系统能提供的最大容量,那Java虚拟机将会抛出一个OutOfMemoryError的异常。

    可以通过一下参数设置Java堆:

    -Xms2G:设置 Java 应用程序启动时的初始堆大小;

    -Xmx2G:设置 Java 应用程序能获得的最大堆大小;

    方法区

    在Java虚拟机中,方法区是供各个线程共享的运行时内存区域,它存储了每一个类的结构信息,如运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容,还包括一些在类、实例、接口初始化时用到的特殊方法。

    方法区在虚拟机启动的时候创建,虽然方法区是堆的逻辑组成部分,但有一个别名叫非堆,也有很多人成为是“永久代”,目的是与Java堆区分开,因此简单的虚拟机实现可以选择在这个区域不实现垃圾收集与压缩。方法区的容量可以是固定的,也可以随着程序执行的需求动态扩展,并在不需要过多空间时自动收缩,方法区在实际内存空间中可以是不连续的。

    Java虚拟机实现应当提供给程序员或者最终用户调节方法区初始容量的手段,对于可以动态扩展或收缩方法区来说,则应当提供调节其最大、最小容量的手段。

    方法区可能发生如下异常情况:

    如果方法区的内存空间不能满足内存分配需求,那么Java虚拟机将抛出一个OutOfMemoryError异常。

    可以通过一下参数设置方法区:

    JDK7

    -XX:PermSize=5M 设置永久代初始大小

    -XX:MaxPermSize=5M 设置最大上限

    JDK8

    从JDK8开始已经把永久代去掉,取而代之的是元空间(Metaspace),为什么从永久代切换到元空间?

    由于永久代内存经常不够用或发生内存泄露,爆出异常java.lang.OutOfMemoryError: PermGen

    动态类加载的情况越来越多,这块内存我们变得不太可控

    类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。

    永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。

    元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小:

    -XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。

    -XX:MaxMetaspaceSize,最大空间,默认是没有限制的。

    运行时常量池

    运行时常量池是Class文件中每一个类或接口的常量池表的运行时表示形式,它包括了若干种不同的常量,从编译期可知的数值字面量到必须在运行期解析后才能获得的方法或字段引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

    在创建类或接口的运行时常量时,可能会发生如下异常情况:

    当创建类或接口时,如果构造运行时常量池所需要的内存空间超过了方法区所能提供的最大值,那么Java虚拟机将会抛出一个OutOfMemoryError异常。

    展开全文
  • JAVA运行时数据区域

    2021-05-26 18:09:40
    JAVA运行时数据区域 1,方法区(Method Area 共享区) 2,虚拟机栈(VM Stack 私有的) 3,本地方法栈(Native Method Stack 私有的) 4,堆(Heap 共享区) 5,程序计数器(Program Counter Register 私有的)

    JAVA运行时数据区域
    1,方法区(Method Area 共享区)
    2,虚拟机栈(VM Stack 私有的)
    3,本地方法栈(Native Method Stack 私有的)
    4,堆(Heap 共享区)
    5,程序计数器(Program Counter Register 私有的)

    展开全文
  • 1、Java内存区域(Java运行时数据区域),描述的是堆、栈等区域的划分 2、Java内存模型(JMM),用来屏蔽各种硬件和操作系统的内存访问差异,以实现Java程序在各种平台都能达到一致的内存访问效果 如果需要了解JMM...
  • Java运行时数据区域(内存划分)

    千次阅读 2021-06-14 11:55:39
    线程共享区域: Java堆,方法区,运行时常量池. 1. 程序计数器(线程私有) 程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器(切换线程后,能恢复到正确的执行位置). 2. Java虚拟机...
  • 根据《Java 虚拟机规范(Java SE 7版)》规定,Java虚拟机所管理的内存,将会包括以下几个运行时数据区域:注:1、由所有线程共享的数据区: 对应 java内存模型的主内存,各线程共有;2、线程隔离的数据区:对应 java...
  • 运行时数据区域

    2021-03-13 01:11:26
    本文介绍内容如下:一、运行时数据区域二、各运行时数据区域特点一、运行时数据区域(1)线程共享:堆、方法区(2)线程隔离:程序计数器、虚拟机栈、本地方法栈二、各运行时数据区域特点1、程序计数器(1)特点:1⃣️...
  • Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域运行时数据区有方法区、堆、虚拟机栈、本地方法栈、程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的...
  • JVM 运行时数据区域大致可以分为:程序计数器、虚拟机栈、本地方法栈、堆区、元空间、运行时常量池、直接内存等区域;就是下面这个样子的:其中有些区域,随着 JDK 版本的升级不断调整,例如:JDK 1.6,字符串常量池...
  • 运行时数据区域(1)程序计数器(program counter register)一块较小的内存空间当前线程所执行的字节码的行号指示器,字节码解释器在工作的时候就是通过改变程序计数器的值来选取下一跳要执行的指令多线程环境下,线程...
  • Java虚拟机在Java程序执行的过程中会把其管理的内存分为若干个不同的数据区域。他们有着各自不同的特性。这些区域有的随着虚拟机进程的启动而一直存在,有的和用户线程同生共死。 五、方法区 方法区与堆一样,是...
  • Java运行时数据

    2021-02-28 06:34:20
    Java运行时数据区1.程序计数器:当前线程所执行的字节码行号的指示器。java虚拟机多线程是通过线程间轮流切换来分配给处理器执行时间;在确定时间节点,一个处理器(一核)只会执行一个线程的指令;为保证 线程切换 ...
  • 对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员...1. 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域Java内存运行区域.
  • 本篇文章给大家带来的内容是关于JVM内存模型与运行时数据区域的详解(图文),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。一、java内存模型java定义内存模型的目的是:为了屏蔽各种硬件和操作...
  • 在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。因此,在Java中我们常常说到的内存管理...
  • 首先说明,Java 运行时数据区域和内存模型是不一样的东西。 运行时数据区域:是指 JVM 运行时将数据分区域存储,强调对内存空间的划分。 内存模型:(Java Memory Model,简称 JMM )是定义了线程和主内存之间的...
  • Java内存区域(运行时数据区域)和内存模型(JMM) Java内存区域和内存模型是不一样的东西,内存区域是...Java运行时数据区域 众所周知,Java虚拟机有自动内存管理机制,如果出现内存泄漏和内存溢出等方面的问题,排查
  • Java运行时内存区域

    2021-03-10 00:00:34
    运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为几个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的...
  • 引言:JVM定义了一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,C/C++直接使用物理硬件和操作系统的内存...
  • Java运行时数据区域

    2021-03-03 12:43:39
    分别是1、随着虚拟机进程的启动而一直存在:方法区+Java堆2、随着用户线程的启动和结束而建立和销毁:虚拟机栈+本地方法栈+程序计数器运行时数据区域按照共享的不同可以分为两个部分,分别是:1、由所有线程共享的...
  • 今天咱们来聊聊Java运行时数据区域,在我们学习Java的时候,很多人将Java的内存区域都笼统的分为堆和栈,只知道new的对象都存储在堆中,基本数据类型保存在栈中。这种想法对于初学者很合适,但是对于有一定Java编程...
  • Java虚拟机的内存区域也叫做java运行时数据区,共分为五个部分:程序计数器,方法区,本地方法栈,虚拟机栈和堆。方法区和堆是线程之间所共有的,程序计数器,本地方法栈,虚拟机栈是线程私有的。其中虚拟机栈和堆是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 222,825
精华内容 89,130
关键字:

java运行时数据区域

java 订阅