【关于Java的堆空间和堆内存】
? ? ? 当我开始Java编程时,我不知道什么是Java堆或Java中的堆空间,我甚至不知道Java中的对象是在哪里创建的,这是我开始进行专业编程时遇到的Tomcat 中出现 java.lang.OutOfMemoryError错误,然后我意识到什么是 Java 中的堆或 Java 堆空间。大多数程序员都会遇到这种情况,因为学习语言很容易,但学习基础知识却很困难,因为没有正式的过程可以教你编程的每一个基础知识,以及揭示编程秘密的经验和工作。
??????对于Java开发者来说,了解Java中的Heap、设置Java堆空间的大小、处理Java堆空间OutOfMemoryError、分析堆转储非常重要。
Java中的堆空间是什么?
当 Java 程序启动时,Java 虚拟机从操作系统获取一些内存。Java 虚拟机或 JVM 使用此内存来满足其所有需求,并且此内存的一部分称为 java 堆内存。
Java中的堆一般位于地址空间的底部并向上移动。每当我们使用 new 运算符或通过任何其他方式创建对象时,都会从堆中为该对象分配内存,当对象死亡或被垃圾回收时,内存会返回到 Java 中的堆空间。
Java 堆和垃圾收集
众所周知,对象是在堆内存中创建的,垃圾收集是一个从 Java 堆空间中删除死对象并将内存返回到 Java 堆的过程。为了进行垃圾收集,堆被分为三个主要区域,分别称为新生代、老一代或终身代以及永久代。新一代Java堆是Java堆内存的一部分,其中存储了新创建的对象,在应用程序的过程中,许多对象被创建并死亡,但这些对象仍然存在,它们被Java垃圾收集器线程移至旧代或终身代。主要或完全垃圾收集。?
?
Java 堆中的 OutOfMemoryError
当 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永久代发生时出现:已满,应用程序将无法加载类或分配实习字符串。
总结:关于Java堆空间的10点
2. 每当我们创建对象时,它们都是在 Java 的堆中创建的。
3. 为了进行垃圾回收,Java 堆空间被分为三个区域或代,称为“新生代”、“旧代”或“永久代”或“永久空间”。永久代是在热点 JVM 中的 full gc 期间进行垃圾收集的。
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!