(3)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虚拟机提供的一项优化技术,基本思想:对于那些线程私有的对象(这里指不可能被其他线程访问的对象),可以将他们打散分配在棧上,而不是分配在堆上。分配在棧上的好处是可以在函数调用结束后自行销毁,而不需要垃圾回收器介入,从而提高系统性能。
--->棧上分配的一个技术基础是进行逃逸分析。逃逸分析的目的是判断对象的作用域是否有可能逃逸出函数体。
(3)java棧的更多相关文章
- 【JVM】java棧
java棧和函数调用的关系图 [名词解释]--->java棧是一块线程的私有空间--->java的棧是先进后出的数据结构.函数返回,则该函数的棧帧被弹出.--->一个函数对应一个棧帧 ...
- (1)java虚拟机概念和结构图
java虚拟机解构图一 java虚拟机解构图二 java虚拟机结构图三 [1]类加载系统 --->负责从文件系统或网络中加载class信息,存放至方法区的内存空间[2]java堆 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java HttpClient伪造请求之简易封装满足HTTP以及HTTPS请求
HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 jav ...
- Java并发编程(一)线程定义、状态和属性
一 .线程和进程 1. 什么是线程和进程的区别: 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中,线程有四种状态:运行 .就绪.挂起和结束. 进程是指一段正在执行的程序.而 ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
随机推荐
- SQL*Loader使用详解(一)
1.SQL*Loader介绍 1)SQL*Loader是一个从外部文件指加载数据到Oracle数据库的工具.语法类似于DB2的Load语法,但SQL*Loader支持各种load格式.选择性load和 ...
- Xcode文档下载与安装路径
https://developer.apple.com/library/downloads/docset-index.dvtdownloadableindex ~/Library/Developer/ ...
- OO之装饰者模式
以下为装饰者模式详解: 引子: 假如有一个快餐店,基本种类分为米饭,水饺,粉面等,但每一种类型的快餐又可以搭配不同的料,如米饭可以点各种不同的菜(排骨,青菜,土豆等),如果按照一般的设计,快餐为基类, ...
- 解决mybatis查询返回结果值串查
方式一: 通过as 指定 大写重名列的 别名 方式二: 命名数据库中表名时 每个表的主键 id 要起不同的名称, 避免主键重复(但是子表的外键可以和主表的id主键重名, 你想啊, 从表的外键性质不就是 ...
- 关于HTML Input
定义:<input> 标签用于搜集用户信息.Input表示Form表单中的一种输入对象. 根据不同的 type 属性值,输入字段拥有很多种形式.输入字段可以是文本字段.复选框(单/复选框) ...
- iis7、mvc2.0 文件上传配置方案
http://blog.csdn.net/useruse/article/details/5602495
- 【贪心】 BZOJ 3252:攻略
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 261 Solved: 90[Submit][Status][Discuss] De ...
- DataGridView 列自适应宽度 设置
代码: Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 或者设置DataGridView的AutoSizeColu ...
- c_str 以及atoi
const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类 ...
- SaaS系列介绍之七: SaaS模式分析(下)
1 SaaS模式下的质量管理 质量管理是从事SaaS事业的企业管理的重要课题,质量管理的职能是质量方针.质量目标和质量指标的制定和贯彻实施,中心目标是促进产品质量.提高客户满意度. 软件质量要素包含以 ...