JVM内存管理与GC详解:从多进程到并行收集

需积分: 3 1 下载量 116 浏览量 更新于2024-09-14 收藏 99KB DOCX 举报
本文主要介绍了JVM相关的概念,包括多进程、多线程、并发与并行的区别,以及GC(垃圾收集)的动作、算法和JVM堆内存结构。 在计算机系统中,多进程是指系统中同时运行着多个独立的程序,如同时打开Word、Excel和PPT。多进程使得用户可以同时进行多项任务,提高工作效率。而多线程则是指单个程序内部可以同时执行多个不同的执行流,例如迅雷同时下载多个资源。多线程可以在单个CPU内核中复用,实现并发执行,即微观上轮流执行,宏观上看似同时进行。并发处理会经历排队、唤醒和执行等步骤。并行则是指在多核CPU环境下,多个线程真正同时处理,不存在竞争和等待,通常能带来更高的计算性能。 在Java的虚拟机(JVM)中,垃圾收集(GC)是自动管理内存的重要部分。Minor GC针对新生代进行垃圾回收,会导致短暂的停顿(stop-the-world)。Major或Full GC则针对老年代,通常其执行速度较慢,可能导致更长的系统暂停时间。为了优化,可以通过配置如CMS(Concurrent Mark Sweep)收集器来减少Full GC的影响,如设置CMSScavengeBeforeRemark让CMS在remark阶段前先进行一次Minor GC。 GC算法有多种,包括标记清理、标记整理、复制和分代收集。标记清理和标记整理分别通过标记后清除无用对象和将存活对象移动到内存一端来回收空间,但前者易产生碎片,后者适合老年代。复制算法适用于新生代,将存活对象复制到空闲区域,避免碎片但浪费了内存。分代思想是根据对象生命周期长短将其分配到新生代或老年代,选择合适的收集策略。 在JVM的堆内存结构中,Parallel版本的1.7和1.8默认采用并行收集器,强调系统的吞吐量。堆内存分为新生代和老年代,新生代又细分为伊甸区、幸存区(from和tos空间),这些区域按照对象的生命周期进行分配。例如,伊甸区通常是新创建对象的诞生地,幸存区用于存放经过一次GC仍存活的对象,最终长时间存活的对象会进入老年代。 理解这些JVM基础知识对于Java开发者至关重要,有助于优化程序性能,减少内存泄漏和提高系统稳定性。