? ? ? 当我开始Java编程时,我不知道什么是Java堆或Java中的堆空间,我甚至不知道Java中的对象是在哪里创建的,这是我开始进行专业编程时遇到的Tomcat 中出现 java.lang.OutOfMemoryError错误,然后我意识到什么是 Java 中的堆或 Java 堆空间。大多数程序员都会遇到这种情况,因为学习语言很容易,但学习基础知识却很困难,因为没有正式的过程可以教你编程的每一个基础知识,以及揭示编程秘密的经验和工作。
??????对于Java开发者来说,了解Java中的Heap、设置Java堆空间的大小、处理Java堆空间OutOfMemoryError、分析堆转储非常重要。
当 Java 程序启动时,Java 虚拟机从操作系统获取一些内存。Java 虚拟机或 JVM 使用此内存来满足其所有需求,并且此内存的一部分称为 java 堆内存。
Java中的堆一般位于地址空间的底部并向上移动。每当我们使用 new 运算符或通过任何其他方式创建对象时,都会从堆中为该对象分配内存,当对象死亡或被垃圾回收时,内存会返回到 Java 中的堆空间。
当 JVM 启动时,JVM 堆空间等于 -Xms 参数指定的堆的初始大小,随着应用程序的进展,会创建更多对象,并且堆空间会扩展以容纳新对象。JVM 还会定期运行垃圾收集器,以从死亡对象中回收内存。
JVM 将 Java 中的堆扩展到接近 -Xmx 指定的最大堆大小,并且如果没有更多内存用于在 java 堆中创建新对象,JVM 会抛出 java.lang.OutOfMemoryError 并且您的应用程序将终止。
在抛出OutOfMemoryError No Space in Java Heap之前,JVM 会尝试运行垃圾收集器来释放任何可用空间,但即使在 Java 堆上没有太多可用空间之后,它也会导致 OutOfMemoryError 。
要解决此错误,你需要了解应用程序对象配置文件,即您正在创建什么类型的对象、哪些对象占用了多少内存等。你可以使用探查器或堆分析器来排除 Java 中的 OutOfMemoryError 错误。“ java.lang.OutOfMemoryError?: Java heap space”错误信息表示Java堆没有足够的空间,无法进一步扩展,而“java.lang.OutOfMemoryError: PermGen space”错误信息则在Java Heap永久代发生时出现:已满,应用程序将无法加载类或分配实习字符串。
?