对象逃逸的概念:对象能被其他线程以任何形式访问

栈帧:
局部变量表:保存函数的参数以及局部变量用的,局部变量表中的变量只在当前函数调用中有效,当函数调用结束后,随着函数栈帧的销毁,局部变量表也会随之销毁。
操作数栈:主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。只支持出栈入栈操作。
帧数据区:栈帧需要一些数据来支持常量池解析、正常方法返回和异常处理等。在帧数据区中保存着访问常量池的指针,方便程序访问常量池
此外,当函数返回或者出现异常时,虚拟机必须恢复调用者函数的栈帧,并让调用者函数继续执行下去。
对于异常处理,虚拟机必须有一个异常处理表,方便在发生异常的时候找到处理异常的代码,因此异常处理表也是帧数据区中重要的一部分

栈上分配:优化技术
基本思想:
对于那些线程私有的对象,可以将它们打散分配在栈上,而不是分配在堆上。
分配在栈上的好处在于函数调用结束后可以自行销毁
,而不需要垃圾回收器的介入,从而提高系统的性能。

技术基础:逃逸分析

逃逸分析的目的是,判断对象的作用域是否有可能逃逸出函数体

优化配置:

运行使用参数:-server -Xmx10m -Xms10m -XX:+DoEscapeAnalysis -XX:+PrintGC -XX:-UseTLAB -XX:+EliminateAllocations
-server        在Server模式下,才可以启用逃逸分析
-XX:+DoEscapeAnalysis        启用逃逸分析技术
-Xmx10m -Xms10m                指定堆空间最大为10MB,显然,如果对象在堆上分配,必然会引起大量的GC
-XX:+EliminateAllocations       开启标量替换(默认打开),允许对象打散分配在栈上,比如对象拥有id和name俩个字段,那么这俩个字段将会被视为俩个独立的局部变量进行分配
-XX:-UseTLAB                        关闭TLAB


说明栈上分配依赖逃逸分析和标量替换的实现。
对于大量的零散小对象,栈上分配提供了一种很好的对象分配优化策略,栈上分配速度快,并且可以有效避免垃圾回收带来的负面影响。

但由于和堆空间相比,栈空间较小,因此对于大对象无法也不适合在栈上分配。

java--JVM--栈帧--JVM及其优化---逃逸技术(堆栈分配方法)(转载)相关推荐

  1. java虚拟机栈帧_Java虚拟机,运行时栈帧结构

    业余生活要有意义,不要越轨.--华盛顿 引导语 "虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器. ...

  2. java全栈系列之JavaSE--数组的三种初始化方法及内存分析024

    java内存分析 堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面 在定义和创建数组的时候内存发生了什么? 当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有 ...

  3. Java全栈(四)web网页技术:15.书城项目实战四:管理端图书的增删改查(后台)

    1.需求澄清 管理端图书管理页面[book_manager.jsp]页面原型如下: 需要实现图书的添加.删除.修改.分页显示等操作 2.前期准备 2.1 创建数据表books create TABLE ...

  4. java接口防抖_前端性能优化:高频执行事件/方法的防抖

    日期:2013-6-25  来源:GBin1.com 高频执行事件/方法的防抖 通常,开发人员会在有用户交互参与的地方添加事件,而往往这种事件会被频繁触发.想象一下窗口的resize事件或者是一个元素 ...

  5. Java全栈(四)web网页技术:4.jQuery

    第1章: jQuery简介 为了简化 JavaScript 的开发,一些 JavsScript 库诞生了. JavaScript库封装了很多预定义的对象和实用函数,简化HTML与JavaScript之 ...

  6. Java全栈(四)web网页技术:1.HTML

    第1章 网页的构成 1.1 概念:B/S 与 C/S 1.1.1 现在的软件开发的整体架构主要分为B/S架构与C/S架构: b/s:浏览器/服务器 c/s:客户端/服务器 客户端:需要安装在系统里,才 ...

  7. Java全栈(四)web网页技术:7.HTTP协议

    HTTP协议 第1章 HTTP协议简介 HTTP 超文本传输协议 (HTTP-Hypertext transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于 ...

  8. java中栈和堆都存哪些东西_java中栈内存与堆内存(JVM内存模型)

    java中栈内存与堆内存(JVM内存模型) Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中.哪些存储在栈中.内存中的 ...

  9. JVM -- 运行时栈帧结构简介

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

最新文章

  1. Web 前端,易学难精,没有拿手的实战项目,怎么办?
  2. Jsoup 替换文本中所有的img src属性
  3. 使用React Hooks你可能会忽视的作用域问题
  4. 分治习题--九章算法培训课第三章笔记
  5. 【Android 插件化】Hook 插件化框架 ( 加载插件包资源 )
  6. PHP秒杀系统全方位设计分析--转载
  7. sql azure 语法_Azure SQL数据同步–在Azure SQL数据库之间复制数据和架构更改
  8. 7. Document write() 方法
  9. ENVI学习总结(二)——基于自带定位信息的几何校正
  10. 六石管理学:做产品,要确定自己是太子还是陪太子
  11. python integer函数_python - Floor函数消除了Integer科学符号,Python - 堆栈内存溢出
  12. VS2010/MFC编程入门系列教程
  13. win2019微软更新服务器,微软2019 Windows 10更新十一月版正式版推送
  14. 平面设计素材| 文字排版 堆砌素材
  15. 解除隐藏文件cmd命令_用DOS命令怎么取消隐藏文件夹
  16. WinRAR 破解方法详解
  17. Matlab App Designer 函数写法
  18. linux系统弹出鼠标,Ubuntu14.04及以上操作系统鼠标闪烁问题
  19. LSH 近似最近邻查找
  20. 数据挖掘中最容易犯的几个错误,你知道吗?

热门文章

  1. mybatis整合数据权限
  2. linux内核配置与编译
  3. [Python Study Notes]正则表达式
  4. 关于Java的“找不到或无法加载主类”
  5. 【工具】克隆题库(适用于所有以POJ2005-2017为模板的OJ平台)
  6. 0429 Scrum团队成立与第6-7章读后感
  7. ASP.NET Page和Response 输出js的区别
  8. 第一章 代码无错就是优吗?(简单工厂模式)
  9. Sql语句中 case when .. 的两种写法
  10. 成为编程高手的二十二条军规