Java程序会崩溃吗?

Sat*_*bir 26 c++ java crash

我是一名c ++程序员,我对Java知之甚少.我知道java程序员不必像C++一样直接使用内存.我也知道C++应用程序中的大多数崩溃都是由于内存损坏造成的.

因为与内存相关的问题,用Java编写的应用程序是否会崩溃?

谢谢

Kon*_*lph 49

与其他一些答案相反,我声称Java程序会经常崩溃,甚至可能比C++程序频繁地崩溃.

通过"崩溃",大多数人都明白程序遇到的错误未得到妥善处理,导致应用程序终止.嗯,这当然发生了,与Java处理内存的方式无关.

这是一个很好的事情.是什么让C++变得如此危险,而Java相对安全,恰恰相反,Java 在C++很乐意继续运行的情况下崩溃,尽管做了非常错误和潜在危险的事情(例如写入未初始化的内存,溢出缓冲区......) .Java的崩溃(例如抛出异常)可以防止更严重的破坏.另一方面,C++应用程序(由于未能在错误上终止)可能会损坏外部数据或系统.或者他们可能只是提供了一个错误的(但看似合理的)结果.

Java 正在反对这些危险,而不是反对崩溃本身.

  • +1崩溃比未定义的行为更好.但是,编译错误比两者都好,我认为C++有更好的语义来创建编译时错误. (8认同)

jef*_*ter 16

java可以崩溃.

原因可能是......

OutOfMemoryError
StackoverFlowError
OutOfMemoryError: PermGen space.
Run Code Online (Sandbox Code Playgroud)

OutOfMemoryError 当Java虚拟机由于内存不足而无法分配对象时抛出,垃圾收集器不再提供更多内存.

StackoverFlowError 抛出执行堆栈溢出错误的StackOverflowException,通常是在非常深或无限递归的情况下.

OutOfMemoryError:PermGen space 详细消息PermGen space表示永久生成已满.永久生成是堆的区域,其中存储类和方法对象.如果应用程序加载了大量类,则可能需要使用-XX:MaxPermSize选项增加永久代的大小.

问题是关于可能导致崩溃的内存问题.

其他可能导致崩溃但可以被程序捕获并从posibilty恢复的问题 是任何runtimeExceptions.即

ArithmeticException,ArrayStoreException信息,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException异常,CMMException,ConcurrentModificationException的,抛出:DOMException,的EmptyStackException,抛出:IllegalArgumentException,抛出:IllegalMonitorStateException,IllegalPathStateException,IllegalStateException异常,ImagingOpException,IndexOutOfBoundsException异常,MissingResourceException异常,NegativeArraySizeException,NoSuchElementException异常,空指针异常,ProfileDataException,ProviderException,抛出:RasterFormatException,抛出:SecurityException, SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException

我不会在这里进入这些.但看看...... 链接文字

  • 你忘了:NullPointerException几乎总是来自哪儿.... (2认同)
  • "Java运行时环境已检测到致命错误:在pc = 0x8fffa62d,pid = 22963,tid = 3065453424时,SIGSEGV(0xb)." 它可能以相当不友好的方式崩溃. (2认同)
  • 没有"OutOfMemoryException"这样的东西.但是,有'OutOfMemoryError`.同样,没有"StackoverFlowException" - 但是"StackOverflowError".准确是很重要的. (2认同)

chr*_*ris 8

是的,它可以 :)

public void test() {
    test();
}
Run Code Online (Sandbox Code Playgroud)

这会崩溃StackoverFlowError.还有其他几个 - 例如,内存不足也会导致崩溃(OutOfMemoryError).

  • `StackOverflowError`,而不是`StackoverFlowException`. (2认同)