【JVM】java棧
java棧和函数调用的关系图
【名词解释】
--->java棧是一块线程的私有空间
--->java的棧是先进后出的数据结构。函数返回,则该函数的棧帧被弹出。
--->一个函数对应一个棧帧,一个棧帧里包含局部变量表,操作数棧,棧数据区
【行为解释】
--->每次函数调用都会生成相应的棧帧,从而占用一定的棧空间,因为棧空间不足,那么函数调用自然无法继续进行下去。当请求的棧深度大于最大可用深度时,系统会抛出StackOverflowError的棧溢出错误
【异常】
--->棧内存溢出java.lang.StackOverflowError
【参数设定】
--->-Xss128k 代表线程的最大棧空间为128K
【棧帧包含的内容解释】
《局部变量表》
--->保存所指函数的局部变量,参数。函数局部变量和参数越多则棧帧越大,所占棧空间越多,影响函数的嵌套调用次数。
--->long和double类型的局部变量占用2个字大小。
--->int,short,byte,对象引用等占用1个字大小
--->字:计算机内存中占据一个单独内存单元编号的一组二进制串。一般32位计算机上一个字为4个字节的长度
--->每个局部变量表中有:作用域范围,所在槽位(索引,变量名,数据类型)后边变量槽位可复用前边已经失去作用域变量的槽位,达到节省空间的目的。
/**
*
* @param a
* @param b
* 局部变零表中:this ,a,b,c,d
* 槽位:this(0),a(1),b(2),c(3),d(4)
* 所站字的大小为:5个字
*
*/
public static void test1(String a,int b){
int c=0;
System.out.println("Test2.test1()"+c);
long d=2;
}
/**
*
* @param a
* @param b
* 局部变零表中:this ,a,b,c,d
* 槽位:this(0),a(1),b(2),c(3),d(3)
* 所站字的大小为:4个字
*/
public static void test2(String a,int b){
if(true){
int c=0;
System.out.println("Test2.test2()"+c);
}
int d=2;
}
《操作数棧》
--->操作数棧也是棧帧中重要的内容之一,主要保存计算过程的中间结果,同时作为计算过程中变量临时存储空间
--->先进后出的数据结构
《帧数据区》
--->访问常量池的指针,方便程序访问常量池
--->异常处理表。当程序发生异常,根据该表查找相应的异常,进行处理
棧上分配:
--->是java虚拟机提供的一项优化技术,基本思想:对于那些线程私有的对象(这里指不可能被其他线程访问的对象),可以将他们打散分配在棧上,而不是分配在堆上。分配在棧上的好处是可以在函数调用结束后自行销毁,而不需要垃圾回收器介入,从而提高系统性能。
--->棧上分配的一个技术基础是进行逃逸分析。逃逸分析的目的是判断对象的作用域是否有可能逃逸出函数体。
【JVM】java棧的更多相关文章
- paip.提升性能---jvm java 工具使用.
paip.提升性能---jvm java 工具使用. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...
- (3)java棧
java棧和函数调用的关系图 [名词解释]--->java棧是一块线程的私有空间--->java的棧是先进后出的数据结构.函数返回,则该函数的棧帧被弹出.--->一个函数对应一个棧帧 ...
- jvm java虚拟机 新生代的配置
1.1.1.1. -Xmn参数 参数-Xmn1m可以用于设置新生代的大小.设置一个较大的新生代会影响老生代的大小,因为这两者的总和是一定的,这个系统参数对于系统性能以及GC行为有很大的影响,新生代一般 ...
- 深入理解JVM—Java 6 JVM参数配置说明
原文地址:http://yhjhappy234.blog.163.com/blog/static/316328322011119111014657/ 使用说明< xmlnamespace pre ...
- (转) JVM——Java类加载机制总结
背景:对java类的加载机制,一直都是模糊的理解,这篇文章看下来清晰易懂. 转载:http://blog.csdn.net/seu_calvin/article/details/52301541 1. ...
- (转)JVM——Java虚拟机架构
背景:最近开始忙着找工作了,把需要储备的知识再整理总结一遍!关于JVM的总结,是转自下面的连接.结合<深入理解java虚拟机>,看起来有更清晰的认识. 转载自:http://blog.cs ...
- JVM——Java HotSpot VM Options
JVM常用参数 参数名称 含义 默认值 描述 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆 ...
- JVM java垃圾回收机制
一.jvm简介 1.JVM内存运行时数据区的三个重要的地方 1.1.堆(heap):它是最大的一块区域,用于存放对象实例数组,是全局共享的. 1.2.栈(stack):全称为虚拟机栈,主要存储基本数据 ...
- JVM——Java虚拟机架构
0. 前言 Java虚拟机(Java virtualmachine)实现了Java语言最重要的特征:即平台无关性. 平台无关性原理:编译后的 Java程序(.class文件)由 JVM执行.JVM屏蔽 ...
随机推荐
- poj2421
Constructing Roads Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 22048 Accepted: 93 ...
- WCF基础之数据协定
数据协定最重要的当然就是DataContract和DataMember.这两个特性能应用到类.结构和枚举.这个两个特性跟服务契约的特点是一样的,只有被DataContract标记的类和类中被标记Dat ...
- C++, Java和C#的编译、链接过程解析
总是感觉java是解释性语言,转载下一篇感觉写的容易理解的文章 转自 http://www.cnblogs.com/rush/p/3155665.html 1.1.1 摘要 我们知道计算机不能直接理解 ...
- 洛谷 P3674 小清新人渣的本愿
想看题目的戳我. 我刚开始觉得这道题目好难. 直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了. 想知道这个神奇的bitset的戳我. 这个题目一看就感觉是莫队 ...
- HDU 4824 Disk Schedule
//
- Tensorflow 初级教程(二)
一.Tensorflow 扩展功能 1.自动求导 2.子图的执行 3.计算图控制流 4.队列/容器 Tensorflow 自动求导 当计算tensor C关于tensor W的梯度时,会先寻找从W到C ...
- linux 4 -awk
十一. awk编程: 1. 变量: 在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义.变量的类型可以是数字.字符串.根据使用的不同,未初始化变量的值为0或空白字符串&q ...
- R语言set.seed()函数介绍
set.seed(),该命令的作用是设定生成随机数的种子,种子是为了让结果具有重复性.如果不设定种子,生成的随机数无法重现.这个函数的主要目的,是让你的模拟能够可重复出现,因为很多时候我们需要取随机数 ...
- c# 文件IO操作 StreamReader StreamWriter Split 使用
StreamWriter(String,Boolean) 若要追加数据到该文件中,则为 true:若要覆盖该文件,则为 false. 如果指定的文件不存在,该参数无效,且构造函数将创建一个新文件. 例 ...
- Spark Mllib源码分析
1. Param Spark ML使用一个自定义的Map(ParmaMap类型),其实该类内部使用了mutable.Map容器来存储数据. 如下所示其定义: Class ParamMap privat ...