我一直在学习堆栈和堆,特别是堆栈和它的LIFO方法.
这是否适用于方法中的嵌套块,并且可以用于提高性能,例如
public void Test() {
int i = 5;
// do something with i
int j = 5;
// do something with j
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,仅在方法结束时,i和j将从堆栈中释放.
以下会更有效吗?(我知道它的一个简单的程序.....)或者释放的努力是否会更多地节省堆栈的大小?
public void Test() {
{
int i = 5;
// do something with i
}
{
int j = 5;
// do something with j
}
}
Run Code Online (Sandbox Code Playgroud)
这仅仅是为了示例目的,我知道我可以重构这个等等.我只对方法中的内存发生了什么感兴趣....
无论如何,堆栈被分配给整个方法调用.
这里是其中添加额外的模块可以帮助一些微妙的情况下,在拍摄的变量而言-如果你有两个lambda表达式,其中一个捕获i和捕获一个j,然后在第一种情况下,你会最终合成类捕获两个变量,而在第二种情况下,您最终会得到两个类...至少在当前实现中.
如果没有变量捕获,JIT 至少可能会注意到您一次只使用一个变量,并优化为两者重用相同的堆栈空间.
像这样的微优化对性能产生重大影响是非常罕见的,但它们可能会产生非常显着的可读性影响...所以我只会在以下情况下开始使代码不易读取: