我编写了一个小型Java程序,我在其中创建了10个String对象。
有人可以解释或回答以下问题。
public class Test{
static public void main(String[] args){
for (Integer i = 0; i < 10; i ++){
String s1 = new String("Creating new String");
}
System.out.println("Program COmpleted");
}
}
答案 0 :(得分:2)
当我创建一个Object时,我还要确保在使用它后删除该对象。
没有。您无法在Java中显式删除对象。对于某些内存密集型用例,explicitly nullify references对您的对象可能有意义,以帮助垃圾收集器进行清理过程,但在垃圾收集器收集对象本身之前不会删除它。
如果我不删除该对象,该对象是否会在程序结束前撒谎?
没有。一旦没有对它的引用,垃圾收集器将负责删除它。发生这种情况的时间点取决于垃圾收集器 - 此可能也位于应用程序的末尾。
有没有办法在程序运行时检查活动对象的数量?
是的,您可以使用YourKit等分析器。
另见
答案 1 :(得分:1)
创建对象的最佳做法是什么?即;当我创建一个Object时,我也要确保在使用它后删除它。如果,如何删除它?
创建Object的最佳做法就是您想要使用它。
此外,您还需要了解变量范围。
如果我不删除该对象,该对象是否会在程序结束前撒谎?
不,GC会杀死未引用的对象
有没有办法在程序运行时检查活动对象的数量?
您可以使用任何Java分析工具,例如vesualVM
答案 2 :(得分:1)
Java是垃圾收集语言,因此,大多数内存管理和清理都是为您完成的。这与C ++等语言相反,人们必须手动释放未使用的内存,并且通常会对可能的内存泄漏更加谨慎。
解决您的具体问题:
有时,将“清空”未使用的对象引用视为好习惯。这通常仅在特定情况下才适用,例如,请参阅:Does setting Java objects to null do anything anymore?。
不,不一定。如果没有任何内容指向内存中的Object,那么垃圾收集器应该释放未使用的内存。
您可以使用调试器来跟踪逐行执行代码时创建的对象数量(我不确定这是否足够强大,可以满足您的需求)。
答案 3 :(得分:0)
Java有垃圾收集器。垃圾收集器在不再使用时会销毁对象。 你可以在这里找到gc基础知识](http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html)
如果要使用JDK打包的jvisualvm来分析应用程序。如果要以编程方式计算对象,请使用JMX API(读取有关JMX的oracle文档)
答案 4 :(得分:0)
JVM会自动回收不再使用的对象(这称为“垃圾回收”)。当它感觉像这样,并且当用完以前未分配的内存时,会发生这种情况,并将未使用的对象使用的内存返回到未分配的内存池。
您所要做的就是确保没有变量可以通过它来再使用对象 - 通常是通过分配另一个值 - 其余的自动发生。
查看程序使用了多少对象的最简单方法是使用分析器。您可以在JDK中使用visualvm或在Netbeans中免费使用。