JMM(Java内存模型)定义了Java程序中多线程并发访问内存的规范。JMM包括主内存、工作内存和内存屏障等概念。
JVM的内存结构包括新生代(Young Generation)、老年代(Old Generation)和永久代(PermGen)(在JDK8及以后版本被元空间(Metaspace)所取代)。
对象内存分配过程包括在堆内存中分配对象空间,并对对象进行初始化。堆内存占用过高的可能原因包括内存泄漏、对象过多、对象过大等。解决方案可以包括优化代码、合理设计对象生命周期、调整堆内存大小等。
G1(Garbage-First)和CMS(Concurrent Mark-Sweep)是JVM中常见的垃圾回收算法。G1是一种面向服务端应用的垃圾回收器,采用分区回收的方式,通过优先处理“最需要回收”的区域来提高垃圾回收效率。CMS是一种并发标记-清除算法,通过在应用程序运行时并发标记和清除垃圾,减少停顿时间。
G1的内存空间结构包括Eden区、Survivor区、老年代和永久代(或元空间)。G1适用于需要短暂停顿时间、低延迟的场景。CMS的内存空间结构包括老年代和永久代(或元空间),适用于需要减少停顿时间、提高吞吐量的场景。