Java-虚拟机-逃逸分析/栈上分配/标量替换

假设有下面一个类,本文会一直使用这个类演示

public class User{public int id;public String name;
}

逃逸分析: 逃逸指的是在方法中创建的对象,逃到方法外,那么逃逸分析,指的就是分析一个在方法内创建的对象,有没有可能从它所在的方法中逃出去,例如下面的代码,就会逃到方法外

public static User u;
public void m1(){u=new User();
}

下面的代码,就不会逃出去

public void m1(){User u=new User();
}

很明显,上述两段代码,我们人类一眼就能看得懂,但是JVM要想看得懂那就得由sun的工程师自己写来判断了,这套用来判断方法内创建的对象能否逃到方法外的技术(底层代码),就叫逃逸分析

栈上分配: 指的是在栈上分配对象,正常来说我们都知道new一个对象,这个对象是在堆上的,而在某些业务需求下,如果
一个对象占用内存非常小
并且它所在的方法要轮询很多次
并且经过逃逸分析之后确定这个对象不会逃逸
那么此时在栈上分配该对象就是一种较好的选择(JVM需要开启栈上分配参数-server -XX:+DoEscapeAnalysis才会启动该功能),假设我们没有开启栈上分配,那么下面的代码必定很快GC

while(true){m1();
}

但是如果开启了栈上分配,那么无论循环多少次,堆的大小都不会增长(只考虑本文)

标量替换: 经过上述描述,已经知道栈上分配用白话文来说,就是在栈上new个对象出来,但需要注意和普通new对象不同的地方,就是普通new对象,方法中会使用该对象的引用,例如下面的代码,如果没开启栈上分配,那么m1全程操作的都是u的引用

public void m1(){User u=new User();u.name="我爱武汉汉阳的妹子"; // 此处通过u的引用,去堆中找到u,然后更改name
}

但是如果开启栈上分配,那么m1的局部变量表会多出2个位置,这多出的2个位置会给id和name使用,上面的u.name其实是直接赋值到局部变量表,这种情况就叫做标量替换

文章到此结束,其实就是个概念话术,没什么大用,要是让你写JVM,你也能想到这种优化方式,写本文其实主要是为了阐述标量替换(Eliminate Allocations)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文搞懂Python Web开发 Django

简介 Django是一个主流的Python Web框架,用于快速开发 Web 应用程序。功能强大,Python Web应用开发的第一选择。 特点 ORM(对象关系映射): Django 提供了一个强大的 ORM,允许开发者通过 Python 代码来定义…

拟杆菌在肠道感染中的矛盾作用

谷禾健康 拟杆菌门细菌是革兰氏阴性菌的代表,具有外膜、肽聚糖层和细胞质膜。它们无氧呼吸的主要副产物是乙酸、异戊酸和琥珀酸。是最耐氧的厌氧菌之一。 参与人体结肠中许多重要的代谢活动包括碳水化合物的发酵、含氮物质的利用以及胆汁酸和其他类固醇的生物转化。…

Qt中图片旋转缩放操作

在我们开发过程中,难免会遇到加载图片的问题,在上一个开发项目里我就遇到了图片缩放的问题,所以,我决定将这一部分好好研究,记录下来,希望对大家有帮助哟~ 在讲解之前,我们先看一看具体的展示效…

Java反射篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、除了使用new创建对象之外,还可以用什么方法创建对象?二、Java反射创建对象效率高还是通过new创建对象的效率高?三、java反射的作用四、哪里会用到反射机制?五、反射的实现方式:前言 前些天发现了一个巨牛的人工智能学习网站,…

阿里云配置服务器详细指南

阿里云服务器配置怎么选择合适?CPU内存、公网带宽和ECS实例规格怎么选择合适?阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择,例如企业网站后台、自建数据库、企业OA、ERP等办公系统、线下IDC直接映射、高性能计算和大游戏并发&…

OJ练习第188题——队列中可以看到的人数

队列中可以看到的人数 力扣链接&#xff1a;1944. 队列中可以看到的人数 题目描述 示例 解题思路&#xff08;单调栈&#xff09; 分析图例可以发现&#xff0c;第 0个人可以看到的三个人的身高是严格递增的。如果满足 i<j&#xff0c;此时下标为 jjj 且靠后的人比下标为…

亚马逊新品推广的三种方法是什么?广告排名跟哪些因素有关?

亚马逊新品推广的三种方法是什么&#xff1f; 促销活动&#xff1a;新品上市时&#xff0c;可以通过促销活动吸引消费者的关注和购买欲望。例如&#xff0c;提供限时折扣、买一送一、赠品等促销方式&#xff0c;吸引消费者尝试新品。 社交媒体营销&#xff1a;利用社交媒体平…

