欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于GC的一些资料

程序员文章站 2022-07-13 22:54:12
...

关于Java内存模型,GC及其周边的一些知识一直很碎片,细节总是很模糊。

比如:

  1. Java的内存分区包括:堆、栈、方法区。每一个分区中的具体的内存结构是怎样?
  2. CMS的回收策略是怎样?日志格式表示什么?
  3. Java的启动参数,jstat是否理解?
  4. GC相关的英文单词都明白不?

网上摘抄了一些好的答案,汇总在一起:

  1. 关于JVM分区的问题,可以查看文章“JVM分区”。补充几点:堆和方法区的大小可以预设,栈(Stack,有的文章也称作堆栈)的大小不可以设置。栈可以理解为“操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性 ”。大多数内存溢出均指堆内存方法区溢出,少数时候会出现栈溢出,多数情况下是递归写的不适当导致的。具体可以参考“What is a stack overflow error?”。
  2. 参见“CMS gc实践总结”,“oracle gc日志文档”,“The Unspoken - CMS and PrintGCDetails
  3. Java启动参数,具体参见:Java 6 JVM参数选项大全(中文版)JVM系列三:JVM参数设置、分析
  4. jstat使用。“Java命令行实用工具jps和jstat”,"jstat官方文档"。
  5. 关于一些名词,查看“Sun JVM GC总结【Final】”,具体的名词如下:。
gc:garbage collection(垃圾收集)
infant mortality:对象分配以后很快成为垃圾,就称该对象具有“infant mortality”
minor collection:较小收集,指发生在young generation的gc
major collection:较大收集,指发生在older generation的gc
older generation:年老代,在1.4.2版本之后改称为tenured generation。
tenured generation:年老代,在1.3.1之前称为older generation
permanent generation:永久代。又称为永久域,方法区。
young generation:年轻代
footprint:是一批工作进程的集合,以页和缓冲行数计量,在物理内存有限或者有很多处理器的系统里,footprint 可代表伸缩性
survivor spaces:生存空间
eden:新的对象分配的地方
throughput:是未消耗在垃圾收集的时间占总时间的百分比