我是一个c++程序员,我对java略知一二。我知道java程序员不必像C++那样直接使用内存。我还知道C++应用程序中的大多数崩溃都是由于内存损坏造成的。
那么,用Java编写的应用程序是否会因为内存相关问题而崩溃呢?
谢谢
发布于 2010-05-19 16:28:51
与其他一些答案相反,我认为Java程序崩溃的频率与C++程序一样高,甚至可能更高。
通过“崩溃”,大多数人理解为程序遇到了一个没有得到正确处理的错误,从而导致应用程序终止。当然,这种情况会发生,与Java处理内存的方式无关。
这是一件好事。使C++变得如此危险和相对安全的原因正是这样一个事实,即在C++可以愉快地继续运行的情况下,尽管做了非常错误和潜在的危险事情(例如写入未初始化的内存、溢出缓冲区、…),Java也会崩溃。。Java的崩溃(例如抛出异常)可以防止更严重的破坏。另一方面,C++应用程序(由于错误终止失败)可能会损坏外部数据或系统。或者,他们可能只是带来了一个错误的(但看似合理的)结果。
Java防范的是这些危险,而不是崩溃本身。
发布于 2010-05-19 16:17:20
java可能会崩溃。
原因可能是..
OutOfMemoryError
StackoverFlowError
OutOfMemoryError: PermGen space.当Java Virtual Machine由于内存不足而无法分配对象,并且垃圾收集器无法提供更多的内存时抛出OutOfMemoryError。
如果出现执行堆栈溢出错误,则会抛出StackoverFlowError StackOverflowException,这通常发生在非常深的或无限递归的情况下。
OutOfMemoryError: PermGen空间详细消息PermGen空间表示永久生成已满。永久生成是堆中存储类和方法对象的区域。如果应用程序加载了非常多的类,那么可能需要使用-XX:MaxPermSize选项增加永久生成的大小。
这个问题是关于可能导致崩溃的内存问题。
其他可能导致崩溃,但可以被程序捕获并从可能的情况下恢复的问题是任何runtimeExceptions。即
ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,
我不会在这里讨论这些。但是看一看...link text
发布于 2010-05-19 16:19:15
是的,它可以:)
public void test() {
test();
}这将使用StackoverFlowError崩溃。还有一些其他的-例如,耗尽内存也会导致崩溃(OutOfMemoryError)。
https://stackoverflow.com/questions/2863836
复制相似问题