Java程序会崩溃吗?

2022-09-01 16:29:25

我是一个C ++程序员,我对java有一点了解。我知道java程序员不必像C++那样直接使用内存。我也知道,C++应用中的大多数崩溃都是由于内存损坏造成的。

那么,用Java编写的应用程序会因为内存相关问题而崩溃吗?

谢谢


答案 1

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

通过“崩溃”,大多数人都知道程序遇到未正确处理的错误,导致应用程序终止。好吧,这当然会发生,并且与Java处理内存的方式无关。

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

Java保护的正是这些危险,而不是防止崩溃本身


答案 2

Java可能会崩溃。

原因可能是..

OutOfMemoryError
StackoverFlowError
OutOfMemoryError: PermGen space.

内存不足错误当 Java 虚拟机无法分配对象时引发,因为该对象内存不足,并且垃圾回收器无法再提供更多内存。

StackoverFlowErrorStackOverflowException 针对执行堆栈溢出错误而引发,通常是在非常深或无界的递归的情况下。

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

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

其他可能导致崩溃,但可以被程序捕获并从可能中恢复的问题是任何运行时异常。即

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, Can notRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException,NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmomodifiableSetException, UnsupportedOperationException

我不会在这里讨论这些。但看看...链接文本


推荐