JVM技术总结之五——JVM逃逸分析
时间:2022-07-22
本文章向大家介绍JVM技术总结之五——JVM逃逸分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
五. JVM 逃逸分析
参考地址:《JVM的逃逸分析》
5.1 逃逸的定义
一个对象(或变量)在方法中处理完毕返回时,返回结果可能会被其他对象引用,或者全局引用,这种现象即为逃逸。或者可以说,一个对象指针被多个线程或方法引用时,该对象指针就是逃逸状态。
public StringBuilder escapeDemo1(String a, String b) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(a);
stringBuilder.append(b);
return stringBuilder;
}
上述代码中,StringBuilder 在方法中是局部的,但返回时可能会有多个线程或方法引用 StringBuilder,这时就构成了逃逸。如果要改为非逃逸情况,则应该返回 String,最后 return stringBuilder.toString()
。
5.2 逃逸分析的优化及原理
方法栈上对象的调用,正常情况下应该是栈向 Java 堆中查找对象的引用,然后从堆中加载该对象到栈中,直到方法结束。 逃逸分析的优化:不会将对象放到 Java 堆中,而是直接放到了栈中,此时该对象在栈中属于局部变量,不会发生逃逸。而且随着方法执行完毕,栈内存被回收,局部变量也回收了,这样也变相的减轻了 GC 的压力。
注:栈上分配与 TLAB 不同。栈上分配是直接在虚拟机栈中分配了内存,TLAB 是在堆中为线程特别开辟的一块小空间,为了给这个线程更高效的分配对象。
5.3 逃逸分析适用范围
由于栈空间一般小,无法存储大容量数据,所以目前的实现都是采用不那么准确,但是时间压力相对较小的算法来完成逃逸分析,可能导致效果不稳定。逃逸分析的效果只能在满足高频和高数量的小容量的变量分配结构,才是合适的。
- Appium+python自动化13-native和webview切换
- HDU 2639 Bone Collector II(01背包变形【第K大最优解】)
- 专知内容生产基石-数据爬取采集利器WebCollector 介绍
- python实现字符串模糊匹配
- 动态规划之01背包详解【解题报告】
- hihoCoder #1078 : 线段树的区间修改(线段树区间更新板子题)
- HDU 2546 饭卡(01背包裸题)
- 漫谈文件系统
- AI知识搜索利器:基于ElasticSearch构建专知实时高性能搜索系统
- 【深度干货】专知主题链路知识推荐#5-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程01
- hihoCoder #1043 : 完全背包(板子题)
- 【深度干货】专知主题链路知识推荐#7-机器学习中似懂非懂的马尔科夫链蒙特卡洛采样(MCMC)入门教程02
- hihoCoder #1038 : 01背包(板子题)
- 最小二乘法多项式曲线拟合原理与实现
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- IDEA 破解到2099年(202004亲测)
- Flutter基础widgets教程-Chip篇
- 6.超链接-HTML基础
- lombok 表达式的相关特性
- 写给前端程序员的英文学习指南
- 浅谈spring aop的实现原理和实现过程
- Cypress系列(60)- 运行时的截图和录屏
- 请停止使用Excel进行数据分析,升级到Python吧
- git版本控制器的相关操作
- 离线 Android Studio 环境
- Actor:人生如戏全靠演技--“三维度”逻辑编程语言的设计(3) 角色是一种特定的关系名不正言不顺角色才是真正的主人演员的天分再好的演技也需要角色好演员更需要好剧本
- 2.CSS选择器-CSS基础
- es6 随性学习之let,const与var的区别
- 04-操作文件和目录 遇到的坑
- 1.CSS单位-CSS进阶