Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “新”的范围,没有“免费”计数器部分_Java_Garbage Collection - Fatal编程技术网

Java “新”的范围,没有“免费”计数器部分

Java “新”的范围,没有“免费”计数器部分,java,garbage-collection,Java,Garbage Collection,我注意到Java中没有免费关键字,这让我问为什么。 创建新对象或数组时,该变量的作用域是什么 我熟悉C++,C. 范围取决于您创建新变量或对象的位置。 如果创建为实例变量/对象,则其作用域就是该实例 如果创建为类变量/对象静态,则其作用域为classloader 如果创建为局部变量/对象静态,则其作用域适用于该方法 如果对象不可访问,则无论作用域如何,它都有资格使用GC。作用域取决于您创建新变量或对象的位置 如果创建为实例变量/对象,则其作用域就是该实例 如果创建为类变量/对象静态,则其作用域

我注意到Java中没有免费关键字,这让我问为什么。 创建新对象或数组时,该变量的作用域是什么


我熟悉C++,C.

范围取决于您创建新变量或对象的位置。

如果创建为实例变量/对象,则其作用域就是该实例

如果创建为类变量/对象静态,则其作用域为classloader

如果创建为局部变量/对象静态,则其作用域适用于该方法


如果对象不可访问,则无论作用域如何,它都有资格使用GC。

作用域取决于您创建新变量或对象的位置

如果创建为实例变量/对象,则其作用域就是该实例

如果创建为类变量/对象静态,则其作用域为classloader

如果创建为局部变量/对象静态,则其作用域适用于该方法

如果对象不可访问,则无论作用域如何,它都符合GC的条件

变量不包含Java中的对象,它们包含原语值或对象引用重要区别:仅仅因为变量超出范围,并不意味着对象可以被垃圾收集,它可能仍然可以通过其他引用访问 变量的范围与C/C非常相似++ 局部变量的块或方法 对象,用于非静态字段或 用于静态字段的类 对象不再可访问时(不是立即,而是最终)会被垃圾收集。 变量不包含Java中的对象,它们包含原语值或对象引用重要区别:仅仅因为变量超出范围,并不意味着对象可以被垃圾收集,它可能仍然可以通过其他引用访问 变量的范围与C/C非常相似++ 局部变量的块或方法 对象,用于非静态字段或 用于静态字段的类 对象不再可访问时(不是立即,而是最终)会被垃圾收集。
在Java中,对象的寿命和局部变量的作用域关系不大。e、 g

File f = new File("a");
f = new File("b"); 
// variable f is still in scope but the first object can be cleaned up.


在Java中,对象的寿命和局部变量的作用域关系不大。e、 g

File f = new File("a");
f = new File("b"); 
// variable f is still in scope but the first object can be cleaned up.


变量具有标准作用域:方法或块,除非它是实例变量。变量我的意思是原语或引用保留在堆栈上,而对象和数组甚至原语数组始终保留在堆上

对象数组也是一个对象,当然也可以从变量范围中传递出来并保留在那里。只要对象是可到达的,它就存在。有一种方法可以通过引用图到达它。这与范围无关


另一方面,变量始终存在于一个范围内。无法将其传递到任何位置并进行修改。引用总是传递给方法并作为副本返回。

变量具有标准作用域:方法或块,除非它是实例变量。变量我的意思是原语或引用保留在堆栈上,而对象和数组甚至原语数组始终保留在堆上

对象数组也是一个对象,当然也可以从变量范围中传递出来并保留在那里。只要对象是可到达的,它就存在。有一种方法可以通过引用图到达它。这与范围无关


另一方面,变量始终存在于一个范围内。无法将其传递到任何位置并进行修改。引用总是传递给方法并作为副本返回。

Java已经实现了自动垃圾回收。但是您无法知道它何时被释放。所以,它在时间上也有一个范围!您将对象与变量混淆。而且,这不是java特有的,C和C++有相同的区别,它更重要。新的/免费的内存管理属于范围管理的范畴。@ JoajimSouER是的,虽然这些可以在C++中与RAII一起使用很长的路,但我不会调用任何一个不知道C++程序员的区别的人,一个C程序员甚至不能正确地编写最简单的程序,当然这是偶然的。Java有一个自动垃圾收集。但是你不知道它什么时候被释放。所以,它在时间上也有一个范围!您将对象与变量混淆。而且,这不是java特有的,C和C++有相同的区别,它更重要。新的/免费的内存管理属于范围管理的范畴。@ JoajimSouER是的,虽然这些可以在C++中与RAII一起使用很长的路,但我不会调用任何一个不知道C++程序员的区别的人,一个C程序员甚至不能正确地编写最琐碎的程序,当然这是偶然的。不管存在多少对对象的引用,对象都可以而且应该被收集。只有可达性才重要。无论存在多少对对象的引用,都可以而且应该收集对象。只有可达性才重要。这里也一样:是否有对对象的引用并不重要
提交给总承包商;重要的是对象是否可访问。如果你真的想精确,你应该提到Java中的弱引用、软引用和虚引用。。。这超出了问题的范围。当然,“丰富性”是正确的术语。对于初学者来说,这些区别可以也可能应该被忽略。但是has-reference而不是is-reachable是一种误导,即使对于初学者来说,如果他们足够聪明,能够想到周期的话。环顾四周,GCs是否能够处理这些问题还有很多疑问。我认为我们应该从bat开始正确地解释这一点,以防止误解。这里也是:是否存在对对象的引用对GC并不重要;重要的是对象是否可访问。如果你真的想精确,你应该提到Java中的弱引用、软引用和虚引用。。。这超出了问题的范围。当然,“丰富性”是正确的术语。对于初学者来说,这些区别可以也可能应该被忽略。但是has-reference而不是is-reachable是一种误导,即使对于初学者来说,如果他们足够聪明,能够想到周期的话。环顾四周,GCs是否能够处理这些问题还有很多疑问。我认为我们应该从一开始就正确地解释这一点,以防止误解。