当前位置: 首页 > 面试题库 >

什么破坏了Java中的局部变量?

卫增
2023-03-14
问题内容

我怀疑方法局部变量仅在方法执行时有效。同样,当EdenLong- generation块溢出时(次要/主要GC)等Eden触发GC。因此,如果方法主体末尾没有溢出怎么办,那么就无需触发GC。尽管不触发主要/次要GC,我们仍将销毁所有局部变量。怎么做?


问题答案:

垃圾收集器-
有时称为“收割者”-按自己的时间表运行,并收集不参考的对象。当然,方法退出后就无法引用局部变量,因为它们超出了范围,因此它们对于您的程序来说是死的*,但是它们仍然存在于堆中,直到GC运行为止。

在正常情况下(和大多数异常情况),您无需告诉收割机何时进行工作。当需要它时,它会静默地来,带走那些不再需要的东西。这是使用高级语言进行工作的主要优点之一:可以安全地假设您不需要考虑诸如管理死对象的重新分配之类的事情。您可以将它们抛在肩上,知道它们永远不会打扰您。我想有些高性能,高需求的应用程序需要使用GC进行摆弄,但这是一种优化,除非您有确凿的证据相反,否则应该始终将其视为过早的优化。

*当然,对于返回到调用函数的局部变量,它可能会成为该范围内的局部变量,并且会增加寿命。通常,规则是:如果代码的某些部分仍在乎该变量,则不会对其进行垃圾回收,并且如果程序的任何部分都在乎该变量,则无需考虑它。



 类似资料:
  • 问题内容: 我是一个经验丰富的php开发人员,刚开始学习Java。我目前正在学习Lynda的一些课程,但我仍处于初期阶段。我正在编写要求用户输入并进行简单计算和操作的示例程序。 昨天我遇到了这种情况: 用我的穴居人的大脑,我会思考,但不是,不是Java。明显地。是的,我知道如果将其中一个操作数更改为双精度,结果也将是双精度。 这实际上吓到我了。我禁不住认为这是很糟糕的。认为整数除法会导致整数是非常

  • 问题内容: 为了使AngularJS在IE7和IE8中工作,我向ng-app元素添加了id =“ ng-app”和class =“ ng-app”: 过去一直如此,但是现在我将class =“ ng-app”添加到了两个不同的项目中,并且在这两个视图中不再在任何浏览器中呈现该视图。IE7 / 8兼容性的方式已更改吗?我正在使用CDN的1.0.2版本。 谢谢。 问题答案: 编辑说明: 添加docty

  • 帮我理解这个...参见粗体。从标准3.6.3终止(2) 如果一个函数包含一个静态或线程存储持续时间的块作用域对象,该对象已经被破坏,并且该函数在一个静态或线程存储持续时间的对象被破坏期间被调用,如果控制的信息通过了先前被破坏的blockscope对象的识别,则该程序具有未被修改的行为。同样,如果块作用域对象在销毁后被间接使用(即通过指针),则该行为将被忽略。 有人对此有明确的见解吗?

  • 这是我的pom.xml文件的节选: 这是Tomcat版本: 编译之后(用Maven),一切看起来都很好,没有构建错误,构建了war文件,一切都很好,就像以前的任何其他构建一样。只有现在,我尝试命中的任何endpoint都返回404,如果我移除'spring-boot-starter-jdbc'依赖项,则全部返回正常。 没有依赖项得日志: 具有依赖项得日志: 我看到日志中提到了“数据源”,这是我在a

  • 问题内容: 在C / C ++中,我们使用静态局部变量来维护方法的状态。但是,为什么Java不支持它呢? 是的,我可以为此使用一个静态字段。但是创建一个仅维护一个方法状态的字段有点奇怪吗? 问题答案: 您已经找到了唯一的解决方案。 Java放弃了C ++的许多复杂性,这就是其中之一。 作用于函数的静态变量并发地对您造成麻烦(例如,正是由于这个原因,strtok是与pthread一起使用的著名的讨厌

  • 本文向大家介绍Java中的局部变量,包括了Java中的局部变量的使用技巧和注意事项,需要的朋友参考一下 局部变量在方法,构造函数或块中声明。 输入方法,构造函数或块时将创建局部变量,并且一旦退出方法,构造函数或块,该变量将被销毁。 访问修饰符不能用于局部变量。 局部变量仅在声明的方法,构造函数或块内可见。 局部变量在内部在堆栈级别实现。 局部变量没有默认值,因此应声明局部变量,并应在首次使用前分配