导航:首页 > 编程语言 > 栈帧java

栈帧java

发布时间:2024-06-27 20:29:49

java在运行的时候,形参保存在什么地方

当类被加载之后,类的相关信息保存在内存的方法区,同时类内的方法定义也被加载到方法区。
当调用某个方法的时候,虚拟机会为方法在栈内存中分配一个对应的空间,就是栈帧,栈帧中
存放了该方法的参数。当这个方法调用完毕后,对应的栈帧将被收回。

❷ java中,静态方法被调用是,存储在内存的哪个区域是栈还是放大区还是两者都有

在JDK8之前,静态成员(静态变量和静态方法)都是存储在方法区(永久代)中的静态区中(这里指类被加载后,静态成员的存储位置)。但在JDK8之后,永久代被移除了,取而代之的是元空间(metaspace)。但元空间中存储的主要是.class文件的元数据信息,静态成员的存储位置由方法区转到了堆内存(heap)中。
不过,不管是JDK8,还是更早的版本中,静态方法的执行(不仅仅是静态方法,还有普通的成员方法)都是在栈内存(stack)中进行的。每个线程都会在栈内存中开辟一个栈,在调用方法时,对应的方法都会在执行这个方法的线程的栈中创建一个“栈帧”,栈帧中保存了局部变量表(基本数据类型和对象引用)、操作数栈、动态连接和返回地址等信息。等到方法执行完毕,栈帧被销毁,对应的内存也将被释放。

❸ 请高手详细的解答一下JAVA的堆,栈,方法区,谢谢。

方法区(非堆):是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
java堆:是虚拟机中所管理的内存中区域最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。java堆是垃圾收集器管理的主要区域。
java虚拟机栈:线程私有的,它的生命周期与线程相同。每个方法被执行的时候都会同时创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。

❹ Java栈和本地方法栈方法调用栈,这些都是什么

JAVA内存里面有一般有四个分类,堆, 栈(堆栈), 静态域, 常量池

栈: 实际上是一个队列, 遵循 FILO的原则(后进先出), 里面储存的是函数的参数值,局部变量,对象的引用(对象本身不在这里)等,因此在每调用一个函数时,堆栈都会分配一部分空间给它,函数返回时,被释放
堆: 储存静态变量,全局变量 和 用new创建的东西,栈中的内存是动态内存,其中的内存在不使用时随时可以被回收
静态域:存放对象中static定义的成员
常量池:存放常量
根据以上解释回答你的问题:
JAVA栈存的是函数的参数值,局部变量,对象的引用
方法调用栈? 没有这说法吧, 方法的调用是存在栈中的
本地方法栈, 和JAVA中的栈一个作用, 只是这个栈是属于本地的,不属于JAVA虚拟机,但受JAVA虚拟机的控制,因为是JAVA虚拟机简单地动态链接并直接调用指定的本地方法。可以把这看作是虚拟机利用本地方法来动态扩展自己
局部变量和对象引用存在 栈 中, 方法调用的栈帧也是在 栈 中
以上是我自己查资料+自己的理解,有错望指出

❺ 如何理解Java虚拟机栈

堆是堆(heap),栈是栈(stack),堆栈是栈。

栈中分配的是基本类型和自定义对象的引用。

堆中分配的是对象,也就是new出来的东西。 被所有线程共享。

方法区/静态区 存放的是类信息和static变量、常量。 被所有线程共享。

也可以这么理解:堆是用来存放对象的,栈是用来运行程序的。

堆:java的垃圾回收器会自动的回收这些不用的数据。缺点是由于要动态的分配内存,存储效率会比较的慢。

栈:栈的优势是存取效率比较快,仅次于寄存器,栈数据可以共享。但缺点是栈中的数据大小和生存期的固定的,缺乏灵活性。

一般每个方法的调用都会独立有一个栈来保存对象的引用变量,在方法返回后,栈会清空,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

以32位地址操作系统为例,一个进程可拥有的虚拟内存地址范围为0-2^32。分为两部分,一部分留给kernel使用(kernel virtual memory),剩下的是进程本身使用, 即图中的process virtual memory。

一个程序本质上都是由bss段、data段、text段三个组成的

bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零。bss段属于静态内存分配,即程序一开始就将其清零了。

在C语言之类的程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始化的全局变量保存在.bss 段中。

text和data段都在可执行文件中(在嵌入式系统里一般是固化在镜像文件中),由系统从可执行文件中加载;而bss段不在可执行文件中,由系统初始化。

阅读全文

与栈帧java相关的资料

热点内容
咏美演过的电影有哪些 浏览:462
韩剧爱情大尺推荐 浏览:260
馊子去哪儿了免费完整版 浏览:667
韩国在线观看免费完整版 浏览:533
赶尸艳谈同等级的都有啥台 浏览:45
国产农村偷情电影 浏览:352
如何取消已连接服务器密码错误 浏览:358
韩国迟度大又好看的电影钥匙 浏览:693
学ee的程序员 浏览:153
php自带web服务器 浏览:326
武清区编程培训哪里好 浏览:19
什么是最好优先算法 浏览:470
T5L单片机 浏览:126
安卓内存编译器运行脚本 浏览:502
男的穿搭app哪个好用 浏览:702
51单片机定时器的应用 浏览:425
当程序员待遇 浏览:777
c高级编程视频教程 浏览:842
php发邮件附件 浏览:701
极度解压动画全集 浏览:237