牛骨文教育服务平台(让学习变的简单)
博文笔记

Java heap space

创建时间:2017-06-15 投稿人: 浏览次数:422
java.lang.OutOfMemoryError:     Java heap space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1022)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473)

at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1416)


使用Tomcat 7.0  做ssh项目时遇到这个错误    后来重装Tomcat 后 项目能成功运行了


后来百度后 在菜单栏 点击 MyEclipse--Preferences ---- Servers  ---Tomcat --- Tomcat 7.x  --- JDK  ---optional  Java VM arguments 框内写入如下信息也可解决


-Xmx1024M -Xms512M -XX:MaxPermSize=256m



三种可能导致OutOfMemoryError。

   第一种,此JVM有真实的内存泄漏,导致此JVM堆在内部实现时产生了一个Bug。这极不可靠。所有JVM都经过充分的测试,并且,如果有人发现这种bug,它将绝对是最高的优先级。因此你可以非常宽心地排除这种可能性。

   第二种可能的OutOfMemoryError原因只不过是,你没有为你的应用程序运行时给予足够多的可用内存。这种情况,有两种可能的方案,或者增加 JVM堆可用大小,或者减少你的应用程序所需的内存总量。提高JVM可用堆大小可以简单的使用JVM的 -Xmx 参数。假如你将此参数设置尽可能的大(可用内存极限不要超过系统物理内存,否则你的应用程序将分页并暂停),仍然有以上所提到的内存问题,那么,你需要减 少你的应用程序所可能用到内存总量。减少应用程序内存可能是简单的,你可能允许一些集合过大,例如使用了许多大的缓冲区。或者它过于复杂,要求你重新实现 一些类,乃至重新设计应用程序。读者 Jams Stauffer 指出有些JVM(例如 sun的 JVMs),还有一个“Perm”参数用来处理JVM结构与类对象。如果你正在使用一个数量非常巨大的类集,它有可能运行在"Perm"空间之外,然后你 需要增加此空间的大小,例如,sun的JVM使用 -XX:PermSize 与 -XX:MaxPermSize 选项。

   第三种导致OutOfMemoryError最为常见,无心的对象引用保持。你没有明确无误的释放对象,以致于你的堆增长再增长,直到你没有额外的空间。



http://tscfengkui.blog.51cto.com/2204656/623458

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。