虚拟机栈和方法区的区别

虚拟机栈

虚拟机栈是线程私有的。

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

局部变量表存放了编译期可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型、它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置) 和returnAddress类型(指向了一条字节码指令的地址)。

方法区

方法区是各个线程共享的内存区域。

它用于存储已被虚拟机加载的的类信息、常量、静态变量、即时编译器编译后的代码等数据。

时间: 2024-10-11 13:23:55

虚拟机栈和方法区的区别的相关文章

堆、栈、方法区的区别

基础数据类型(Value type)直接在栈(stack)空间分配,方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收. 引用数据类型,需要用new来创建,既在栈空间分配一个地址空间(reference),又在堆空间分配对象的类变量(object). 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收. 局部变量 new出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收. 字符串常量在 方法

JVM内存初学 堆、栈、方法区

转自: http://www.open-open.com/lib/view/open1432200119489.html 这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有比较大的帮助.废话不想讲了.入主题:先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令)2.jvm只有一个堆

jvm内存模型中-栈,方法区,程序计数器是线程安全的

文章转自  https://www.cnblogs.com/myna/p/7567889.html 引文 JDK7及之前版本的方法区(Method Area)和Java堆一样,是各个线程共享的内存区域,用于存储已经被虚拟机加载的类信息.常量.静态常量.即时编译器编译后的代码等数据.虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但它有另外一个名字叫Non-Heap(非堆).根据Java虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常. 细分 方法

Java中堆、栈、方法区的联系

引言:Java中堆.栈.方法区的联系,为了更好的理解三者间的关系,本文用Test类的 声明->调用 来简单的展示这一过程. Test类: 一.编译时 在编译时会将对象Test . 常量和静态方法存入方法区 方法区分为2块: 1.对象区(加载时会将静态成员直接加载进去) 2.常量区 二.实例化时 在对象实例化时,会在堆中为对象分配一块空间. 三.调用对象的方法时 次出有2种情况: 1.静态方法调用 会直接去方法区找到add()方法进栈使用,使用完弹栈. 2.非静态方法调用 原文地址:https:/

JVM 运行时数据区:程序计数器、Java 虚拟机栈和本地方法栈,方法区和堆

Java 虚拟机可以看作一台抽象的计算机,如同真实的计算机,它也有自己的指令集和运行时内存区域. Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存(运行时内存区域)划分为若干个不同的数据区域. 如下图所示: 一.程序计数器 Program Counter Register 定义:程序计数器是当前线程所执行字节码的行号指示器. 原因:Java 中的多线程是线程间轮流切换并需要 CPU 给予时间片的方式实现的.在任何一个确定的时刻,都只有一个线程在执行指令.为了线程间轮流切换后能够快

内存分配及变量存储位置(堆、栈、方法区常量池、方法区静态区)

转载来源:http://www.cnblogs.com/protected/p/6419217.html 侵删! 程序运行时,有六个地方都可以保存数据: 1. 寄存器:这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配.我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹. 2. 堆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象).驻留于常规RAM

JVM_02 堆、栈 、方法区概念和联系

一.三者联系 1.堆:解决数据的存储问题( 即 数据怎么放,放到哪 ). 2.栈:解决程序运行的问题( 即 程序如何执行,或者说如何处理数据 ). 3.方法区:辅助堆栈的一块永久区,解决堆栈信息的产生,是先决条件. 我们创建一个对象,User:那么 User类的一些信息 (  类信息.静态信息 ) 都存在于方法区中,我们可以根据这些信息来创建对应的对象.方法区中相当于存放着创建对象的模板. 二.堆 1.根据垃圾回收机制不同, 堆有可能拥有不同的结构,最常见的就是将整个堆分为新生代和老年代.其中新

堆、栈、方法区、直接内存

堆(heap):FIFO,所有线程共享的一块内存,是专门存放对象实例的地方,GC发生在这里.随JVM启动而创建 栈(stack):LIFO,应该叫做虚拟机栈,每个线程私有的,存放该线程调用的方法栈帧,存储局部变量表.操作数栈.程序出口.动态链接等,每一个方法的调用就是入栈出栈的过程. 方法区(non-heap):存放已经加载过的类信息.静态变量.常量等不容易发生GC的信息,由各个线程共享(由静态变量或者常量可推知). 程序计数器:存放当前程序执行的字节码的行号指示器,如果执行的是native方法

关于堆、栈和方法区

JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问. 3.栈分为3个