1.所有被new出来的实例都是存放在堆里的吗?Android面经

news2024/11/16 3:30:39

问题: 所有被new出来的实例都是存放在堆里的吗?

相关知识点: 堆和栈、标量替换、栈上分配、逃逸分析

思考:
首先,这样问了,答案肯定是不是所有new出来的实例都存放在堆里,不然下面没法继续问了。
如果有存在栈里的,和存在堆里有什么区别?
存在栈里有什么好处?
如果存在栈里好处这么多,那么为什么还要存在堆里?
栈里能不能存new出来的实例?

在这里插入图片描述
上图为一个User类,如果将new出来的实例 把int类型的id变量和string类型的name变量存放于栈的局部变量表中,login()存放于方法区。
把堆中的数据结构等价的平移替换到局部变量表中,这样的操作叫做标量替换
在栈上分配空间存放实例叫做栈上分配
因此,在栈上存放实例是可行的。

在栈上存放实例,好处是什么?

这里涉及到的就是堆和栈的区别,以及栈的特点。
好处就是一旦方法执行完毕,整个运行时栈帧就会出栈,局部变量自然也会出栈。实例如果存在于局部变量表中,局部变量表出栈后,实例也会被销毁。销毁过程不依赖GC,没有额外的开销。
实例出栈即销毁,不依赖GC,没有额外的开销。

什么情况不能把实例存在栈里
  • 栈是线程私有的,当其他线程访问外部实例时,不能用栈来存储实例,会调用不到。
  • 当存在逃逸分析情况时,是不能存在于局部变量表里的。

什么是逃逸分析?
参考逃逸分析解释原文链接

逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术。这是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。

逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。

public static StringBuffer craeteStringBuffer(String s1, String s2) {
    StringBuffer sb = new StringBuffer();
    sb.append(s1);
    sb.append(s2);
    return sb;
}

StringBuffer sb是一个方法内部变量,上述代码中直接将sb返回,这样这个StringBuffer有可能被其他方法所改变,这样它的作用域就不只是在方法内部,虽然它是一个局部变量,称其逃逸到了方法外部。甚至还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸。

public static String createStringBuffer(String s1, String s2) {
    StringBuffer sb = new StringBuffer();
    sb.append(s1);
    sb.append(s2);
    return sb.toString();
}

如果将sb转为字符串,不存在逃逸分析的情况,即可满足栈上分配的要求。

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

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

相关文章

MODBUS转PROFINET网关在冷水机项目中应用

在电镀行业中,需要频繁用到冷水机,电镀产品在焊接过程中会产生大量的热量,这些热量若不及时散除,则有可能会导致待加工的电镀产品发生大变形,本案例的目的是通过微硬创新MODBUSRTU转PROFINET网关连接冷水机和PLC&#…

安卓玩机搞机技巧综合资源-----修复基带 改串码 基带qcn 改相关参数 终结贴

有需要了解这方面常识的友友梦可以先参阅我这几个帖子 请点击跳转 基带qcn的备份与写入相关 格机 nv报错 高通联机修改IMEI等参数的相关解析 关于高通QPST平台功能和选项的一些简单说明 基带qcn的备份与写入相关 格机 nv报错 以上几个帖子可以初步了解基带 串码等参数方面…

面试官:如何用Excel进行预测分析?这操作绝了!

【面试题】一个社交APP, 它的新增用户次日留存、7日留存、30日留存分别是52%、25%、14%。请模拟出来,每天如果日新增6万用户,那么第30天,它的日活数会达到多少?请使用Excel进行分析。【分析思路】第1日(次日)留存用户数第1日新增用…

筛选用户权限子集记录

【问题】Is there a way to use the $map operator in a regular Mongo document query (or aggregate \$match which I believe is the same thing).What I’m trying to do is thus: Given an set of sets, return the document if any of the sets is a subset of a paramet…

SpringBoot+VUE前后端分离项目学习笔记 - 【12 Vue使用路由】

整体代码结构 Manage.vue HomeView.vue改名为Manage.vue,用以管理其他view页面【通过import 】 <template><el-container style"min-height: 100vh"><el-aside :width"sideWidth px" style"box-shadow: 2px 0 6px rgb(0 21 41 / 3…

年终盘点:元宇宙产业委多项成果荣登元宇宙行业影响力榜单

在经过了2021年元宇宙概念落地和普及后&#xff0c;2022年成为元宇宙相关产业井喷式发展的一年。元宇宙产业委在2022年多项成果荣登行业影响力榜单。 2021-2022元宇宙科技传播图书影响力榜发布&#xff0c;元宇宙产业委好书上榜 2022年9月&#xff0c;两办印发《关于新时代进一…

Internet Download Manager2023最新永久版下载及功能介绍

提到下载工具&#xff0c;大多数国人映入脑海的或许是迅雷。没错&#xff0c;当今随着互联网的迅猛发展&#xff0c;不少早期积累大量用户的国内外下载工具尽显疲态&#xff0c;止步不前&#xff0c;纷纷掉队&#xff0c;如网络快车、FDM、脱兔等等。一款名叫Internet Download…

