JVM学习疑问之——逃逸分析

news2024/11/18 13:57:39

前言

根据之前安排的jvm学习计划在进行jvm学习,找到了尚硅谷宋红康老师的jvm视频,跟着视频学习、做笔记,学习到了很多,为尚硅谷及宋红康老师点赞。说到这里,虽然我有一键三连,但这么好的视频,我又从中受益,心怀感激,放个链接吧:视频传送门

铺垫

前面一直都学得好好的,但是在说到逃逸分析–栈上分配时,宋老师举了一个例子,但是我觉得这个例子不太恰当,但水平有限,不敢贸然点评,所以记下这篇博客,请广大java道友一同讨论,鄙人日后若技术有所精进,也可回头琢磨。

因疑问需要,鄙人根据从《宋老师视频》与《深入理解java虚拟机第二版》中学到的,粗浅的阐述一下逃逸分析,若有不对,还请各位道友指正。

想必广大道友都知道,在jvm的内存模型中, 对象的实体是被存放在堆内存中,而栈中持有的是对象的引用。堆是jvm内存模型中比较大的一块,所以是垃圾回收的重点区域。垃圾回收,就是把那些已经不再“使用”的对象给清理了,给新用到的对象腾出空间嘛。但是呢,对象原本就是用户线程创建的,也是用户线程在使用,所以垃圾回收线程在进行垃圾回收时,无论是判断对象是否在被使用还是对无用对象进行清理,都需要暂停用户线程,待垃圾回收线程将“无用对象”给清理之后,用户线程才可以继续执行自己的业务逻辑。所以呢,垃圾回收并不是越频繁越好,java垃圾回收的初衷是:让java程序员不再去考虑内存管理,一套完善的管理系统肯定要比人手动控制更为准确。但是设计者肯定也不希望因垃圾回收而影响了程序的效率。所以说,如果有更好的,不进行传统的垃圾回收,也能管理内存,那肯定是皆大欢喜的。而逃逸分析–栈上分配就是其中一种比较前沿的这种技术

逃逸分析–栈上分配具体是指什么呢?就是说,如果一个对象,在方法内部被构建,又没有逃逸出方法,那么就可以把这个对象放在栈内存中,随着方法的调用而进栈,创建对象,方法调用结束而出栈,因为对象没有逃出出方法,出栈就可以直接把栈中分配的对象内存给回收了。

上面一段话是我自己理解过后的阐述,来源:

  1. 宋红康老师的视频:

(宋红康老师逃逸分析视频传送门)

  1. 深入理解java虚拟机第二版 原文:
    深入理解java虚拟机第二版逃逸分析原文

疑问

宋红康老师在视频中举的例子如下:

宋红康老师在视频中举的例子
按照送老师的意思,上面那个方法,因为方法返回了在createStringBuffer方法局部创建的StringBuffer对象,所以这个局部创建的StringBuffer对象逃逸了。而下面这个方法,返回的是StringBuffer对象toSring的结果,没有直接返回局部创建的StringBuffer对象,所以没有逃逸。

咋一看,好像是这么回事,但是仔细推敲,发现不太对劲。下面的方法没有直接返回StringBuffer对象的引用,但是别忘了,调用了StringBuffer对的的toString方法,toString作为一个实例方法,可以轻松的拿到这个对象,this就是。虽然我们知道StringBuffer的toString方法没有让this逃逸,但是,jvm在进行逃逸分析的时候,jvm它知道StringBuffer的toString方法有没有让this逃逸吗?

如果说jvm知道,jvm会一层一层的往里面去判断(抛开判断成本),那么,在上面的方法,返回StringBuffer对象的引用,也不能就说发生了逃逸,因为jvm还会去判断调用createStringBuffer方法的方法有没有让这个对象逃逸。

如果说jvm不知道,也就是jvm不会一层一层的往里去判断,那调用了toString方法,也就无法确定toString方法是否有让this逃逸。

所以说,我觉得宋红康老师这个例子不太恰当。

