java应用程序开发之jvm基础

java应用程序开发之jvm基础一 Java 中的内存管理 1 程序 无论是代码还是数据 都需要存储在内存中 JVM 为 Java 程序提供并管理所需要的内存空间 2 JVM 内存分为堆 heap 栈 stock 方法区 method 三个区域 分别用于储存不同的数据 3 HotSpot 是 Sun JDK 和 Open JDK 中所带的虚拟机 Sun JDK 和 Open JDK 除了注释 代码实现基本上是相同的 二 堆 1

大家好,我是讯享网,很高兴认识大家。



一、Java中的内存管理
1、程序,无论是代码还是数据,都需要存储在内存中。JVM为Java程序提供并管理所需要的内存空间
2、JVM内存分为堆(heap)、栈(stock)、方法区(method)三个区域,分别用于储存不同的数据。
3、HotSpot是Sun JDK和Open JDK中所带的虚拟机(Sun JDK和Open JDK除了注释,代码实现基本上是相同的)。
二、堆
1、 JVM只有一个堆区,在虚拟机启动时创建,被所有线程共享,堆区不放基本类型(成员变量除外)和对象的引用,只存储对象本身(包括class对象和异常对象)和数组,堆是GC所管理的主要区域(对不需要的对象进行标记,而后进行清除)。
2、堆内存的划分

3、GC流程
  • 基本所有数据都会保存在JVM的堆内存之中。
  • java应用程序开发之jvm基础对于整个的GC流程里面,最需要处理的事是 年轻代 和 老年代 的内存清理操作。
  • 元空间(永久代)都不在GC范围内。

新生代的GC的时候使用复制算法
老年区的GC的时候使用标记-清除算法
垃圾回收的类型
串行GC
并行GC
为并发GC
GC具体流程:
  1. 当现在有一个新生的对象产生,JVM需要为该对象进行内存空间申请。
  2. 先判断Eden区是否有内存空间,如果有,直接将新对象保存在Eden区。
  3. 如果Eden区的内存空间不足,会自动执行一个Minor GC操作,将Eden区无用内存空间进行清理。
  4. 清理Eden区之后继续判断Eden区内存空间情况,如果充足,则将新对象直接保存在Eden区。
  5. 如果执行了Minor GC之后发现Eden区的内存仍然不足,那就判断存活区的内存空间,并将Eden区的部分活跃对象保存在存活区。
  6. 活跃对象迁移到存活区后,继续判断Eden区内存空间情况,如果充足,则将新对象直接保存在Eben区。
  7. 如果存活区也没有空间了,则继续判断老年区,如果老年区充足,则将存活区部分活跃对象保存在老年区。
  8. 存活区的活跃对象迁移到老年区后,则将Eden区的部分活跃对象保存到存活区。
  9. 活跃对象迁移到存活区后,继续判断Eden区内存空间情况,如果充足,则将新对象直接保存在Eden区。
  10. 如果老年区也满了,这时候产生Major GC(full GC)进行老年区的内存清理。
  11. 如果老年区执行Major GC之后发现无法进行对象保存,会产生OutOfMemoryError异常。
堆内存参数调整:(调优关键)

小讯
上一篇 2025-01-02 23:59
下一篇 2025-01-01 09:19

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/5454.html