{
  "document": {
    "schemaVersion": "lingui.document/2",
    "title": "文档演示 · JVM 内存测验",
    "parameters": [],
    "state": {
      "q1": [],
      "q2": [],
      "q3": []
    },
    "source": "root = Column({\"id\":\"root\",\"children\":[\"title\",\"subtitle\",\"div1\",\"q1\",\"div2\",\"q2\",\"div3\",\"q3\",\"div4\",\"resetRow\"]}, [n1, n2, n3, n4, n13, n14, n23, n24, n33, n34])\nn1 = Text({\"id\":\"title\",\"text\":\"JVM 内存知识测验\",\"variant\":\"h1\"}, [])\nn2 = Text({\"id\":\"subtitle\",\"text\":\"共 3 道题。选择答案后立即显示解析，做完可以点底部按钮重新作答。\",\"variant\":\"body\"}, [])\nn3 = Divider({\"id\":\"div1\"}, [])\nn4 = Column({\"id\":\"q1\",\"children\":[\"q1stem\",\"q1pick\",\"q1c1\",\"q1c2\",\"q1c3\"]}, [n5, n6, n7, n9, n11])\nn5 = Text({\"id\":\"q1stem\",\"text\":\"第 1 题：新创建的对象通常首先分配在堆的哪个区域？\",\"variant\":\"h3\"}, [])\nn6 = ChoicePicker({\"id\":\"q1pick\",\"label\":\"请选择一个答案\",\"value\":{\"path\":\"/q1\"},\"variant\":\"mutuallyExclusive\",\"options\":[{\"label\":\"新生代 Eden 区\",\"value\":\"eden\"},{\"label\":\"永久代 PermGen\",\"value\":\"perm\"},{\"label\":\"程序计数器\",\"value\":\"pc\"}]}, [])\nn7 = LingUI_Conditional({\"id\":\"q1c1\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q1\"},\"eden\"]},\"child\":\"q1a1\"}, [n8])\nn8 = Text({\"id\":\"q1a1\",\"text\":\"正确：新对象优先在新生代 Eden 区分配；Minor GC 后仍存活的对象被移到 Survivor 区，多次存活后晋升到老年代。\",\"variant\":\"body\"}, [])\nn9 = LingUI_Conditional({\"id\":\"q1c2\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q1\"},\"perm\"]},\"child\":\"q1a2\"}, [n10])\nn10 = Text({\"id\":\"q1a2\",\"text\":\"再想想：永久代（JDK 7 及以前）是方法区的一种实现，用来存放类元数据，并不是对象实例的分配区域。\",\"variant\":\"body\"}, [])\nn11 = LingUI_Conditional({\"id\":\"q1c3\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q1\"},\"pc\"]},\"child\":\"q1a3\"}, [n12])\nn12 = Text({\"id\":\"q1a3\",\"text\":\"再想想：程序计数器是每个线程私有的一小块内存，记录当前字节码的执行位置，不用于分配对象。\",\"variant\":\"body\"}, [])\nn13 = Divider({\"id\":\"div2\"}, [])\nn14 = Column({\"id\":\"q2\",\"children\":[\"q2stem\",\"q2pick\",\"q2c1\",\"q2c2\",\"q2c3\"]}, [n15, n16, n17, n19, n21])\nn15 = Text({\"id\":\"q2stem\",\"text\":\"第 2 题：关于堆内存参数的说法，哪一项正确？\",\"variant\":\"h3\"}, [])\nn16 = ChoicePicker({\"id\":\"q2pick\",\"label\":\"请选择一个答案\",\"value\":{\"path\":\"/q2\"},\"variant\":\"mutuallyExclusive\",\"options\":[{\"label\":\"-Xms 是堆初始大小，-Xmx 是堆最大值\",\"value\":\"xms_xmx\"},{\"label\":\"-Xms 用于设置堆的最大值\",\"value\":\"xms_max\"},{\"label\":\"-Xmx 只影响 Metaspace 的大小\",\"value\":\"xmx_meta\"}]}, [])\nn17 = LingUI_Conditional({\"id\":\"q2c1\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q2\"},\"xms_xmx\"]},\"child\":\"q2a1\"}, [n18])\nn18 = Text({\"id\":\"q2a1\",\"text\":\"正确：-Xms 指定堆的初始大小，-Xmx 指定堆的最大值；新生代大小则由 -Xmn 设置。\",\"variant\":\"body\"}, [])\nn19 = LingUI_Conditional({\"id\":\"q2c2\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q2\"},\"xms_max\"]},\"child\":\"q2a2\"}, [n20])\nn20 = Text({\"id\":\"q2a2\",\"text\":\"再想想：设置堆最大值的是 -Xmx，-Xms 表示堆的初始大小，把两者写反了。\",\"variant\":\"body\"}, [])\nn21 = LingUI_Conditional({\"id\":\"q2c3\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q2\"},\"xmx_meta\"]},\"child\":\"q2a3\"}, [n22])\nn22 = Text({\"id\":\"q2a3\",\"text\":\"再想想：Metaspace 是堆外的方法区实现，用 -XX:MaxMetaspaceSize 等参数控制，和 -Xmx 没有关系。\",\"variant\":\"body\"}, [])\nn23 = Divider({\"id\":\"div3\"}, [])\nn24 = Column({\"id\":\"q3\",\"children\":[\"q3stem\",\"q3pick\",\"q3c1\",\"q3c2\",\"q3c3\"]}, [n25, n26, n27, n29, n31])\nn25 = Text({\"id\":\"q3stem\",\"text\":\"第 3 题：关于 JDK 8 及之后的 Metaspace，说法正确的是？\",\"variant\":\"h3\"}, [])\nn26 = ChoicePicker({\"id\":\"q3pick\",\"label\":\"请选择一个答案\",\"value\":{\"path\":\"/q3\"},\"variant\":\"mutuallyExclusive\",\"options\":[{\"label\":\"它使用本地内存，默认不设固定上限\",\"value\":\"native\"},{\"label\":\"它就是堆中的新生代\",\"value\":\"newgen\"},{\"label\":\"它只能通过 -Xmn 调节大小\",\"value\":\"xmn\"}]}, [])\nn27 = LingUI_Conditional({\"id\":\"q3c1\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q3\"},\"native\"]},\"child\":\"q3a1\"}, [n28])\nn28 = Text({\"id\":\"q3a1\",\"text\":\"正确：Metaspace 取代了永久代，位于本地内存（堆外），默认不设硬上限、受可用物理内存限制，可用 -XX:MaxMetaspaceSize 设限。\",\"variant\":\"body\"}, [])\nn29 = LingUI_Conditional({\"id\":\"q3c2\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q3\"},\"newgen\"]},\"child\":\"q3a2\"}, [n30])\nn30 = Text({\"id\":\"q3a2\",\"text\":\"再想想：新生代（Eden 与 Survivor）是堆内的一部分，Metaspace 在堆外。\",\"variant\":\"body\"}, [])\nn31 = LingUI_Conditional({\"id\":\"q3c3\",\"condition\":{\"op\":\"includes\",\"args\":[{\"path\":\"/q3\"},\"xmn\"]},\"child\":\"q3a3\"}, [n32])\nn32 = Text({\"id\":\"q3a3\",\"text\":\"再想想：-Xmn 调节的是新生代大小；Metaspace 对应参数是 -XX:MetaspaceSize 与 -XX:MaxMetaspaceSize。\",\"variant\":\"body\"}, [])\nn33 = Divider({\"id\":\"div4\"}, [])\nn34 = Row({\"id\":\"resetRow\",\"children\":[\"resetBtn\"],\"justify\":\"start\",\"align\":\"center\"}, [n35])\nn35 = Button({\"id\":\"resetBtn\",\"child\":\"resetTx\",\"variant\":\"secondary\",\"size\":\"medium\",\"action\":{\"functionCall\":{\"call\":\"lingui.dispatch\",\"args\":{\"actions\":[{\"type\":\"reset\"}]}}}}, [n36])\nn36 = Text({\"id\":\"resetTx\",\"text\":\"重新作答\",\"variant\":\"body\"}, [])"
  }
}