另外,关于jvm会不会一层一层的往里去判断,《深入理解java虚拟机第二版》书中的措辞是:逃逸出方法,并没有详细描述,这个“方法”所代表的含义,所以我也不知道。但是我个人更倾向于,没有一层一层的往里面判断,因为我觉得,一层一层的往里面判断,就相当于最外面这个方法执行了一遍,这成本不是很高吗?

水平有限,如有错误,还请指正

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

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

相关文章

(六)redis持久化操作(RDBAOF)

目录 一、RDB(Redis DataBase) 1、简介 2、持久化流程 3、dump.rdb文件 4、配置文件 5、rdb的备份 6、rdb的恢复 7、优势 8、劣势 二、AOF(Append Only File) 1、简介 2、持久化流程 3、AOF和RDB同时开启 4、AOF启动…

HTML中引入CSS样式的第三种方式:链入外部样式表文件

<!-- 第三种方式&#xff1a;链入外部样式表文件&#xff0c;这种方式最常用。 就是将样式写到一个独立的xxx.css文件当中&#xff0c;在需要的网页上直接引入这个xxx.css文件就可以了。 语法格式&#xff1a; <head> …

【自学Docker 】Docker port命令

Docker port命令 概述 docker port命令教程 docker port 命令可以用于列出指定的 Docker容器 的端口映射&#xff0c;或者将容器里的端口映射到宿主机。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker port语法 haicoder(www.haicoder.net)# docke…

jsp 校园相册管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 校园相册管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统采用web模式开发&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发&#xf…

计算机组成原理 | 第五章:输入输出系统 | 程序中断方式

文章目录&#x1f4da;概述&#x1f407;I/O系统的概述&#x1f407;输入输出系统的组成&#x1f407;I/O设备与主机的联系&#x1f407;I/O设备与主机信息传送的控制方式&#x1f4da;I/O接口&#x1f407;为什么要设置接口❓&#x1f407;接口的功能和组成&#x1f407;接口和…

Pygame的SurfaceImageTime

Surface用来生成一个矩形&#xff0c;Image用来导入外部图片&#xff0c;Time用来暂停时间。 Surface 生成矩形 facepy.Surface((200,200))填充颜色 face.fill(blue) 放入界面 screen.blit(face,(50,50)) Image 导入图片 imgpy.image.load(d:\\图片\\1.jpg) 缩放…

make prerequisite: 根据文件状态自动确定是否重新执行

Basic 先看一个简单的例子&#xff08;引自Makefile Tutorial By Example&#xff09;&#xff1a;当我们对同一个makefile执行两次make命令时&#xff0c;由于第一次运行已经生成了目标文件blah&#xff0c;第二次make会直接输出blah is up to date&#xff0c;而不会重新com…

(四)Redis配置文件redis.conf详解

目录 一、Units单位 二、INCLUDES&#xff08;包含配置&#xff09; 三、NETWORK&#xff08;网络配置&#xff09; 四、GENERAL&#xff08;总则&#xff09; 五、SNAPSHOTTING&#xff08;拍摄快照&#xff09; 六、REPLICATION&#xff08;复制&#xff09; 七、SECU…

【苹果相册日历推位置推送iMessage】需要将真机的udid复制出来在此添加

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

通过伪代码结合理论模拟pc端接入单点登录(Oauth2浙里办)

前言 还记得那是一个惺忪的早晨&#xff0c;带着困意的我正准备去公司上班&#xff0c;坐车坐到一半&#xff0c;钉钉突然袭来一条红色预警信息&#xff0c;公司查出来有个人阳了&#xff0c;好消息&#xff1a;万幸我还在去公司的路上&#xff0c;没有和他有过多的接触&#x…

机器学习中的数学原理——对数似然函数

这个专栏主要是用来分享一下我在 机器学习中的 学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎 私信或者评论区留言&#xff01;这一篇就更新一下《 白话机器学习中的数学——对数似然函数》&#xff01; 目录 一、什么是对数似然函数…

