关于GC的一些资料
程序员文章站
2022-07-13 22:54:12
...
关于Java内存模型,GC及其周边的一些知识一直很碎片,细节总是很模糊。
比如:
- Java的内存分区包括:堆、栈、方法区。每一个分区中的具体的内存结构是怎样?
- CMS的回收策略是怎样?日志格式表示什么?
- Java的启动参数,jstat是否理解?
- GC相关的英文单词都明白不?
网上摘抄了一些好的答案,汇总在一起:
- 关于JVM分区的问题,可以查看文章“JVM分区”。补充几点:堆和方法区的大小可以预设,栈(Stack,有的文章也称作堆栈)的大小不可以设置。栈可以理解为“操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性 ”。大多数内存溢出均指堆内存或方法区溢出,少数时候会出现栈溢出,多数情况下是递归写的不适当导致的。具体可以参考“What is a stack overflow error?”。
- 参见“CMS gc实践总结”,“oracle gc日志文档”,“The Unspoken - CMS and PrintGCDetails”
- Java启动参数,具体参见:Java 6 JVM参数选项大全(中文版),JVM系列三:JVM参数设置、分析。
- jstat使用。“Java命令行实用工具jps和jstat”,"jstat官方文档"。
- 关于一些名词,查看“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:是未消耗在垃圾收集的时间占总时间的百分比