jvm的java虚拟机栈探秘

原创 2018年04月15日 20:01:28

Java虚拟机,作为java语言一次编译到处运行特点的保证,是Java程序的运行之本。谈到程序运行,就不得不说说内存和CPU这两大核心资源。下面我从虚拟机内存入手,浅显的分析一下jvm的内存管理,以及重点关注Java虚拟机栈。

注:资料来源《深入理解Java虚拟机-jvm的高级特性与最佳实践》--周志明著


下面重点介绍虚拟机栈VM Stack:

虚拟机栈描述的Java方法执行的内存模型:每个方法在执行的同时,都会创建一个栈帧(Stack Frame)。

栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。这就好比一堵墙看作是一个虚拟机栈,那么栈帧就像是砌墙的砖头。每一次方法的调用就相当于添加一块砖到墙上,而出栈这相当于从墙顶驱走一块砖。所以可以这样说:每一个方法从调用开始至执行完成都对应着相应的栈帧创建然后到虚拟机栈里面入栈到出栈的过程。因此栈帧和方法是息息相关的,这就便于理解:栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。


为何要采用栈的结构方式而不是队列?

栈的特点:FILO先进后出,或者是LIFO后进先出;

队列的特点:FIFO先进先出;

这里采用栈的结构好处在于:方法加载的顺序是从外往内加载,执行时候却需要从内往外执行。所以栈的结构刚好完美符合。也就是当方法1被调用时,方法1内部有调用了另一个方法2,方法2内部调用方法3,那么加载顺序应该是方法1,2,3;执行顺序则是方法3,2,1。



系统架构师之Java虚拟机、OSGi—JVM高级性能架构项目实战开发

本课程主要是针对java的中、高级开发,主要面向于java的中高级开发人员,在了解java一定知识点的前提下更容易对本课程做到详细的学习,在讲课过程中也会涉及到一些基本的基础知识点从而来更好的学习本课程。由于目前的一些电力企业以及气象方面对于系统性能优化要求相当高,本课程就针对目前企业公司大量的涉及到了java系统性能优化以及深入的讲解,本课程主要特点就是,高效性、针对性、实用性、深入性。
  • 2018年01月23日 17:43

(jvm-java虚拟机)栈,堆,方法区的关系

很多人虽然会些一些代码,但是并不知道这些数据,代码适怎样运行实现的,那我们就要来看看jvm(也就是java虚拟机)。                                  java虚拟...
  • baidu_25026917
  • baidu_25026917
  • 2017-03-10 14:14:17
  • 735

java虚拟机 jvm 出入java栈 栈空间内存分配

java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关。线程最基本的执行行为就是函数的调用。每次函数调用其实是通过java栈传递数据的。 数据结构中...
  • qq_30739519
  • qq_30739519
  • 2016-04-02 08:59:08
  • 6220

java虚拟机 jvm 栈数据区

java栈帧还是需要一些数据支持常量池的解析、正常方法的返回和异常的处理。大部分的java字节码指令需要进行常量池的访问,在栈帧数据区中保存着访问常量池的指针,方便程序访问java常量池。如下图所示:...
  • qq_30739519
  • qq_30739519
  • 2016-04-02 17:27:50
  • 2992

JVM中的本地方法栈(Native Method Stacks)和Java虚拟机栈(Java Virtual Machine Stacks)

本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native...
  • uk8692
  • uk8692
  • 2016-02-17 14:19:29
  • 2002

JVM学习笔记(一)——本地方法栈及native方法

最近开始看《深入理解Java虚拟机》,确实是本宝书。 看到虚拟机栈和本地方法栈的区别的时候有点疑惑,因为本地方法栈为虚拟机的Native方法服务。以下转载一篇关于native方法的介绍: http:/...
  • qq_28885149
  • qq_28885149
  • 2016-09-26 18:01:32
  • 4538

jvm虚拟机运行时内存分析,堆,栈,方法区,程序计数器,本地栈,常量池

**JVM自动内存管理机制** java内存区域与内存溢出异常 概述 : 对于从事C/C++程序开发的开发人员来说,在内存管理领域他们是拥有最高权力的皇帝又是从事最基础工作的劳动人民,即拥有每一...
  • m0_37034294
  • m0_37034294
  • 2017-12-19 17:18:25
  • 856

深入理解java虚拟机(十) Java 虚拟机运行时栈帧结构

栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素。每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程。 每一个栈帧在编译程序代码的时候...
  • zq602316498
  • zq602316498
  • 2014-08-29 15:52:52
  • 7427

深入理解Java虚拟机笔记---运行时栈帧结构

栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作...
  • xtayfjpk
  • xtayfjpk
  • 2014-12-14 12:40:59
  • 6352

基于栈和基于寄存器的Java虚拟机

基于栈和基于寄存器的虚拟机区别:存放操作数的位置(操作数栈/寄存器)----操作数栈即求值栈JVM通常将操作数栈放到方法调用栈帧,Dalvik则将部分操作数放入虚拟寄存器。字节码只能看到操作数栈/虚拟...
  • tuhuolong
  • tuhuolong
  • 2011-06-01 11:21:00
  • 4782
收藏助手
不良信息举报
您举报文章:jvm的java虚拟机栈探秘
举报原因:
原因补充:

(最多只允许输入30个字)