JVM中的垃圾收集器有哪些,它们的工作原理是什么?

JVM中的垃圾收集器主要包括以下几种:

1、 Serial收集器:它是一个单线程收集器,工作时会暂停所有其他工作线程("Stop-The-World"),它的优点是简单高效(与其他收集器的单线程比),适用于单核处理器的环境。

2、 ParNew收集器:可以看作是Serial收集器的多线程版本,主要用于新生代的垃圾收集,适合多核处理器环境。

3、 Parallel Scavenge收集器:也是一个新生代垃圾收集器,使用多线程收集,注重吞吐量(CPU用于运行用户代码的时间比率)。

4、 Serial Old收集器:是Serial收集器的老年代版本,单线程,采用标记-整理算法。

5、 Parallel Old收集器:是Parallel Scavenge收集器的老年代版本,使用多线程并行收集,目标是提高系统吞吐量。

6、 CMS(Concurrent Mark Sweep)收集器:以获取最短回收停顿时间为目标,使用多线程并发标记和清除算法。

7、 G1(Garbage-First)收集器:采用分区堆(Heap)和增量式垃圾回收,目标是兼顾吞吐量和停顿时间。

JVM中的类加载器有哪些,它们各自的作用是什么?

JVM中的类加载器主要有三种:

1、启动类加载器(Bootstrap ClassLoader):它负责加载存放在<JAVA_HOME>/jre/lib目录中,或者被-Xbootclasspath参数指定的路径中的类库。

2、扩展类加载器(Extension ClassLoader):它负责加载<JAVA_HOME>/jre/lib/ext目录中的类库。

3、应用程序类加载器(Application ClassLoader):它负责加载用户类路径(Classpath)上所指定的类库。

每个类加载器都有其特定的加载范围,这种层次关系保证了Java程序稳定运行。

JVM中垃圾回收的算法有哪些?

JVM垃圾回收的主要算法包括:

1、标记-清除算法(Mark-Sweep):先标记出所有需要回收的对象,然后统一清除这些对象。

2、复制算法(Copying):将内存分为两块,每次只使用其中一块,当这一块的内存用完了,就把还活着的对象复制到另一块上去。

3、标记-整理算法(Mark-Compact):类似于标记-清除算法,但在清除后会进行内存整理,减少碎片。

4、分代收集算法(Generational Collection):根据对象存活周期的不同将内存划分为几块,如年轻代、老年代等,采用适合各个年代的收集算法。