【问题标题】:What will happen if java didn't collect garbage?如果java不收集垃圾会发生什么?
【发布时间】:2016-04-02 13:29:54
【问题描述】:

我的问题非常清楚.. 如果它不收集垃圾会发生什么
以及为什么在 c++ 中不会发生这种情况

【问题讨论】:

  • 是什么让你认为它不会在 C/C++ 中发生?

标签: java garbage-collection


【解决方案1】:

如果不收集陈旧的对象,您将遇到 OutOfMemoryError。如果你不清理旧数据,这也会发生在 C++ 中(错误可能不称为 OutOfMemoryError,但我猜结果是一样的)。

【讨论】:

  • 在 C 中,malloc() 将失败并返回 NULL。在 C++ 中,new 将抛出 bad_alloc,除非指定了 (nothrow),在这种情况下将返回 NULL。
  • 好吧,我在 C/C++ 方面没有太多经验(已经有几年了)。程序会崩溃,还是你能以某种方式发现这些错误并解决这个问题?
  • @dunni 如果这是你想知道的,你应该问这个
  • @dunni 在某些方面它非常像 Java。如果抛出异常但未处理,程序将终止。如果返回 NULL 指针并且您尝试取消引用它,则程序很可能会崩溃(例如,总线错误)。在 C/C++ 中并没有像 NullPointerException 这样的东西。您可以在 C/C++ 中发现这些错误,对于 C(即malloc()),您绝对应该这样做!
【解决方案2】:

它确实发生在 C/C++ 中。以不同的方式。在 C/C++ 中,程序员的责任更多地在于跟踪分配的内存并释放它。程序员可以通过指针的形式直接访问内存。在java中,它对程序员都是隐藏的。您不需要跟踪内存,JVM 以垃圾收集的形式为您完成。这并不意味着您可以巧妙地为对象分配内存。全局对象被长期保留,如果 GC 不能及时到达,内存超出限制,发生 OutOfMemoryException。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多