Anaconda(python)安装教程以及创建新环境

文章目录一. Anaconda简介二. Anacoda安装1. Anacondad下载2. 安装方式三.通过conda创建新的环境四.conda常用命令一. Anaconda简介 Anaconda介绍&#xff1a;开源的Python发行版本。Anaconda指的是一个开源的Python发行版本&#xff0c;其包含了conda、Python等180多个科学包…

make_shared与new

假设有这么个类&#xff1a; class A {private:int b;public:A(int c):b(c) { cout << "call constructor..." << endl;}~A() { cout << "call destructor..." << endl;}int getValue() { return b;} }; 当创建指向 A 对象的智能…

【测绘程序设计】——附合导线近似平差

附合导线(Connecting Traverse,CT)近似平差是测绘专业九大核心专业基础课——《数字地形测量学》中的重点内容,其程序设计也是测绘学子必修的课程设计之一。本文分享了测绘程序设计——附合导线近似平差(C++/MFC版),相关源代码(完整工程,包含测试数据)及使用示例(结果…

CLion开发环境的完全解析(QT开发?STM32?顺便速通cmake

文章目录下载与安装主题推荐编辑器与clang-format设置鼠标滚轮改变字体大小clang-format的使用我的 .clang-format 配置编译工具链设置编译工具链的添加与解释cmake配置项的添加与解释cmake的使用与实战常用的cmake变量&#xff08;入门&#xff09;常用的cmake命令&#xff08…

融合通信系统建设建议(华脉智联内参一)

各行业融合通信系统建设建议 让通信融合信息无阻 题记&#xff1a;目前各个行业都已建设了视频监控系统、内部电话系统、无线对讲机系统、公共广播系统、会场音频系统、视频会议系统等。这些通信系统各自解决不同的用户需求&#xff0c;随着技术的发展&#xff0c;以及融合通信…

腾讯安全连续三年列为Gartner在线反欺诈市场指南全球代表厂商

近日&#xff0c;全球研究机构Gartner发布了2022《在线反欺诈市场指南》&#xff08;Market Guide for Online Fraud Detection&#xff09;。腾讯安全凭借天御&#xff08;TenDI&#xff09;金融风控被列为全球代表性厂商&#xff0c;这也是腾讯安全连续第三次被列入该报告。随…

洛谷千题详解 | P1031 [NOIP2002 提高组] 均分纸牌【C/C++、pascal、Java语言】

博主主页&#xff1a;Yu仙笙 专栏地址&#xff1a;洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析&#xff1a; C源码&#xff1a; pascal源码&#xff1a; pascal源码2&#xff1a; Java源码&#xff1a; ------------------------------------------------…

很穷的top2农村男博士要不要嫁?

这个问题最近在知乎上面很火&#xff0c;经常能刷到&#xff0c;具体背景如下&#xff1a;我自己家也是农村的&#xff0c;家里比较穷&#xff0c;我就读的学校肯定比不上top2&#xff0c;但也还不错&#xff0c;是个C9&#xff0c;所以这个问题想和大家简单聊一下我的看法。知…

JavaScript刷LeetCode拿offer-栈相关题目

1. 栈是什么&#xff1f; 一种先进后出的数据结构&#xff1b;JavaScript没有栈的结构&#xff1b;可以用array实现栈的功能 入栈 push(x);出栈 pop(); const stack [];// 入栈 stack.push(1); stack.push(2);// 出栈 const item1 stack.pop(); const item2 stack.pop();2…

GC日志分析

1.写在前面 前段时间一位读者面了阿里&#xff0c;在二面中被问到 GC 日志分析&#xff0c;感觉回答的不是很好&#xff0c;过来找我复盘&#xff0c;大致听了他的回答&#xff0c;虽然回答出了部分&#xff0c;但是没抓到重点。 GC 日志分析算是 JVM 调优中比较难的部分&…

【python数据分析】对淘商品类母婴购物数据进行分析(含完整源码)

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 一、数据集 ​ 今天我们来看一个来着阿里云天池的数据集:淘母婴购物数据,有两个csv文件: 1、mum_baby.csv 它包含了953个孩子的生日和性别信息&#xff0c;这些信息是由淘或tian猫的消费者提供的…

足球视频AI(四)——队伍与裁判人员分类

一、基础概念 足球比赛中人员为&#xff1a;A队11人、B队11人、裁判&#xff0c;其中我们暂时不研究守门员。 需要将球场中的人员分类&#xff0c;并呈现在2D看板中。 1.1识别目标&#xff1a; 1&#xff09;球场中的白队 2&#xff09;球场中的蓝队 3&#xff09;球场中的…

剑指offer----C语言版----第九天

目录 1. 剪绳子 1.1 题目描述 1.2 基础知识 1.2.1 动态规划 1.2.2 贪婪算法 1.3 思路一&#xff1a;动态规划 1.4 思路二&#xff1a;贪婪算法 1.5 思路一的优化 1. 剪绳子 原题链接&#xff1a;剑指 Offer 14- I. 剪绳子 - 力扣&#xff08;LeetCode&#xff09;http…