8-2 内存性能与垃圾回收 第一题 关于内存管理的三种模式(static、stack、heap) ,不正确的是 A Static在编译阶段为各变量分配内存,不支持运行时变量扩展内存,但支持运行时为新变量分配内存 B Stack因为结构简单,不支持存储结构复杂的变量(例如数组、对象等) C 在heap中分配内存的变量,其内存大小在运行时可动态扩展或收缩 D Static和stack两种模式都不支持对变量所占内存的动态回收 E Java中heap用于复杂结构的数组或对象等变量的内存分配,而简单数据类型的变量在stack中分配内存 答案:ADE 第二题 类A有一个静态成员变量int a和一个非静态成员变量Date b,它的某个方法内使用了一个局部变量Calendar C。JVM在为a、b、c三个变量分配内存时,分别在____中分配 A Stack / Stack / Heap B Stack / Method Area / Stack C Heap / Stack / Stack D Method Area / Heap/ Heap 答案:D 第三题 关于GC的说法,不正确的是 A GC根据对象的“活性”(从root的可达性)来决定是否回收该对象的内存 B 如果某个对象内部不再有指向其他对象的reference,则该对象一定是dead,会被GC C 在Java中,GC完全依赖于JVM,程序员无法通过代码来主动改变某个对象的”活性” D Defensive copy策略大大增加了GC的负担,相当于用性能换取安全性 E 程序员在代码中人工实现GC,若不恰当,可能导致内存泄漏 答案:BC 第四题 Java中针对heap的各种GC策略,以下说法不正确的是 A Mark-sweep检查内存中各对象是live还是dead,对dead对象做出标记,进而将其清理 B 每次进行Mark-compact策略的GC之后,heap中可被再分配的区域是连续的 C Copy是四种策略中唯一不需要检查对象live/dead的GC策略 D Reference counting相对于其他三种GC策略,内存中dead对象的zombie time最短 答案:C 第五题 针对JVM内存管理和GC的说法,不正确的是 A 相对于old generation space中对象的存活时间,young generation space中对象的存活时间更短 B 对存活时间非常长的对象,经历B) 多次GC后,在heap中位置的迁移路线是eden>(S0或S1)>(S1或S0)>... >old generation space C Old generation space的GC是full GC,当young generationspace满了的时候触发执行 D 若针对young generation space的minor GC的发生频度很高,则需扩大该区域的内存大小 答案:C 第六题 - Xms512m- Xmx1024m - XX : Metaspacesize=128m - XX : MaxMetaspaceSi ze=192m- XX: NewSize=128m - XX : MaxNewSize= 256m- XX: SurvivorRatio=8 - XX : MaxHeapFreeRatio=90 按上述参数配置,Old Generation和(S0+S1)的最大值分别是 A 1024m, 25.6m B 768m, 51.2m C 896m, 51.2m D 576m, 25.6m 答案:C 第七题 - Xms 512m- Xmx1024m - XX :MetaspaceSize=128m - XX : MaxMetaspaceSize=192m-XX: NewSize=128m - XX :MaxNewSize= 256m-XX:SurvivorRatio=8 -XX: MinHeapFreeRatio=10 按上述参数配置,若当前young和oldgeneration的尺寸分别为1 28m和384m,在以下的时刻, JVM会自动增加young generation的尺寸? A S0+S1的总占用超过96m B Eden的总占用超过56m C Old generation的占用超过350m D S0+S1+ Eden的总占用超过120m 答案:D 第八题 - XX: +DisableExplicitGC-XX:+PrintGCDetails - XX: +Us eConcMarkSweepGC一XX:ParallelCMSThreads=12-verbose:gc - XX : +HeapDumpOnOutofMemoryError-XX:+PrintGCTimeStamps -Xloggc:../ ../logs/gc-console.log 按以上参数配置,以下不正确的是 A 程序运行时可将GC过程计入日志文件,并记录历次GC时间戳 B 使用串行的GC策略进行GC,GC时会短暂停止程序执行 C 开发者可手工在程序代码中使用System. gc()以提升GC性能 D 使用12个GC线程,降低了GC对程序执行性能的影响 答案:BC