java--JVM--栈帧--JVM及其优化---逃逸技术(堆栈分配方法)(转载)
对象逃逸的概念:对象能被其他线程以任何形式访问
栈帧:
局部变量表:保存函数的参数以及局部变量用的,局部变量表中的变量只在当前函数调用中有效,当函数调用结束后,随着函数栈帧的销毁,局部变量表也会随之销毁。
操作数栈:主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。只支持出栈入栈操作。
帧数据区:栈帧需要一些数据来支持常量池解析、正常方法返回和异常处理等。在帧数据区中保存着访问常量池的指针,方便程序访问常量池。
此外,当函数返回或者出现异常时,虚拟机必须恢复调用者函数的栈帧,并让调用者函数继续执行下去。
对于异常处理,虚拟机必须有一个异常处理表,方便在发生异常的时候找到处理异常的代码,因此异常处理表也是帧数据区中重要的一部分
栈上分配:优化技术
基本思想:
对于那些线程私有的对象,可以将它们打散分配在栈上,而不是分配在堆上。
分配在栈上的好处在于函数调用结束后可以自行销毁,而不需要垃圾回收器的介入,从而提高系统的性能。
技术基础:逃逸分析
逃逸分析的目的是,判断对象的作用域是否有可能逃逸出函数体
优化配置:
运行使用参数:-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及其优化---逃逸技术(堆栈分配方法)(转载)相关推荐
- java虚拟机栈帧_Java虚拟机,运行时栈帧结构
业余生活要有意义,不要越轨.--华盛顿 引导语 "虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器. ...
- java全栈系列之JavaSE--数组的三种初始化方法及内存分析024
java内存分析 堆中存放new出来的对象和数组,存放具体的值的变量存放在栈里面 在定义和创建数组的时候内存发生了什么? 当用户定义了一个数组,例如:int [ ] Array;只是定义了一个数组没有 ...
- Java全栈(四)web网页技术:15.书城项目实战四:管理端图书的增删改查(后台)
1.需求澄清 管理端图书管理页面[book_manager.jsp]页面原型如下: 需要实现图书的添加.删除.修改.分页显示等操作 2.前期准备 2.1 创建数据表books create TABLE ...
- java接口防抖_前端性能优化:高频执行事件/方法的防抖
日期:2013-6-25 来源:GBin1.com 高频执行事件/方法的防抖 通常,开发人员会在有用户交互参与的地方添加事件,而往往这种事件会被频繁触发.想象一下窗口的resize事件或者是一个元素 ...
- Java全栈(四)web网页技术:4.jQuery
第1章: jQuery简介 为了简化 JavaScript 的开发,一些 JavsScript 库诞生了. JavaScript库封装了很多预定义的对象和实用函数,简化HTML与JavaScript之 ...
- Java全栈(四)web网页技术:1.HTML
第1章 网页的构成 1.1 概念:B/S 与 C/S 1.1.1 现在的软件开发的整体架构主要分为B/S架构与C/S架构: b/s:浏览器/服务器 c/s:客户端/服务器 客户端:需要安装在系统里,才 ...
- Java全栈(四)web网页技术:7.HTTP协议
HTTP协议 第1章 HTTP协议简介 HTTP 超文本传输协议 (HTTP-Hypertext transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于 ...
- java中栈和堆都存哪些东西_java中栈内存与堆内存(JVM内存模型)
java中栈内存与堆内存(JVM内存模型) Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中.哪些存储在栈中.内存中的 ...
- JVM -- 运行时栈帧结构简介
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法的局部变量表,操作 ...
最新文章
- Web 前端,易学难精,没有拿手的实战项目,怎么办?
- Jsoup 替换文本中所有的img src属性
- 使用React Hooks你可能会忽视的作用域问题
- 分治习题--九章算法培训课第三章笔记
- 【Android 插件化】Hook 插件化框架 ( 加载插件包资源 )
- PHP秒杀系统全方位设计分析--转载
- sql azure 语法_Azure SQL数据同步–在Azure SQL数据库之间复制数据和架构更改
- 7. Document write() 方法
- ENVI学习总结(二)——基于自带定位信息的几何校正
- 六石管理学:做产品,要确定自己是太子还是陪太子
- python integer函数_python - Floor函数消除了Integer科学符号,Python - 堆栈内存溢出
- VS2010/MFC编程入门系列教程
- win2019微软更新服务器,微软2019 Windows 10更新十一月版正式版推送
- 平面设计素材| 文字排版 堆砌素材
- 解除隐藏文件cmd命令_用DOS命令怎么取消隐藏文件夹
- WinRAR 破解方法详解
- Matlab App Designer 函数写法
- linux系统弹出鼠标,Ubuntu14.04及以上操作系统鼠标闪烁问题
- LSH 近似最近邻查找
- 数据挖掘中最容易犯的几个错误,你知道吗?