逃逸分析和标量替换

本文介绍逃逸分析技术,解释如何通过分析对象引用情况决定对象是否能在栈上分配,减轻垃圾回收压力。同时讨论了标量替换的概念及其对内存分配的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逃逸分析

   用来确认对象是否被引用,如果不会逃逸(就是没有被引用),可以将该对象在栈上进行分配内存,让对象所在内存随着栈帧出栈而销毁,减轻垃圾回收的压力,减少临时对象在堆上分配内存。

例如:

开启逃逸分析参数-XX:+DoEscapeAnalysis,JDK7后默认开启逃逸分析,关闭把+改成-

使用标量替换优先分配在栈上。

标量替换

 通过逃逸分析确认对象不会逃逸后 ,将对象进一步分解成多个标量,将这些标量分配到栈上或者寄存器上分配内存空间,这样不会因为没有一大块连续空间导致对象内存不够分配。

开启标量替换参数(-XX:+EliminateAllocations),JDK7默认开启。

标量与聚合量:

  标量即不可被进一步分解的量,而JAVA的基本数据类型就是标量(如:int,long等基本数据类型以及 reference类型等),标量的对立就是可以被进一步分解的量,而这种量称之为聚合量。而在JAVA中对象就是可以被进一 步分解的聚合量。

结论:栈上分配依赖于逃逸分析和标量替换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值