java - 垃圾收集与交换、分页之间的关系

标签 java performance garbage-collection

我是 Java 新手。我了解垃圾收集和分页、交换各自的作用。我想了解它们之间的关系。 GC是否会导致分页或交换?我知道GC的首要工作就是回收内存。但如果需要的话,它会通过分页或交换来回收吗?还是与GC无关并由操作系统完成?

最佳答案

要理解这种关系,请注意 Java 执行 generational garbage collection 。堆上分配了年轻代和老一代的对象。从 JVM 的角度来看,它不会关心交换,而是使用它配置的堆大小。但是,堆大小当然会决定管理 JVM 进程的操作系统的交换行为。

在年轻代的收集中,只收集比较新的对象。由于最近的分配,这些对象不应被操作系统换出。当然,如果您为年轻代选择了大于 RAM 的大小,则即使是收集年轻代也需要交换,这会减慢垃圾收集器的速度。

在tenured Generation中,垃圾回收的性能首先取决于回收策略。考虑一个执行完整垃圾收集的朴素算法。该算法必须检查整个应用程序的对象图,哪些内容需要访问整个 JVM 堆。显然,整个堆应该适合 RAM。否则,垃圾收集将需要大量交换,这将导致性能不佳。实际上,收集器不会检查整个对象图。但是,选择适合 RAM 的堆大小仍然是一个很好的做法,以避免在配置 Java 应用程序的生产服务器时进行过多的交换。

关于java - 垃圾收集与交换、分页之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21810059/

相关文章:

java - 如何从ArrayList的ArrayList中获取二维数组?

java - Maven 执行插件 : How configure the working directory

java - 使用节点类乘多项式

c++ - 加快文本渲染性能openGL

java - 替换 Java 中的 Finalize()

java - sql(postgres)- 如何创建一个触发器,将表中的两行相乘并将它们添加到另一个表中的一行?

java - TreeSet 与 Java 8 Streams 性能对比

java - 为什么直接内存 'array' 的清除速度比普通的 Java 数组要慢?

java - 缺少内存 : size of young generation includes only one survivor space

c# - 对象何时符合垃圾回收条件?