对于JVM而言,没有块级别的作用域,在进入方法体时,局部变量所占用的内存就已经在Java栈上分配好了,
直到方法结束,Java栈上的局部变量内存才被回收,不存在方法执行途中回收的问题。
不过要注意,这儿的内存仅仅是指Java栈上的内存(对于对象而言,也就是非primitive的变量,仅仅是对象的引用)
而Java对象所分配的内存,是位于Java堆中。
就楼主的例子,不论holdMemory定义在循环外、或者循环内,都不影响每一次循环中创建的new HoldMemory()的回收,因为,每一次循环的执行,都重写了同一个变量引用,从而导致上一次循环holdMemory对象引用的丢失,即原则上,每开始一个新的循环,上一个循环创建的holdMemory对象都是可回收的,这和holdMemory变量定义在循环体内外无关。
小结一下:
1、Java栈上的局部变量(primitive值、或者对象引用)所占用的内存,在方法结束后,随Java栈的回收而回收,与变量定义在循环体内外无关;
2、Java对象(使用堆内存)在每次循环后,自动丢弃上一次循环所保留的对象引用,从而该对象处于可回收状态。这也和变量定义在循环体内外无关;
3、局部变量定义在循环体内外,仅仅对代码的可读性有影响。对代码执行没有区别。
分享到:
相关推荐
外部变量(在函数外部定义,无`static`关键字)的生命周期与程序相同,但作用域仅限于定义它的文件,除非通过`extern`声明。寄存器变量如前述,试图存储在CPU寄存器中以优化性能。 总的来说,理解和掌握C++中的变量...
C语言中的变量和函数的作用域与生存期是编程中至关重要的概念,它们直接影响到代码的组织和执行效率。首先,我们来详细了解这些知识点。 **作用域(Scope)**: 作用域指的是变量或函数在程序中可见的范围。C语言中...
#### 二、全局作用域与局部作用域 1. **全局作用域** - 定义:在JavaScript中,如果一个变量在任何函数外部声明,则该变量处于全局作用域下。这意味着它可以在程序的任何地方被访问。 - 特性: - 全局变量在整个...
局部变量、全局变量和存储分类。 在 C 语言中,变量是程序中最基本的存储单元。变量可以分为局部变量和全局变量两种。局部变量是指在函数内部定义的变量,仅在该函数内部有效。全局变量是指在函数外部定义的变量,...
理解这两者的区别和作用域对编写高效、可维护的代码至关重要。 1. 局部变量: 局部变量的生命周期始于定义它的代码块开始执行时,终止于代码块结束。这意味着在一个函数内部定义的变量只在该函数内部可访问。在不同...
在C语言中,变量的作用域是程序设计时必须准确理解和使用的概念。变量的作用域决定了变量能够在程序的哪个部分被访问和修改。理解变量的作用域有助于编写出结构清晰、易于维护的代码。 首先,变量可以分为自动存储...
`register`类型试图将变量存储在CPU寄存器中以提高速度,但实际能否实现取决于可用寄存器的数量。`static`类型的变量具有静态存储,无论函数是否被调用,它们的值都会保留。如果在函数内部定义,`static`变量的作用...
在编程语言中,全局变量是一种特殊类型的变量,它的作用域和生存期与函数的存储分类息息相关。本课件将详细介绍全局变量的定义、作用域、生存期和存储分类,并通过实例解释全局变量的使用和注意事项。 一、全局变量...
介绍了C语言的变量的作用域和存储类型,一维字符数组和字符串变量等。
在C#编程语言的学习过程中,从入门到实践的旅程中,掌握变量的使用和理解其作用域是非常关键的步骤。变量是程序中存储数据的基本单元,它们允许我们存储和处理各种信息,比如用户登录名。在C#中,变量的作用域决定了...
3. **变量符号表**:一个假想的概念,用来表示存储当前作用域内的变量的表格结构。 #### 三、PHP变量作用域概述 PHP中的变量作用域主要包括以下几种类型: 1. **全局作用域**:在整个脚本文件范围内都可被访问的...
变量的作用域和生存期是编程语言中的核心概念,它们决定了变量在程序中的可见性和生命周期。在C语言等静态类型的编程语言中,理解这些概念对于编写高效、无误的代码至关重要。 1. **变量的作用域(空间特性)** - ...
"C++ 变量的生命周期和作用域" C++ 中的变量生命周期和作用域是两个相关但不同的概念。变量的生命周期指从变量被分配空间到空间被收回的这个时间段,而变量的作用域则指变量能使用的范围。 变量的声明位置决定了...
2. **全局作用域(Global Scope)**:在函数外部定义的变量具有全局作用域,可以在整个脚本中访问,除非它们被包含在某个函数内部。 ```php $globalVar = "This is a global variable."; function myFunction() ...
【JAVA程序设计与OCJA认证】\n\n在学习JAVA程序设计时,了解变量的作用域是至关重要的基础知识,尤其对于获得OCJA(Oracle Certified Java Associate)认证的考生来说,掌握这一点是必不可少的。变量的作用域决定了...
同时,变量作为存储数据的容器,在JavaScript中拥有不同的作用域规则,决定了变量的可访问范围。 ### 函数的定义和调用 在JavaScript中,函数可以通过两种方式定义,分别是函数声明和函数表达式。函数声明是一种...
全局变量在编程中扮演着特殊的角色,它们是可以在程序任何地方(函数外部)被定义的变量,具有较宽的作用域和较长的生存期。全局变量的存储类别通常为静态存储,这意味着它们在整个程序运行期间都会存在于内存中。 ...
综上所述,了解和掌握C语言中的变量存储类、类型、存在期和作用域,对于编写高效、可靠的程序至关重要。这不仅仅涉及简单的语法知识,还关系到内存管理、程序设计思想以及代码的可维护性。对于初学者而言,通过理解...
"C语言中的变量存储类别和作用域" C语言中变量的存储类别和作用域是非常重要的概念。变量的存储类别决定了变量的生命周期和作用域,而变量的作用域则确定了变量的可见性和生命周期。在C语言中,变量可以分为局部...
变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。下面是 C++ 中各种类型的变量的作用域规则: 1. 全局变量 全局变量是在所有函数体的外部定义的,程序的所有部分(甚至其它...