SD卡打不开怎么办?sd卡损坏修复,盘点一些实用的教程

SD卡的应用十分广泛&#xff0c;比如&#xff0c;手机、数码相机、摄像机、MP4、航拍器、车载导航等。但是随着SD卡的使用时间的长短&#xff0c;有时会出现常见问题—SD卡打不开。SD卡里面保持着我们很多重要数据&#xff0c;如果它打不开&#xff0c;很可能导致我们里面重要数…

CSS倒影炫酷属性 -webkit-box-reflect 的使用

文章目录效果预览一、相关知识点介绍属性相关二、实现步骤总结效果预览 一、相关知识点 介绍 文档 MDN关于倒影属性介绍&#xff1a;https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-box-reflect 官方说明&#xff1a; 非标准:该特性是非标准的&#xff0c;不在标…

CCF BDCI|算能赛题决赛选手说明论文-05

基于TPU平台实现人群密度估计 队伍&#xff1a;SO-FAST 宋礼 算法工程师 京东科技 中国-北京 song200626163.com柯嵩宇计算机科学与技术专业 博士 上海交通大学 中国-上海 songyukesjtu.edu.cn包锴楠计算机科学与技术 硕士 西南交通大学 中国-成都 baokainan123gmail…

元宇宙构建基石:三维重建技术

如今“元宇宙”概念爆火&#xff0c;作为前沿数字科技发展的集成体之一&#xff0c;元宇宙正成为诸多产业寻求破局的全新风口。元宇宙是利用科技手段进行链接与创造&#xff0c;与现实世界映射和交互的虚拟世界&#xff0c;具备新型社会体系的数字生活空间&#xff1b;其本质上…

Day11 蓝桥杯+Java中LocalDate类——关于日期跳转题【2015省赛星系炸弹】(相比C++,Java的LocalDate是真的香!!!)

今天刷蓝桥杯的题&#xff0c;用CAC了之后&#xff0c;发现解析里有兄弟用Java的LocalDate类做的&#xff0c;步骤极其简洁&#xff0c;【由于寒假开始学过一点Java】所以我特意去搜了搜LocalDate类&#xff0c;发现解这种题真的很好使&#xff01;&#xff01;&#xff01;废话…

高级性能测试系列《39.终极线程组可以模拟出压力测试场景吗?》

一、回顾1.面向目标场景&#xff1a;Arrivals Thread Group&#xff0c;这个可以面向tps。Concurrency Thread Group&#xff0c;可以设置面向多少个并发用户数。2.波浪型场景&#xff1a;Ultimate Thread Group 波浪型场景。在添加第二行时&#xff0c;初始化时间点要大于等于…

Makefile的使用 和 基本语法 及Makefile中变量的使用【入门必看】

MakefileMakefile概要为啥要使用MakefileMakefile的使用Makefile的语法&#xff08;重点&#xff09;Makefile实际使用&#xff08;重点&#xff09;利用Makefile删除详解Makefile指令&#xff08;重点&#xff09;Makefile多命令选项Makefile的选择编译特性强制执行总结Makefi…

使用 Keras 深度学习库进行CNN 图像识别

Keras 是一个用于深度学习的 Python 库&#xff0c;它封装了强大的数值库 Theano 和 TensorFlow。 在本文中&#xff0c;你将了解如何在 Keras 中开发和评估用于图像识别的深度学习模型。完成本文后&#xff0c;你将了解&#xff1a; 关于 CIFAR-10 对象分类数据集以及如何在…

Pyrene-PEG5-propargyl_1817735-33-3_芘甲酰胺五聚乙二醇丙炔

Pyrene-PEG5-propargyl&#xff0c;芘甲酰胺-五聚乙二醇-丙炔Product structure&#xff1a;Pyrene-PEG5-propargyl结构式Product specifications&#xff1a;1.CAS No&#xff1a;1817735-33-32.Molecular formula&#xff1a;C30H33NO63.Molecular weight&#xff1a;503.64.…