零售EDI:Metro EDI项目案例

麦德龙Metro 总部位于杜塞尔多夫&#xff0c;在全球范围内经营批发和零售业务。在2018/2019 财年&#xff0c;麦德龙Metro 的全球销售额约为 270 亿欧元。从2016年开始&#xff0c;麦德龙Metro就开始对其当时约230家门店和20,000多家分销合作伙伴进行数字化整合&#xff0c;借助…

电商API接口——你搭建电商独立站电商应用的左膀右臂

当我们构建电商网站或应用时&#xff0c;常常需要获取淘宝商品的详细信息。为了实现这个功能&#xff0c;我们可以利用淘宝提供的开放平台API接口来获取商品数据。在这篇文章中&#xff0c;我们将学习如何设计一个商品详情API接口&#xff0c;并提供相应的代码示例。 首先&…

移动神器RAX3000M路由器不刷固件变身家庭云之五(高级应用):设置成maven私服

由于我们项目经常会使用一些自研的公共组件&#xff0c;把这些组件放在一个共同的maven私服&#xff0c;这样大家就可以自动下载这些组件了。 前面文章里&#xff0c;我们设置好了uhttpd和vsftpd两个服务&#xff0c;http服务把管理界面移到隐藏的子目录里了。 现在我们可以把…

vivado non-project

https://www.xilinx.com/video/hardware/using-the-non-project-batch-flow.html --video https://cloud.tencent.com/developer/article/1169476 bd related run_my_design.tcl 交互模式 start_gui stop_gui

【RabbitMQ】1 消息中间件MQ概述

目录 什么是消息中间件为什么使用消息中间件流量削峰应用解耦异步处理 主流消息中间件及选型选取原则RabbitMQRocketMQKafka如何选择 消息中间件应用场景电商秒杀案例拉勾B端C端数据同步案例支付宝购买电影票 什么是消息中间件 维基百科对消息中间件的解释&#xff1a;面向消息…

Android11 Framework Vendor下自定义系统服务

Android11 Framework Vendor下自定义系统服务_android vendor app 配置-CSDN博客

利用GitHub开源项目ChatGPTNextWeb构建属于自己的ChatGPT - Docker

Docker部署ChatGPTNextWeb ChatGPTNextWeb项目github开源地址&#xff1a;https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 根据文档部署ChatGPTNextWeb 文档地址&#xff1a;https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web/blob/main/README_CN.md 步骤一&#…

Pytorch框架学习笔记

官网- PyTorch Tensor 构造随机初始化矩阵 xtorch.rand(5,3) 构造全0矩阵&#xff0c;数据类型为long xtorch.zeros&#xff08;5,3,dtypetorch.long&#xff09; 获取维度信息 x.size(&#xff09; tensor加法 torch.add&#xff08;x&#xff0c;y&#xff09; xy y…

C语言-蓝桥杯2023年第十四届省赛真题-砍树

题目描述 给定一棵由 n 个结点组成的树以及 m 个不重复的无序数对 (a1, b1), (a2, b2), . . . , (am, bm)&#xff0c;其中 ai 互不相同&#xff0c;bi 互不相同&#xff0c;ai ≠ bj(1 ≤ i, j ≤ m)。 小明想知道是否能够选择一条树上的边砍断&#xff0c;使得对于每个 (a…

CPU平台做视频智能分析,Lnton视频分析平台不仅支持流分析,同时也支持图片分析了

LntonAIServer最新v1.0.09版本支持图片分析了&#xff0c;经过几个月的研发&#xff0c;在原有的视频流分析的基础上&#xff0c;我们终于支持大家都非常期待的图片分析功能了&#xff0c;图片分析的功能加上&#xff0c;能有利于很多场景的展开&#xff0c;比如在烟火、明厨亮…

Coppeliasim--V-rep

官网 学习网站 英文手册 中文手册 coppeliasim ubuntu下载和配置 Windows的可以直接在官网下载&#xff0c;安装教程简单。

图像预处理——transforms

一、transforms 运行机制 torchvision是PyTorch的一个扩展库&#xff0c;提供了许多计算机视觉相关的工具和功能。下面是关于torchvision中常用模块的介绍&#xff1a; torchvision.transforms&#xff1a;提供了一系列常用的图像预处理方法&#xff0c;用于对图像进行变换、…

基于springboot+vue网吧管理系统(程序+数据库+文档)

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;摘 要 随着信息技术和网络技术的…