{"id":1296,"date":"2018-03-01T17:57:40","date_gmt":"2018-03-01T09:57:40","guid":{"rendered":"http:\/\/www.yeetrack.com\/?p=1296"},"modified":"2018-03-01T17:57:40","modified_gmt":"2018-03-01T09:57:40","slug":"java-g1%e5%9e%83%e5%9c%be%e6%94%b6%e9%9b%86%e5%99%a8%e5%85%a5%e9%97%a8","status":"publish","type":"post","link":"https:\/\/www.yeetrack.com\/?p=1296","title":{"rendered":"Java G1\u5783\u573e\u6536\u96c6\u5668\u5165\u95e8"},"content":{"rendered":"<h2>\u8bf4\u660e<\/h2>\n<p>concurrent: \u5e76\u53d1, \u591a\u4e2a\u7ebf\u7a0b\u534f\u540c\u505a\u540c\u4e00\u4ef6\u4e8b\u60c5(\u6709\u72b6\u6001)<\/p>\n<p>parallel: \u5e76\u884c, \u591a\u4e2a\u7ebf\u7a0b\u5404\u505a\u5404\u7684\u4e8b\u60c5(\u4e92\u76f8\u95f4\u65e0\u5171\u4eab\u72b6\u6001)<\/p>\n<p>\u53c2\u8003:\u00a0<a href=\"https:\/\/joearms.github.io\/published\/2013-04-05-concurrent-and-parallel-programming.html\" target=\"_blank\" rel=\"noopener\">What\u2019s the difference between concurrency and parallelism<\/a><\/p>\n<h2><a target=\"_blank\" name=\"t2\"><\/a><a id=\"user-content-\u6982\u8ff0\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E6%A6%82%E8%BF%B0\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u6982\u8ff0<\/h2>\n<h4><a target=\"_blank\" name=\"t3\"><\/a><a id=\"user-content-\u76ee\u7684\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E7%9B%AE%E7%9A%84\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u76ee\u7684<\/h4>\n<p>\u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528G1,\u53ca\u5728 Hotspot JVM \u4e2d\u600e\u4e48\u4f7f\u7528G1\u5783\u573e\u6536\u96c6\u5668\u3002 \u60a8\u5c06\u4e86\u89e3 G1 \u6536\u96c6\u5668\u7684\u5185\u90e8\u539f\u7406, \u5207\u6362\u4e3a G1 \u6536\u96c6\u5668\u7684\u547d\u4ee4\u884c\u53c2\u6570, \u4ee5\u53ca\u8ba9\u5176\u8bb0\u5f55GC\u65e5\u5fd7\u7684\u9009\u9879\u3002<!--more--><\/p>\n<h4><a target=\"_blank\" name=\"t4\"><\/a><a id=\"user-content-\u9700\u8981\u7684\u65f6\u95f4\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E9%9C%80%E8%A6%81%E7%9A%84%E6%97%B6%E9%97%B4\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u9700\u8981\u7684\u65f6\u95f4<\/h4>\n<p>\u5927\u7ea6 1 \u4e2a\u5c0f\u65f6<\/p>\n<h4><a target=\"_blank\" name=\"t5\"><\/a><a id=\"user-content-\u7b80\u4ecb\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E7%AE%80%E4%BB%8B\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u7b80\u4ecb<\/h4>\n<p>\u672c\u6587\u6db5\u76d6\u4e86Java\u865a\u62df\u673a(JVM, Java Virtual Machine)\u4e2d G1 \u7684\u57fa\u7840\u77e5\u8bc6\u3002<\/p>\n<ol class=\"task-list\">\n<li>\u7b2c\u4e00\u90e8\u5206, \u7b80\u5355\u6982\u8ff0JVM\u7684\u540c\u65f6\u4ecb\u7ecd\u4e86\u5783\u573e\u6536\u96c6\u548c\u6027\u80fd.<\/li>\n<li>\u63a5\u4e0b\u6765\u8bb2\u8ff0\u4e86 Hotspot JVM \u4e2d CMS \u6536\u96c6\u5668\u662f\u5982\u4f55\u5de5\u4f5c\u7684.<\/li>\n<li>\u63a5\u7740\u518d\u4e00\u6b65\u4e00\u6b65\u5730\u6307\u5bfc\u5728 Hotspot JVM \u4e2d\u4f7f\u7528G1\u8fdb\u884c\u5783\u573e\u56de\u6536\u7684\u5de5\u4f5c\u65b9\u5f0f.<\/li>\n<li>\u4e4b\u540e\u7684\u4e00\u4e2a\u5c0f\u8282\u4ecb\u7ecd G1 \u5783\u573e\u6536\u96c6\u5668\u53ef\u7528\u7684\u547d\u4ee4\u884c\u53c2\u6570.<\/li>\n<li>\u6700\u540e,\u60a8\u5c06\u4e86\u89e3\u5982\u4f55\u914d\u7f6e\u4f7fG1\u6536\u96c6\u5668\u8bb0\u5f55\u65e5\u5fd7.<\/li>\n<\/ol>\n<h4><a target=\"_blank\" name=\"t6\"><\/a><a id=\"user-content-\u786c\u4ef6\u4e0e\u8f6f\u4ef6\u73af\u5883\u9700\u6c42\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E7%A1%AC%E4%BB%B6%E4%B8%8E%E8%BD%AF%E4%BB%B6%E7%8E%AF%E5%A2%83%E9%9C%80%E6%B1%82\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u786c\u4ef6\u4e0e\u8f6f\u4ef6\u73af\u5883\u9700\u6c42<\/h4>\n<p>\u4e0b\u9762\u662f \u786c\u4ef6\u4e0e\u8f6f\u4ef6\u73af\u5883\u9700\u6c42 \u6e05\u5355:<\/p>\n<ul class=\"task-list\">\n<li>\u4e00\u53f0PC\u673a, \u8fd0\u884c Windows XP \u4ee5\u4e0a\u64cd\u4f5c\u7cfb\u7edf, Mac OS X \u6216\u8005 Linux \u90fd\u53ef\u4ee5. \u6ce8\u610f,\u56e0\u4e3a\u4f5c\u8005\u5728Windows 7\u4e0a\u8fdb\u884c\u5f00\u53d1\u548c\u6d4b\u8bd5, \u5c1a\u672a\u5728\u6240\u6709\u5e73\u53f0\u4e0a\u5b8c\u6210\u6d4b\u8bd5\u3002 \u4f46\u5728 OS X\u548cLinux \u4e0a\u5e94\u8be5\u4e5f\u662f\u6b63\u5e38\u7684\u3002\u6700\u597d\u914d\u7f6e\u4e86\u591a\u6838CPU.<\/li>\n<li>Java 7 Update 9 \u6216\u66f4\u9ad8\u7248\u672c<\/li>\n<li>\u6700\u65b0\u7684 Java 7 Demos and Samples Zip \u6587\u4ef6<\/li>\n<\/ul>\n<h4><a target=\"_blank\" name=\"t7\"><\/a><a id=\"user-content-\u51c6\u5907\u6761\u4ef6\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%87%86%E5%A4%87%E6%9D%A1%E4%BB%B6\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u51c6\u5907\u6761\u4ef6<\/h4>\n<p>\u5728\u5f00\u59cb\u5b66\u4e60\u672c\u6559\u7a0b\u4e4b\u524d, \u4f60\u9700\u8981:<\/p>\n<ul class=\"task-list\">\n<li>\u4e0b\u8f7d\u5e76\u5b89\u88c5\u6700\u65b0\u7684 Java JDK (JDK 7 u9 \u6216 \u4ee5\u540e\u7684\u7248\u672c):\u00a0<a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/downloads\/jdk7-downloads-1880260.html\" target=\"_blank\" rel=\"noopener\">Java 7 JDK \u4e0b\u8f7d\u9875\u9762<\/a><\/li>\n<li>\u4e0b\u8f7d\u5e76\u5b89\u88c5 Demos and Samples (\u793a\u4f8b\u4e0e\u6837\u4f8b) zip \u6587\u4ef6, \u4e0b\u8f7d\u9875\u9762\u548cJDK\u76f8\u540c. \u7136\u540e\u89e3\u538b\u5230\u5408\u9002\u7684\u4f4d\u7f6e. \u5982:<code>C:\\javademos<\/code><\/li>\n<\/ul>\n<h2><a target=\"_blank\" name=\"t8\"><\/a><a id=\"user-content-java-\u6280\u672f-\u548c-jvm\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#java-%E6%8A%80%E6%9C%AF-%E5%92%8C-jvm\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Java \u6280\u672f \u548c JVM<\/h2>\n<h3><a target=\"_blank\" name=\"t9\"><\/a><a id=\"user-content-java-\u6982\u8ff0\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#java-%E6%A6%82%E8%BF%B0\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Java \u6982\u8ff0<\/h3>\n<p>Java \u662f Sun Microsystems \u516c\u53f8\u57281995\u5e74\u53d1\u5e03\u7684\u4e00\u95e8\u7f16\u7a0b\u8bed\u8a00. \u540c\u65f6\u4e5f\u662f\u4e00\u4e2a\u8fd0\u884cJava\u7a0b\u5e8f\u7684\u5e95\u5c42\u5e73\u53f0. \u63d0\u4f9b\u5de5\u5177\u3001\u6e38\u620f\u548c\u4f01\u4e1a\u5e94\u7528\u7a0b\u5e8f\u652f\u6301\u3002Java \u8fd0\u884c\u5728\u5168\u4e16\u754c\u8d85\u8fc78.5\u4ebf\u7684PC,\u4ee5\u53ca\u6570\u5341\u4ebf\u7684\u667a\u80fd\u8bbe\u5907\u4e0a,\u5305\u62ec mobile \u548c TV. Java \u662f\u7531\u8bb8\u591a\u5173\u952e\u90e8\u4ef6\u7ec4\u6210\u7684\u4e00\u4e2a\u6574\u4f53, \u7edf\u79f0\u4e3aJava\u5e73\u53f0\u3002<\/p>\n<h4><a target=\"_blank\" name=\"t10\"><\/a><a id=\"user-content-jrejava-runtime-edition\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#jrejava-runtime-edition\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>JRE(Java Runtime Edition)<\/h4>\n<p>\u4e00\u822c\u6765\u8bf4\u4e0b\u8f7d\u4e86Java\u4ee5\u540e, \u4f60\u5c31\u5f97\u5230\u4e86\u4e00\u4e2aJava\u8fd0\u884c\u65f6: Java Runtime Environment (JRE). JRE \u7531Java\u865a\u62df\u673a Java Virtual Machine (JVM), Java \u5e73\u53f0\u6838\u5fc3\u7c7b(core classes), \u4ee5\u53ca Java\u5e73\u53f0\u652f\u6301\u5e93\u7ec4\u6210. \u5fc5\u987b\u6709\u8fd9\u4e09\u5927\u7ec4\u4ef6\u7684\u652f\u6301\u624d\u80fd\u5728\u4f60\u7684\u7535\u8111\u4e0a\u8fd0\u884c Java \u7a0b\u5e8f. \u4f8b\u5982 Java 7, \u53ef\u4ee5\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u4f5c\u4e3a\u684c\u9762\u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c, \u8fd8\u53ef\u4ee5\u901a\u8fc7 Java Web Start \u4eceWeb\u4e0a\u5b89\u88c5, \u6216\u8005\u662f\u4f5c\u4e3a\u5d4c\u5165\u5f0fWeb\u7a0b\u5e8f\u5728\u6d4f\u89c8\u5668\u4e2d\u8fd0\u884c (\u901a\u8fc7 JavaFX).<\/p>\n<h4><a target=\"_blank\" name=\"t11\"><\/a><a id=\"user-content-java-\u7f16\u7a0b\u8bed\u8a00\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#java-%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Java \u7f16\u7a0b\u8bed\u8a00<\/h4>\n<p>Java \u662f\u4e00\u95e8\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00(object-oriented programming language), \u5305\u6db5\u4ee5\u4e0b\u7279\u6027.<\/p>\n<ul class=\"task-list\">\n<li>Platform Independence - Java \u5e94\u7528\u7a0b\u5e8f\u88ab\u7f16\u8bd1\u4e3a\u5b57\u8282\u7801(bytecode)\u5b58\u653e\u5230 class \u6587\u4ef6\u4e2d, \u7531JVM\u52a0\u8f7d. \u56e0\u4e3a\u7a0b\u5e8f\u5728 JVM \u4e2d\u8fd0\u884c, \u6240\u4ee5\u53ef\u4ee5\u8de8\u5e73\u53f0\u8fd0\u884c\u5728\u5404\u79cd\u64cd\u4f5c\u7cfb\u7edf\/\u8bbe\u5907\u4e0a.<\/li>\n<li>Object-Oriented - Java \u662f\u4e00\u95e8\u9762\u5411\u5bf9\u8c61\u7684\u8bed\u8a00, \u7ee7\u627f\u4e86 C \u548c C++ \u7684\u5f88\u591a\u7279\u6027,\u5e76\u5728\u6b64\u57fa\u7840\u4e0a\u8fdb\u884c\u6269\u5145\u548c\u4f18\u5316.<\/li>\n<li>Automatic Garbage Collection - Java\u5bf9\u5185\u5b58\u8fdb\u884c \u81ea\u52a8\u5206\u914d(allocates) \u548c\u81ea\u52a8\u91ca\u653e(deallocates). \u6240\u4ee5\u7a0b\u5e8f\u4e0d\u518d\u6267\u884c\u8fd9\u4e00\u7e41\u7410\u7684\u4efb\u52a1(\u5176\u5b9e\u81ea\u52a8\u5185\u5b58\u56de\u6536,\u66f4\u591a\u7684\u597d\u5904\u662f\u51cf\u5c11\u4e86\u7f16\u7a0b\u9700\u8981\u91cd\u590d\u5904\u7406\u7684\u8fd9\u79cd\u7ec6\u8282,\u53e6\u4e00\u4e2a\u4f8b\u5b50\u662f\u5bf9JDBC\u7684\u5c01\u88c5).<\/li>\n<li>Rich Standard Library - Java\u5305\u542b\u5927\u91cf\u7684\u6807\u51c6\u5bf9\u8c61,\u53ef\u4ee5\u6267\u884c\u8bf8\u5982\u8f93\u5165\u8f93\u51fa(input\/output), \u7f51\u7edc\u64cd\u4f5c\u4ee5\u53ca\u65e5\u671f\u5904\u7406\u7b49\u4efb\u52a1.<\/li>\n<\/ul>\n<h4><a target=\"_blank\" name=\"t12\"><\/a><a id=\"user-content-jdkjava-development-kit\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#jdkjava-development-kit\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>JDK(Java Development Kit)<\/h4>\n<p>JDK \u662f\u7528\u6765\u5f00\u53d1Java\u7a0b\u5e8f\u7684\u4e00\u7cfb\u5217\u5de5\u5177\u96c6. \u901a\u8fc7JDK, \u4f60\u53ef\u4ee5\u7f16\u8bd1\u7528Java\u8bed\u8a00\u4e66\u5199\u7684\u7a0b\u5e8f, \u5e76\u5728 JVM \u4e2d\u8fd0\u884c. \u53e6\u5916, JDK \u8fd8\u63d0\u4f9b\u4e86\u6253\u5305(packaging)\u548c\u5206\u53d1(distributing)\u7a0b\u5e8f\u7684\u5de5\u5177.<\/p>\n<p>JDK \u548c JRE \u4f7f\u7528\u540c\u6837\u7684 Java Application Programming Interfaces (<a href=\"http:\/\/docs.oracle.com\/javase\/7\/docs\/api\/\" target=\"_blank\" rel=\"noopener\">Java API<\/a>).Java API \u662f\u9884\u5148\u6253\u5305\u597d\u4ee5\u4f9b\u7a0b\u5e8f\u5458\u7528\u6765\u5f00\u53d1\u7a0b\u5e8f\u7684\u7c7b\u5e93\u96c6\u5408. \u901a\u8fc7 Java API \u4f7f\u5f97\u5f88\u591a\u5e38\u89c4\u4efb\u52a1\u53ef\u4ee5\u5f88\u8f7b\u677e\u7684\u5c31\u5b8c\u6210,\u5982 \u5b57\u7b26\u4e32\u64cd\u4f5c(string manipulation), \u65f6\u95f4\u65e5\u671f\u5904\u7406(date\/time processing), \u7f51\u7edc\u7f16\u7a0b(networking), \u4ee5\u53ca\u5b9e\u73b0\u5404\u79cd\u6570\u636e\u7ed3\u6784(data structures, \u5982 lists, maps, stacks, and queues).<\/p>\n<h4><a target=\"_blank\" name=\"t13\"><\/a><a id=\"user-content-jvmjava-virtual-machine\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#jvmjava-virtual-machine\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>JVM(Java Virtual Machine)<\/h4>\n<p>Java Virtual Machine (JVM) \u662f\u4e00\u53f0\u62bd\u8c61\u7684\u8ba1\u7b97\u673a(abstract computing machine). JVM \u672c\u8d28\u662f\u4e00\u4e2a\u7a0b\u5e8f, \u4f46\u5728\u8fd0\u884c\u4e8eJVM\u4e0a\u7684\u7a0b\u5e8f\u770b\u6765, \u4ed6\u5c31\u50cf\u4e00\u53f0\u771f\u5b9e\u673a\u5668\u4e00\u6837. \u8fd9\u6837, Java\u7a0b\u5e8f\u5c31\u80fd\u4f7f\u7528\u76f8\u540c\u7684\u63a5\u53e3\u548c\u5e93. \u6bcf\u79cd\u7279\u5b9a\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u7684 JVM \u5b9e\u73b0, \u90fd\u5c06 Java \u7a0b\u5e8f\u6307\u4ee4\u8f6c\u6362\u4e3a\u672c\u5730\u673a\u5668\u7684\u6307\u4ee4(instructions)\u548c\u547d\u4ee4(commands). \u7531\u6b64,\u5b9e\u73b0\u4e86Java\u7a0b\u5e8f\u7684\u5e73\u53f0\u72ec\u7acb\u6027.<\/p>\n<p>Java\u865a\u62df\u673a\u7684\u7b2c\u4e00\u4e2a\u539f\u578b\u5b9e\u73b0,\u7531 Sun Microsystems, Inc. \u5b8c\u6210, \u5728\u4e00\u53f0\u624b\u6301\u8bbe\u5907\u4e0a\u7528\u8f6f\u4ef6\u6a21\u62df\u4e86 Java\u865a\u62df\u673a\u6307\u4ee4\u96c6, \u7c7b\u4f3c\u4e8e\u4eca\u5929\u7684 PDA(Personal Digital Assistant). Oracle \u5f53\u524d\u5728\u79fb\u52a8\u8bbe\u5907,\u684c\u9762\u7cfb\u7edf\u548c\u670d\u52a1\u5668\u4e0a\u90fd\u63d0\u4f9b\u4e86Java\u865a\u62df\u673a\u5b9e\u73b0, \u4f46Java\u865a\u62df\u673a\u4e0d\u9650\u5236\u4f7f\u7528\u4efb\u4f55\u7279\u5b9a\u7684\u6280\u672f,\u786c\u4ef6,\u6216\u64cd\u4f5c\u7cfb\u7edf\u3002JVM\u4e5f\u4e0d\u4e00\u5b9a\u90fd\u662f\u57fa\u4e8e\u8f6f\u4ef6\u7684,\u4f60\u53ef\u4ee5\u76f4\u63a5\u5728\u786c\u4ef6CPU\u4e0a\u5b9e\u73b0JVM\u6307\u4ee4, \u8fd8\u53ef\u4ee5\u82af\u7247\u4e0a\u5b9e\u73b0,\u6216\u8005\u91c7\u7528 microcode \u7684\u65b9\u5f0f\u6765\u5b9e\u73b0.<\/p>\n<p>Java \u865a\u62df\u673a\u5b8c\u5168\u4e0d\u5173\u5fc3Java\u8bed\u8a00\u7684\u7ec6\u8282, \u53ea\u8bc6\u522b class \u6587\u4ef6\u8fd9\u79cd\u7279\u5b9a\u7684\u4e8c\u8fdb\u5236\u683c\u5f0f. \u4e00\u4e2a class \u6587\u4ef6\u5305\u542b Java\u865a\u62df\u673a\u6307\u4ee4(\u6216\u79f0\u4e4b\u4e3a\u5b57\u8282\u7801 bytecode) \u53ca\u7b26\u53f7\u53d8\u91cf\u8868(symbol table), \u8fd8\u6709\u4e00\u4e9b\u8f85\u52a9\u4fe1\u606f.<\/p>\n<p>\u57fa\u4e8e\u5b89\u5168\u6027\u8003\u8651, Java\u865a\u62df\u673a\u5bf9 class \u6587\u4ef6\u4e2d\u7684\u4ee3\u7801\u6267\u884c \u5f3a\u8bed\u6cd5\u68c0\u67e5\u548c\u7ec4\u6210\u7ed3\u6784\u89c4\u8303\u9650\u5236. \u65e2\u7136\u865a\u62df\u673a\u6709\u8fd9\u79cd\u7279\u5f81, \u90a3\u4e48\u4efb\u4f55\u4e00\u95e8\u7f16\u7a0b\u8bed\u8a00,\u53ea\u8981\u80fd\u7f16\u8bd1\u4e3a\u5408\u6cd5\u7684 class \u6587\u4ef6\uff0c\u90fd\u53ef\u4ee5\u52a0\u8f7d\u5230 Java\u865a\u62df\u673a \u91cc\u9762\u6267\u884c\u3002\u7531\u4e8e\u5177\u6709\u901a\u7528\u6027,\u8de8\u5e73\u53f0\u7279\u6027, \u5176\u4ed6\u8bed\u8a00\u7684\u5b9e\u73b0\u8005\u53ef\u4ee5\u628aJava\u865a\u62df\u673a\u4f5c\u4e3a\u8be5\u8bed\u8a00\u7684\u52a0\u8f7d\u6267\u884c\u5de5\u5177\u3002(1)\u00a0<a href=\"http:\/\/docs.oracle.com\/javase\/specs\/jvms\/se7\/html\/jvms-1.html\" target=\"_blank\" rel=\"noopener\">The Java Virtual Machine<\/a><\/p>\n<h3><a target=\"_blank\" name=\"t14\"><\/a><a id=\"user-content-\u63a2\u7d22-jvm-\u4f53\u7cfb\u67b6\u6784\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E6%8E%A2%E7%B4%A2-jvm-%E4%BD%93%E7%B3%BB%E6%9E%B6%E6%9E%84\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u63a2\u7d22 JVM \u4f53\u7cfb\u67b6\u6784<\/h3>\n<h4><a target=\"_blank\" name=\"t15\"><\/a><a id=\"user-content-hotspot-\u67b6\u6784\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#hotspot-%E6%9E%B6%E6%9E%84\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Hotspot \u67b6\u6784<\/h4>\n<p>HotSpot JVM \u6709\u4e00\u4e2a\u7a33\u5b9a\u5f3a\u608d\u7684\u67b6\u6784, \u652f\u6301\u5f3a\u5927\u7684\u529f\u80fd\u4e0e\u7279\u6027, \u5177\u5907\u5b9e\u73b0\u9ad8\u6027\u80fd\u548c\u5927\u89c4\u6a21\u53ef\u4f38\u7f29\u6027\u7684\u80fd\u529b\u3002\u4f8b\u5982,HotSpot JVM JIT\u7f16\u8bd1\u5668\u80fd\u52a8\u6001\u8fdb\u884c\u4f18\u5316\u751f\u6210\u3002\u6362\u53e5\u8bdd\u8bf4,\u4ed6\u4eec\u8fd0\u884cJava\u7a0b\u5e8f\u65f6,\u4f1a\u9488\u5bf9\u5e95\u5c42\u7cfb\u7edf\u67b6\u6784\u52a8\u6001\u751f\u6210\u9ad8\u6027\u80fd\u7684\u672c\u5730\u673a\u5668\u6307\u4ee4\u3002\u6b64\u5916,\u901a\u8fc7\u6210\u719f\u7684\u6f14\u8fdb\u548c\u8fd0\u884c\u65f6\u73af\u5883\u7684\u6301\u7eed\u5de5\u7a0b,\u52a0\u4e0a\u591a\u7ebf\u7a0b\u5783\u573e\u6536\u96c6\u5668,HotSpot JVM\u5373\u4f7f\u5b9e\u5728\u5927\u578b\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e0a\u4e5f\u80fd\u83b7\u5f97\u5f88\u9ad8\u7684\u4f38\u7f29\u6027.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/01_1_JVM_Arch_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/01_1_JVM_Arch_CN.png\" alt=\"HotSpot JVM: Architecture\" \/><\/a><\/p>\n<p>JVM \u7684\u4e3b\u8981\u7ec4\u4ef6\u5305\u62ec: \u7c7b\u52a0\u8f7d\u5668(class loader), \u8fd0\u884c\u65f6\u6570\u636e\u533a(runtime data areas), \u4ee5\u53ca\u6267\u884c\u5f15\u64ce(execution engine).<\/p>\n<h4><a target=\"_blank\" name=\"t16\"><\/a><a id=\"user-content-hotspot-\u5173\u952e\u90e8\u5206\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#hotspot-%E5%85%B3%E9%94%AE%E9%83%A8%E5%88%86\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Hotspot \u5173\u952e\u90e8\u5206<\/h4>\n<p>\u4e0e\u6027\u80fd(performance)\u6709\u5173\u7684\u90e8\u5206\u662f JVM \u6700\u91cd\u8981\u7684\u7ec4\u4ef6,\u4e0b\u56fe\u4e2d\u7528\u9ad8\u4eae\u7684\u989c\u8272\u6765\u663e\u793a.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/01_2_Key_Hotspot_Components_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/01_2_Key_Hotspot_Components_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u5bf9JVM\u8fdb\u884c\u6027\u80fd\u8c03\u4f18\u65f6\u6709\u4e09\u5927\u7ec4\u4ef6\u9700\u8981\u91cd\u70b9\u5173\u6ce8\u3002\u5806(Heap)\u662f\u5b58\u653e\u5bf9\u8c61\u7684\u5185\u5b58\u7a7a\u95f4\u3002\u8fd9\u4e2a\u533a\u57df\u7531JVM\u542f\u52a8\u65f6\u9009\u62e9\u7684\u5783\u573e\u6536\u96c6\u5668\u8fdb\u884c\u7ba1\u7406\u3002\u5927\u591a\u6570\u8c03\u4f18\u53c2\u6570\u90fd\u662f\u8c03\u6574\u5806\u5185\u5b58\u7684\u5927\u5c0f,\u4ee5\u53ca\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u9009\u62e9\u6700\u5408\u9002\u7684\u5783\u573e\u6536\u96c6\u5668. JIT\u7f16\u8bd1\u5668\u4e5f\u5bf9\u6027\u80fd\u6709\u5f88\u5927\u7684\u5f71\u54cd, \u4f46\u65b0\u7248\u672c\u7684JVM\u8c03\u4f18\u4e2d\u5f88\u5c11\u9700\u8981\u5173\u6ce8.<\/p>\n<h3><a target=\"_blank\" name=\"t17\"><\/a><a id=\"user-content-\u6027\u80fd\u57fa\u7840\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E6%80%A7%E8%83%BD%E5%9F%BA%E7%A1%80\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u6027\u80fd\u57fa\u7840<\/h3>\n<p>\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u5bf9 Java \u7a0b\u5e8f\u8fdb\u884c\u8c03\u4f18, \u4e3b\u8981\u5173\u6ce8\u4e24\u4e2a\u76ee\u6807\u4e4b\u4e00: \u54cd\u5e94\u901f\u5ea6(responsiveness) \u548c\/\u6216 \u541e\u5410\u91cf(throughput). \u4e0b\u9762\u7684\u6559\u7a0b\u4e2d\u6211\u4eec\u5c06\u8bb2\u8ff0\u8fd9\u4e9b\u6982\u5ff5.<\/p>\n<h4><a target=\"_blank\" name=\"t18\"><\/a><a id=\"user-content-\u54cd\u5e94\u80fd\u529bresponsiveness\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%93%8D%E5%BA%94%E8%83%BD%E5%8A%9Bresponsiveness\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u54cd\u5e94\u80fd\u529b(Responsiveness)<\/h4>\n<p>\u54cd\u5e94\u80fd\u529b\u5c31\u662f\u7a0b\u5e8f\u6216\u7cfb\u7edf\u5bf9\u4e00\u4e2a\u8bf7\u6c42\u7684\u54cd\u5e94\u6709\u591a\u8fc5\u901f. \u6bd4\u5982:<\/p>\n<ul class=\"task-list\">\n<li>\u7a0b\u5e8fUI\u54cd\u5e94\u901f\u5ea6\u6709\u591a\u7075\u654f<\/li>\n<li>\u7f51\u7ad9\u9875\u9762\u54cd\u5e94\u6709\u591a\u5feb<\/li>\n<li>\u6570\u636e\u5e93\u67e5\u8be2\u6709\u591a\u5feb<\/li>\n<\/ul>\n<p>\u5bf9\u54cd\u5e94\u901f\u5ea6\u8981\u6c42\u5f88\u9ad8\u7684\u7cfb\u7edf, \u8f83\u5927\u7684\u505c\u987f\u65f6\u95f4(large pause times) \u662f\u4e0d\u53ef\u63a5\u53d7\u7684. \u91cd\u70b9\u662f\u5728\u975e\u5e38\u77ed\u7684\u65f6\u95f4\u5468\u671f\u5185\u5feb\u901f\u54cd\u5e94.<\/p>\n<h4><a target=\"_blank\" name=\"t19\"><\/a><a id=\"user-content-\u541e\u5410\u91cfthroughput\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%90%9E%E5%90%90%E9%87%8Fthroughput\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u541e\u5410\u91cf(Throughput)<\/h4>\n<p>\u541e\u5410\u91cf\u5173\u6ce8\u5728\u4e00\u4e2a\u7279\u5b9a\u65f6\u95f4\u6bb5\u5185\u5e94\u7528\u7cfb\u7edf\u7684\u6700\u5927\u5de5\u4f5c\u91cf\u3002\u8861\u91cf\u541e\u5410\u91cf\u7684\u6307\u6807\/\u793a\u4f8b\u5305\u62ec:<\/p>\n<ul class=\"task-list\">\n<li>\u7ed9\u5b9a\u65f6\u95f4\u5185\u5b8c\u6210\u7684\u4e8b\u52a1\u6570.<\/li>\n<li>\u6bcf\u5c0f\u65f6\u6279\u5904\u7406\u7cfb\u7edf\u80fd\u5b8c\u6210\u7684\u4f5c\u4e1a(jobs)\u6570\u91cf.<\/li>\n<li>\u6bcf\u5c0f\u65f6\u80fd\u5b8c\u6210\u591a\u5c11\u6b21\u6570\u636e\u5e93\u67e5\u8be2<\/li>\n<\/ul>\n<p>\u5728\u541e\u5410\u91cf\u65b9\u9762\u4f18\u5316\u7684\u7cfb\u7edf, \u505c\u987f\u65f6\u95f4\u957f(High pause times)\u4e5f\u662f\u53ef\u4ee5\u63a5\u53d7\u7684\u3002\u7531\u4e8e\u9ad8\u541e\u5410\u91cf\u5e94\u7528\u8fd0\u884c\u65f6\u95f4\u957f,\u6240\u4ee5\u6b64\u65f6\u66f4\u5173\u5fc3\u7684\u662f\u5982\u4f55\u5c3d\u53ef\u80fd\u5feb\u5730\u5b8c\u6210\u6574\u4e2a\u4efb\u52a1\uff0c\u800c\u4e0d\u8003\u8651\u5feb\u901f\u54cd\u5e94\u3002<\/p>\n<h2><a target=\"_blank\" name=\"t20\"><\/a><a id=\"user-content-g1-\u5783\u573e\u6536\u96c6\u5668garbage-collector\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1-%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8garbage-collector\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1 \u5783\u573e\u6536\u96c6\u5668(Garbage Collector)<\/h2>\n<h3><a target=\"_blank\" name=\"t21\"><\/a><a id=\"user-content-g1-\u5783\u573e\u6536\u96c6\u5668\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1-%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1 \u5783\u573e\u6536\u96c6\u5668<\/h3>\n<p>G1 (Garbage-First)\u662f\u4e00\u6b3e\u9762\u5411\u670d\u52a1\u5668\u7684\u5783\u573e\u6536\u96c6\u5668,\u4e3b\u8981\u9488\u5bf9\u914d\u5907\u591a\u9897\u5904\u7406\u5668\u53ca\u5927\u5bb9\u91cf\u5185\u5b58\u7684\u673a\u5668. \u4ee5\u6781\u9ad8\u6982\u7387\u6ee1\u8db3GC\u505c\u987f\u65f6\u95f4\u8981\u6c42\u7684\u540c\u65f6,\u8fd8\u5177\u5907\u9ad8\u541e\u5410\u91cf\u6027\u80fd\u7279\u5f81. \u5728Oracle JDK 7 update 4 \u53ca\u4ee5\u4e0a\u7248\u672c\u4e2d\u5f97\u5230\u5b8c\u5168\u652f\u6301, \u4e13\u4e3a\u4ee5\u4e0b\u5e94\u7528\u7a0b\u5e8f\u8bbe\u8ba1:<\/p>\n<ul class=\"task-list\">\n<li>\u53ef\u4ee5\u50cfCMS\u6536\u96c6\u5668\u4e00\u6837,GC\u64cd\u4f5c\u4e0e\u5e94\u7528\u7684\u7ebf\u7a0b\u4e00\u8d77\u5e76\u53d1\u6267\u884c<\/li>\n<li>\u7d27\u51d1\u7684\u7a7a\u95f2\u5185\u5b58\u533a\u95f4\u4e14\u6ca1\u6709\u5f88\u957f\u7684GC\u505c\u987f\u65f6\u95f4.<\/li>\n<li>\u9700\u8981\u53ef\u9884\u6d4b\u7684GC\u6682\u505c\u8017\u65f6.<\/li>\n<li>\u4e0d\u60f3\u727a\u7272\u592a\u591a\u541e\u5410\u91cf\u6027\u80fd.<\/li>\n<li>\u542f\u52a8\u540e\u4e0d\u9700\u8981\u8bf7\u6c42\u66f4\u5927\u7684Java\u5806.<\/li>\n<\/ul>\n<p>G1\u7684\u957f\u671f\u76ee\u6807\u662f\u53d6\u4ee3CMS(Concurrent Mark-Sweep Collector, \u5e76\u53d1\u6807\u8bb0-\u6e05\u9664). \u56e0\u4e3a\u7279\u6027\u7684\u4e0d\u540c\u4f7fG1\u6210\u4e3a\u6bd4CMS\u66f4\u597d\u7684\u89e3\u51b3\u65b9\u6848. \u4e00\u4e2a\u533a\u522b\u662f,G1\u662f\u4e00\u6b3e\u538b\u7f29\u578b\u7684\u6536\u96c6\u5668.G1\u901a\u8fc7\u6709\u6548\u7684\u538b\u7f29\u5b8c\u5168\u907f\u514d\u4e86\u5bf9\u7ec6\u5fae\u7a7a\u95f2\u5185\u5b58\u7a7a\u95f4\u7684\u5206\u914d,\u4e0d\u7528\u4f9d\u8d56\u4e8eregions\uff0c\u8fd9\u4e0d\u4ec5\u5927\u5927\u7b80\u5316\u4e86\u6536\u96c6\u5668\uff0c\u800c\u4e14\u8fd8\u6d88\u9664\u4e86\u6f5c\u5728\u7684\u5185\u5b58\u788e\u7247\u95ee\u9898\u3002\u9664\u538b\u7f29\u4ee5\u5916\uff0cG1\u7684\u5783\u573e\u6536\u96c6\u505c\u987f\u4e5f\u6bd4CMS\u5bb9\u6613\u4f30\u8ba1\uff0c\u4e5f\u5141\u8bb8\u7528\u6237\u81ea\u5b9a\u4e49\u6240\u5e0c\u671b\u7684\u505c\u987f\u53c2\u6570(pause targets)<\/p>\n<h4><a target=\"_blank\" name=\"t22\"><\/a><a id=\"user-content-g1-\u64cd\u4f5c\u6982\u8ff0\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1-%E6%93%8D%E4%BD%9C%E6%A6%82%E8%BF%B0\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1 \u64cd\u4f5c\u6982\u8ff0<\/h4>\n<p>\u4e0a\u4e00\u4ee3\u7684\u5783\u573e\u6536\u96c6\u5668(\u4e32\u884cserial, \u5e76\u884cparallel, \u4ee5\u53caCMS)\u90fd\u628a\u5806\u5185\u5b58\u5212\u5206\u4e3a\u56fa\u5b9a\u5927\u5c0f\u7684\u4e09\u4e2a\u90e8\u5206: \u5e74\u8f7b\u4ee3(young generation), \u5e74\u8001\u4ee3(old generation), \u4ee5\u53ca\u6301\u4e45\u4ee3(permanent generation).<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/02_1_HeapStructure_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/02_1_HeapStructure_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u5185\u5b58\u4e2d\u7684\u6bcf\u4e2a\u5bf9\u8c61\u90fd\u5b58\u653e\u5728\u8fd9\u4e09\u4e2a\u533a\u57df\u4e2d\u7684\u4e00\u4e2a.<\/p>\n<p>\u800c G1 \u6536\u96c6\u5668\u91c7\u7528\u4e00\u79cd\u4e0d\u540c\u7684\u65b9\u5f0f\u6765\u7ba1\u7406\u5806\u5185\u5b58.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/02_2_G1HeapAllocation_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/02_2_G1HeapAllocation_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u5806\u5185\u5b58\u88ab\u5212\u5206\u4e3a\u591a\u4e2a\u5927\u5c0f\u76f8\u7b49\u7684 heap \u533a,\u6bcf\u4e2aheap\u533a\u90fd\u662f\u903b\u8f91\u4e0a\u8fde\u7eed\u7684\u4e00\u6bb5\u5185\u5b58(virtual memory). \u5176\u4e2d\u4e00\u90e8\u5206\u533a\u57df\u88ab\u5f53\u6210\u8001\u4e00\u4ee3\u6536\u96c6\u5668\u76f8\u540c\u7684\u89d2\u8272(eden, survivor, old), \u4f46\u6bcf\u4e2a\u89d2\u8272\u7684\u533a\u57df\u4e2a\u6570\u90fd\u4e0d\u662f\u56fa\u5b9a\u7684\u3002\u8fd9\u5728\u5185\u5b58\u4f7f\u7528\u4e0a\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u7075\u6d3b\u6027\u3002<\/p>\n<p>G1\u6267\u884c\u5783\u573e\u56de\u6536\u7684\u5904\u7406\u65b9\u5f0f\u4e0eCMS\u76f8\u4f3c. G1\u5728\u5168\u5c40\u6807\u8bb0\u9636\u6bb5(global marking phase)\u5e76\u53d1\u6267\u884c, \u4ee5\u786e\u5b9a\u5806\u5185\u5b58\u4e2d\u54ea\u4e9b\u5bf9\u8c61\u662f\u5b58\u6d3b\u7684\u3002\u6807\u8bb0\u9636\u6bb5\u5b8c\u6210\u540e,G1\u5c31\u53ef\u4ee5\u77e5\u9053\u54ea\u4e9bheap\u533a\u7684empty\u7a7a\u95f4\u6700\u5927\u3002\u5b83\u4f1a\u9996\u5148\u56de\u6536\u8fd9\u4e9b\u533a,\u901a\u5e38\u4f1a\u5f97\u5230\u5927\u91cf\u7684\u81ea\u7531\u7a7a\u95f4. \u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u8fd9\u79cd\u5783\u573e\u6536\u96c6\u65b9\u6cd5\u53eb\u505aGarbage-First(\u5783\u573e\u4f18\u5148)\u7684\u539f\u56e0\u3002\u987e\u540d\u601d\u4e49, G1\u5c06\u7cbe\u529b\u96c6\u4e2d\u653e\u5728\u53ef\u80fd\u5e03\u6ee1\u53ef\u6536\u56de\u5bf9\u8c61\u7684\u533a\u57df, \u53ef\u56de\u6536\u5bf9\u8c61(reclaimable objects)\u4e5f\u5c31\u662f\u6240\u8c13\u7684\u5783\u573e. G1\u4f7f\u7528\u6682\u505c\u9884\u6d4b\u6a21\u578b(pause prediction model)\u6765\u8fbe\u5230\u7528\u6237\u5b9a\u4e49\u7684\u76ee\u6807\u6682\u505c\u65f6\u95f4,\u5e76\u6839\u636e\u76ee\u6807\u6682\u505c\u65f6\u95f4\u6765\u9009\u62e9\u6b64\u6b21\u8fdb\u884c\u5783\u573e\u56de\u6536\u7684heap\u533a\u57df\u6570\u91cf.<\/p>\n<p>\u88abG1\u6807\u8bb0\u4e3a\u9002\u5408\u56de\u6536\u7684heap\u533a\u5c06\u4f7f\u7528\u8f6c\u79fb(evacuation)\u7684\u65b9\u5f0f\u8fdb\u884c\u5783\u573e\u56de\u6536. G1\u5c06\u4e00\u4e2a\u6216\u591a\u4e2aheap\u533a\u57df\u4e2d\u7684\u5bf9\u8c61\u62f7\u8d1d\u5230\u5176\u4ed6\u7684\u5355\u4e2a\u533a\u57df\u4e2d,\u5e76\u5728\u6b64\u8fc7\u7a0b\u4e2d\u538b\u7f29\u548c\u91ca\u653e\u5185\u5b58. \u5728\u591a\u6838CPU\u4e0a\u8f6c\u79fb\u662f\u5e76\u884c\u6267\u884c\u7684(parallel on multi-processors), \u8fd9\u6837\u80fd\u51cf\u5c11\u505c\u987f\u65f6\u95f4\u5e76\u589e\u52a0\u541e\u5410\u91cf. \u56e0\u6b64,\u6bcf\u6b21\u5783\u573e\u6536\u96c6\u65f6, G1\u90fd\u4f1a\u6301\u7eed\u4e0d\u65ad\u5730\u51cf\u5c11\u788e\u7247, \u5e76\u4e14\u5728\u7528\u6237\u7ed9\u5b9a\u7684\u6682\u505c\u65f6\u95f4\u5185\u6267\u884c. \u8fd9\u6bd4\u4ee5\u524d\u7684\u65b9\u6cd5\u5f3a\u5927\u4e86\u5f88\u591a. CMS\u5783\u573e\u6536\u96c6\u5668(Concurrent Mark Sweep,\u5e76\u53d1\u6807\u8bb0\u6e05\u7406)\u4e0d\u8fdb\u884c\u538b\u7f29. ParallelOld \u5783\u573e\u6536\u96c6\u53ea\u5bf9\u6574\u4e2a\u5806\u6267\u884c\u538b\u7f29,\u4ece\u800c\u5bfc\u81f4\u76f8\u5f53\u957f\u7684\u6682\u505c\u65f6\u95f4\u3002<\/p>\n<p>\u9700\u8981\u5f3a\u8c03\u7684\u662f, G1\u5e76\u4e0d\u662f\u4e00\u6b3e\u5b9e\u65f6\u5783\u573e\u6536\u96c6\u5668(real-time collector). \u80fd\u4ee5\u6781\u9ad8\u7684\u6982\u7387\u5728\u8bbe\u5b9a\u7684\u76ee\u6807\u6682\u505c\u65f6\u95f4\u5185\u5b8c\u6210,\u4f46\u4e0d\u4fdd\u8bc1\u7edd\u5bf9\u5728\u8fd9\u4e2a\u65f6\u95f4\u5185\u5b8c\u6210\u3002 \u57fa\u4e8e\u4ee5\u524d\u6536\u96c6\u7684\u5404\u79cd\u76d1\u63a7\u6570\u636e, G1\u4f1a\u6839\u636e\u7528\u6237\u6307\u5b9a\u7684\u76ee\u6807\u65f6\u95f4\u6765\u9884\u4f30\u80fd\u56de\u6536\u591a\u5c11\u4e2aheap\u533a. \u56e0\u6b64,\u6536\u96c6\u5668\u6709\u4e00\u4e2a\u76f8\u5f53\u7cbe\u786e\u7684heap\u533a\u8017\u65f6\u8ba1\u7b97\u6a21\u578b,\u5e76\u6839\u636e\u8be5\u6a21\u578b\u6765\u786e\u5b9a\u5728\u7ed9\u5b9a\u65f6\u95f4\u5185\u53bb\u56de\u6536\u54ea\u4e9bheap\u533a.<\/p>\n<p>\u6ce8\u610f\u00a0G1\u5206\u4e3a\u4e24\u4e2a\u9636\u6bb5: \u5e76\u53d1\u9636\u6bb5(concurrent, \u4e0e\u5e94\u7528\u7ebf\u7a0b\u4e00\u8d77\u8fd0\u884c, \u5982: \u7ec6\u5316 refinement\u3001\u6807\u8bb0 marking\u3001\u6e05\u7406 cleanup) \u548c \u5e76\u884c\u9636\u6bb5(parallel, \u591a\u7ebf\u7a0b\u6267\u884c, \u5982: \u505c\u6b62\u6240\u6709JVM\u7ebf\u7a0b, stop the world). \u800c FullGC(\u5b8c\u6574\u5783\u573e\u6536\u96c6)\u4ecd\u7136\u662f\u5355\u7ebf\u7a0b\u7684, \u4f46\u5982\u679c\u8fdb\u884c\u9002\u5f53\u7684\u8c03\u4f18,\u5219\u5e94\u7528\u7a0b\u5e8f\u5e94\u8be5\u80fd\u591f\u907f\u514d full GC\u3002<\/p>\n<h4><a target=\"_blank\" name=\"t23\"><\/a><a id=\"user-content-g1-\u7684\u5185\u5b58\u5360\u7528footprint\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1-%E7%9A%84%E5%86%85%E5%AD%98%E5%8D%A0%E7%94%A8footprint\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1 \u7684\u5185\u5b58\u5360\u7528(Footprint)<\/h4>\n<p>\u5982\u679c\u4ece ParallelOldGC \u6216\u8005 CMS\u6536\u96c6\u5668\u8fc1\u79fb\u5230 G1, \u60a8\u53ef\u80fd\u4f1a\u770b\u5230JVM\u8fdb\u7a0b\u5360\u7528\u66f4\u591a\u7684\u5185\u5b58(a larger JVM process size). \u8fd9\u5728\u5f88\u5927\u7a0b\u5ea6\u4e0a\u4e0e \u201caccounting\u201d \u6570\u636e\u7ed3\u6784\u6709\u5173, \u5982 Remembered Sets \u548c Collection Sets.<\/p>\n<p>Remembered Sets\u00a0\u7b80\u79f0 RSets, \u8ddf\u8e2a\u6307\u5411\u67d0\u4e2aheap\u533a\u5185\u7684\u5bf9\u8c61\u5f15\u7528. \u5806\u5185\u5b58\u4e2d\u7684\u6bcf\u4e2a\u533a\u90fd\u6709\u4e00\u4e2a RSet. RSet \u4f7fheap\u533a\u80fd\u5e76\u884c\u72ec\u7acb\u5730\u8fdb\u884c\u5783\u573e\u96c6\u5408. RSets\u7684\u603b\u4f53\u5f71\u54cd\u5c0f\u4e8e5%.<\/p>\n<p>Collection Sets\u00a0\u7b80\u79f0 CSets, \u6536\u96c6\u96c6\u5408, \u5728\u4e00\u6b21GC\u4e2d\u5c06\u6267\u884c\u5783\u573e\u56de\u6536\u7684heap\u533a. GC\u65f6\u5728CSet\u4e2d\u7684\u6240\u6709\u5b58\u6d3b\u6570\u636e(live data)\u90fd\u4f1a\u88ab\u8f6c\u79fb(\u590d\u5236\/\u79fb\u52a8). \u96c6\u5408\u4e2d\u7684heap\u533a\u53ef\u4ee5\u662f Eden, survivor, \u548c\/\u6216 old generation. CSets\u6240\u5360\u7528\u7684JVM\u5185\u5b58\u5c0f\u4e8e1%.<\/p>\n<h4><a target=\"_blank\" name=\"t24\"><\/a><a id=\"user-content-\u63a8\u8350\u4f7f\u7528-g1-\u7684\u573a\u666frecommended-use-cases\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E6%8E%A8%E8%8D%90%E4%BD%BF%E7%94%A8-g1-%E7%9A%84%E5%9C%BA%E6%99%AFrecommended-use-cases\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u63a8\u8350\u4f7f\u7528 G1 \u7684\u573a\u666f(Recommended Use Cases)<\/h4>\n<p>G1\u7684\u9996\u8981\u76ee\u6807\u662f\u4e3a\u9700\u8981\u5927\u91cf\u5185\u5b58\u7684\u7cfb\u7edf\u63d0\u4f9b\u4e00\u4e2a\u4fdd\u8bc1GC\u4f4e\u5ef6\u8fdf\u7684\u89e3\u51b3\u65b9\u6848. \u4e5f\u5c31\u662f\u8bf4\u5806\u5185\u5b58\u57286GB\u53ca\u4ee5\u4e0a,\u7a33\u5b9a\u548c\u53ef\u9884\u6d4b\u7684\u6682\u505c\u65f6\u95f4\u5c0f\u4e8e0.5\u79d2.<\/p>\n<p>\u5982\u679c\u5e94\u7528\u7a0b\u5e8f\u5177\u6709\u5982\u4e0b\u7684\u4e00\u4e2a\u6216\u591a\u4e2a\u7279\u5f81,\u90a3\u4e48\u5c06\u5783\u573e\u6536\u96c6\u5668\u4eceCMS\u6216ParallelOldGC\u5207\u6362\u5230G1\u5c06\u4f1a\u5927\u5927\u63d0\u5347\u6027\u80fd.<\/p>\n<ul class=\"task-list\">\n<li>Full GC \u6b21\u6570\u592a\u9891\u7e41\u6216\u8005\u6d88\u8017\u65f6\u95f4\u592a\u957f.<\/li>\n<li>\u5bf9\u8c61\u5206\u914d\u7684\u9891\u7387\u6216\u4ee3\u6570\u63d0\u5347(promotion)\u663e\u8457\u53d8\u5316.<\/li>\n<li>\u53d7\u591f\u4e86\u592a\u957f\u7684\u5783\u573e\u56de\u6536\u6216\u5185\u5b58\u6574\u7406\u65f6\u95f4(\u8d85\u8fc70.5~1\u79d2)<\/li>\n<\/ul>\n<p>\u6ce8\u610f: \u5982\u679c\u6b63\u5728\u4f7f\u7528CMS\u6216ParallelOldGC,\u800c\u5e94\u7528\u7a0b\u5e8f\u7684\u5783\u573e\u6536\u96c6\u505c\u987f\u65f6\u95f4\u5e76\u4e0d\u957f,\u90a3\u4e48\u7ee7\u7eed\u4f7f\u7528\u73b0\u5728\u7684\u5783\u573e\u6536\u96c6\u5668\u662f\u4e2a\u597d\u4e3b\u610f. \u4f7f\u7528\u6700\u65b0\u7684JDK\u65f6\u5e76\u4e0d\u8981\u6c42\u5207\u6362\u5230G1\u6536\u96c6\u5668\u3002<\/p>\n<h2><a target=\"_blank\" name=\"t25\"><\/a><a id=\"user-content-cms\u7684gc\u6982\u8ff0\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#cms%E7%9A%84gc%E6%A6%82%E8%BF%B0\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>CMS\u7684GC\u6982\u8ff0<\/h2>\n<h3><a target=\"_blank\" name=\"t26\"><\/a><a id=\"user-content-\u5206\u4ee3gcgenerational-gc\u4e0e-cms\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%88%86%E4%BB%A3gcgenerational-gc%E4%B8%8E-cms\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u5206\u4ee3GC(Generational GC)\u4e0e CMS<\/h3>\n<p>\u5e76\u53d1\u6807\u8bb0\u6e05\u7406(CMS, Concurrent Mark Sweep)\u6536\u96c6\u5668(\u4e5f\u79f0\u4e3a\u591a\u5e76\u53d1\u4f4e\u6682\u505c\u7684\u6536\u96c6\u5668)\u56de\u6536\u8001\u5e74\u4ee3\u5185\u5b58(tenured generation). \u5b83\u5c06\u5783\u573e\u56de\u6536\u4e2d\u7684\u7edd\u5927\u90e8\u5206\u5de5\u4f5c\u4e0e\u5e94\u7528\u7a0b\u5e8f\u7684\u7ebf\u7a0b\u4e00\u8d77\u5e76\u53d1\u6267\u884c,\u4ee5\u671f\u80fd\u6700\u5c0f\u5316\u6682\u505c\u65f6\u95f4. \u901a\u5e38\u591a\u5e76\u53d1\u4f4e\u6682\u505c\u6536\u96c6\u5668\u6536\u96c6\u5668\u4e0d\u590d\u5236\u6216\u4e5f\u4e0d\u538b\u7f29\u5b58\u6d3b\u7684\u5bf9\u8c61. \u5783\u573e\u56de\u6536\u4e0d\u79fb\u52a8\u5b58\u6d3b\u7684\u5bf9\u8c61, \u5982\u679c\u4ea7\u751f\u5185\u5b58\u788e\u7247\u95ee\u9898,\u5c31\u4f1a\u5206\u914d\/\u5360\u7528\u66f4\u5927\u7684\u5806\u5185\u5b58\u7a7a\u95f4\u3002<\/p>\n<p>\u6ce8\u610f:\u00a0\u5e74\u8f7b\u4ee3\u4f7f\u7528\u7684CMS\u6536\u96c6\u5668\u4e5f\u548c\u5e76\u884c\u6536\u96c6\u5668\u91c7\u7528\u4e00\u6837\u7684\u7b97\u6cd5.<\/p>\n<h4><a target=\"_blank\" name=\"t27\"><\/a><a id=\"user-content-cms-\u5783\u573e\u6536\u96c6\u9636\u6bb5\u5212\u5206collection-phases\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#cms-%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E9%98%B6%E6%AE%B5%E5%88%92%E5%88%86collection-phases\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>CMS \u5783\u573e\u6536\u96c6\u9636\u6bb5\u5212\u5206(Collection Phases)<\/h4>\n<p>CMS\u6536\u96c6\u5668\u5728\u8001\u5e74\u4ee3\u5806\u5185\u5b58\u7684\u56de\u6536\u4e2d\u6267\u884c\u5206\u4e3a\u4ee5\u4e0b\u9636\u6bb5:<\/p>\n<table>\n<tbody>\n<tr>\n<th>\u9636\u6bb5<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<tr>\n<td>(1) \u521d\u59cb\u6807\u8bb0 (Initial Mark)<\/td>\n<td>(Stop the World Event,\u6240\u6709\u5e94\u7528\u7ebf\u7a0b\u6682\u505c) \u5728\u8001\u5e74\u4ee3(old generation)\u4e2d\u7684\u5bf9\u8c61, \u5982\u679c\u4ece\u5e74\u8f7b\u4ee3(young generation)\u4e2d\u80fd\u8bbf\u95ee\u5230, \u5219\u88ab \u201c\u6807\u8bb0,marked\u201d \u4e3a\u53ef\u8fbe\u7684(reachable).\u5bf9\u8c61\u5728\u65e7\u4e00\u4ee3\u201c\u6807\u5fd7\u201d\u53ef\u4ee5\u5305\u62ec\u8fd9\u4e9b\u5bf9\u8c61\u53ef\u80fd\u53ef\u4ee5\u4ece\u5e74\u8f7b\u4e00\u4ee3\u3002\u6682\u505c\u65f6\u95f4\u4e00\u822c\u6301\u7eed\u65f6\u95f4\u8f83\u77ed,\u76f8\u5bf9\u5c0f\u7684\u6536\u96c6\u6682\u505c\u65f6\u95f4.<\/td>\n<\/tr>\n<tr>\n<td>(2) \u5e76\u53d1\u6807\u8bb0 (Concurrent Marking)<\/td>\n<td>\u5728Java\u5e94\u7528\u7a0b\u5e8f\u7ebf\u7a0b\u8fd0\u884c\u7684\u540c\u65f6\u904d\u5386\u8001\u5e74\u4ee3(tenured generation)\u7684\u53ef\u8fbe\u5bf9\u8c61\u56fe\u3002\u626b\u63cf\u4ece\u88ab\u6807\u8bb0\u7684\u5bf9\u8c61\u5f00\u59cb,\u76f4\u5230\u904d\u5386\u5b8c\u4eceroot\u53ef\u8fbe\u7684\u6240\u6709\u5bf9\u8c61. \u8c03\u6574\u5668(mutators)\u5728\u5e76\u53d1\u9636\u6bb5\u76842\u30013\u30015\u9636\u6bb5\u6267\u884c,\u5728\u8fd9\u4e9b\u9636\u6bb5\u4e2d\u65b0\u5206\u914d\u7684\u6240\u6709\u5bf9\u8c61(\u5305\u62ec\u88ab\u63d0\u5347\u7684\u5bf9\u8c61)\u90fd\u7acb\u523b\u6807\u8bb0\u4e3a\u5b58\u6d3b\u72b6\u6001.<\/td>\n<\/tr>\n<tr>\n<td>(3) \u518d\u6b21\u6807\u8bb0(Remark)<\/td>\n<td>(Stop the World Event, \u6240\u6709\u5e94\u7528\u7ebf\u7a0b\u6682\u505c) \u67e5\u627e\u5728\u5e76\u53d1\u6807\u8bb0\u9636\u6bb5\u6f0f\u8fc7\u7684\u5bf9\u8c61\uff0c\u8fd9\u4e9b\u5bf9\u8c61\u662f\u5728\u5e76\u53d1\u6536\u96c6\u5668\u5b8c\u6210\u5bf9\u8c61\u8ddf\u8e2a\u4e4b\u540e\u7531\u5e94\u7528\u7ebf\u7a0b\u66f4\u65b0\u7684.<\/td>\n<\/tr>\n<tr>\n<td>(4) \u5e76\u53d1\u6e05\u7406(Concurrent Sweep)<\/td>\n<td>\u56de\u6536\u5728\u6807\u8bb0\u9636\u6bb5(marking phases)\u786e\u5b9a\u4e3a\u4e0d\u53ef\u53ca\u7684\u5bf9\u8c61. \u6b7b\u5bf9\u8c61\u7684\u56de\u6536\u5c06\u6b64\u5bf9\u8c61\u5360\u7528\u7684\u7a7a\u95f4\u589e\u52a0\u5230\u4e00\u4e2a\u7a7a\u95f2\u5217\u8868(free list),\u4f9b\u4ee5\u540e\u7684\u5206\u914d\u4f7f\u7528\u3002\u6b7b\u5bf9\u8c61\u7684\u5408\u5e76\u53ef\u80fd\u5728\u6b64\u65f6\u53d1\u751f. \u8bf7\u6ce8\u610f,\u5b58\u6d3b\u7684\u5bf9\u8c61\u5e76\u6ca1\u6709\u88ab\u79fb\u52a8.<\/td>\n<\/tr>\n<tr>\n<td>(5) \u91cd\u7f6e(Resetting)<\/td>\n<td>\u6e05\u7406\u6570\u636e\u7ed3\u6784,\u4e3a\u4e0b\u4e00\u4e2a\u5e76\u53d1\u6536\u96c6\u505a\u51c6\u5907.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4><a target=\"_blank\" name=\"t28\"><\/a><a id=\"user-content-cms\u7684gc\u6b65\u9aa4\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#cms%E7%9A%84gc%E6%AD%A5%E9%AA%A4\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>CMS\u7684GC\u6b65\u9aa4<\/h4>\n<p>\u63a5\u4e0b\u6765,\u8ba9\u6211\u4eec\u4e00\u6b65\u6b65\u5730\u8bb2\u8ff0CMS\u6536\u96c6\u5668\u7684\u64cd\u4f5c.<\/p>\n<h5><a target=\"_blank\" name=\"t29\"><\/a><a id=\"user-content-1-cms\u7684\u5806\u5185\u5b58\u7ed3\u6784heap-structure\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#1-cms%E7%9A%84%E5%A0%86%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%84heap-structure\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>1. CMS\u7684\u5806\u5185\u5b58\u7ed3\u6784(Heap Structure)<\/h5>\n<p>\u5806\u5185\u5b58\u88ab\u5206\u4e3a3\u4e2a\u7a7a\u95f4.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/03_1_CMS_Heap_Structure_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/03_1_CMS_Heap_Structure_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u5e74\u8f7b\u4ee3(Young generation)\u5206\u4e3a 1\u4e2a\u65b0\u751f\u4ee3\u7a7a\u95f4(Eden)\u548c2\u4e2a\u5b58\u6d3b\u533a(survivor spaces). \u8001\u5e74\u4ee3(Old generation)\u662f\u4e00\u5927\u5757\u8fde\u7eed\u7684\u7a7a\u95f4, \u5783\u573e\u56de\u6536(Object collection)\u5c31\u5730\u89e3\u51b3(is done in place), \u9664\u4e86 Full GC, \u5426\u5219\u4e0d\u4f1a\u8fdb\u884c\u538b\u7f29(compaction).<\/p>\n<h5><a target=\"_blank\" name=\"t30\"><\/a><a id=\"user-content-2-cms\u5e74\u8f7b\u4ee3young-gc-\u7684\u5de5\u4f5c\u65b9\u5f0f\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#2-cms%E5%B9%B4%E8%BD%BB%E4%BB%A3young-gc-%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%96%B9%E5%BC%8F\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>2. CMS\u5e74\u8f7b\u4ee3(Young) GC \u7684\u5de5\u4f5c\u65b9\u5f0f<\/h5>\n<p>\u5e74\u8f7b\u4ee3(young generation)\u7528\u9ad8\u4eae\u7684\u7eff\u8272\u8868\u793a, \u8001\u5e74\u4ee3(old generation)\u7528\u84dd\u8272\u8868\u793a\u3002\u5982\u679c\u7a0b\u5e8f\u8fd0\u884c\u4e86\u4e00\u6bb5\u65f6\u95f4,\u90a3\u4e48 CMS \u770b\u8d77\u6765\u5c31\u50cf\u4e0b\u56fe\u8fd9\u4e2a\u6837\u5b50. \u5bf9\u8c61\u6563\u843d\u5728\u8001\u5e74\u4ee3\u4e2d\u7684\u5404\u5904\u5730\u65b9.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/03_2_How_yong_GC_Works_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/03_2_How_yong_GC_Works_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u5728\u4f7f\u7528 CMS \u65f6, \u8001\u5e74\u4ee3\u7684\u5bf9\u8c61\u56de\u6536\u5c31\u5730\u8fdb\u884c(deallocated in place). \u4ed6\u4eec\u4e0d\u4f1a\u88ab\u79fb\u52a8\u5230\u5176\u4ed6\u5730\u65b9. \u9664\u4e86 Full GC, \u5426\u5219\u5185\u5b58\u7a7a\u95f4\u4e0d\u4f1a\u8fdb\u884c\u538b\u7f29.<\/p>\n<h5><a target=\"_blank\" name=\"t31\"><\/a><a id=\"user-content-3-\u5e74\u8f7b\u4ee3\u5783\u573e\u56de\u6536young-generation-collection\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#3-%E5%B9%B4%E8%BD%BB%E4%BB%A3%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6young-generation-collection\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>3. \u5e74\u8f7b\u4ee3\u5783\u573e\u56de\u6536(Young Generation Collection)<\/h5>\n<p>Eden\u533a\u548csurvivor\u533a\u4e2d\u7684\u5b58\u6d3b\u5bf9\u8c61\u88ab\u62f7\u8d1d\u5230\u53e6\u4e00\u4e2a\u7a7a\u7684survivor \u533a. \u5b58\u6d3b\u65f6\u95f4\u66f4\u957f,\u8fbe\u5230\u9600\u503c\u7684\u5bf9\u8c61\u4f1a\u88ab\u63d0\u5347\u5230\u8001\u5e74\u4ee3(promoted to old generation).<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/03_3_Yong_Generation_Collection_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/03_3_Yong_Generation_Collection_CN.png\" alt=\"\" \/><\/a><\/p>\n<h5><a target=\"_blank\" name=\"t32\"><\/a><a id=\"user-content-4-\u5e74\u8f7b\u4ee3young-gc-\u4e4b\u540e\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#4-%E5%B9%B4%E8%BD%BB%E4%BB%A3young-gc-%E4%B9%8B%E5%90%8E\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>4. \u5e74\u8f7b\u4ee3(Young) GC \u4e4b\u540e<\/h5>\n<p>\u5e74\u8f7b\u4ee3(Young)\u8fdb\u884c\u4e00\u6b21\u5783\u573e\u56de\u6536\u4e4b\u540e, Eden \u533a\u88ab\u6e05\u7406\u5e72\u51c0(cleared),\u4e24\u4e2a survivor \u533a\u4e2d\u7684\u4e00\u4e2a\u4e5f\u88ab\u6e05\u7406\u5e72\u51c0\u4e86. \u5982\u4e0b\u56fe\u6240\u793a:<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/03_4_After_Young_GC_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/03_4_After_Young_GC_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u56fe\u4e2d\u65b0\u63d0\u5347\u7684\u5bf9\u8c61\u7528\u6df1\u84dd\u8272\u6765\u6807\u8bc6. \u7eff\u8272\u7684\u90e8\u5206\u662f\u5e74\u8f7b\u4ee3\u4e2d\u5b58\u6d3b\u7684\u5bf9\u8c61,\u4f46\u8fd8\u6ca1\u88ab\u63d0\u5347\u5230\u8001\u5e74\u4ee3\u4e2d.<\/p>\n<h5><a target=\"_blank\" name=\"t33\"><\/a><a id=\"user-content-5-cms\u7684\u8001\u5e74\u4ee3\u56de\u6536old-generation-collection\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#5-cms%E7%9A%84%E8%80%81%E5%B9%B4%E4%BB%A3%E5%9B%9E%E6%94%B6old-generation-collection\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>5. CMS\u7684\u8001\u5e74\u4ee3\u56de\u6536(Old Generation Collection)<\/h5>\n<p>\u4e24\u6b21stop the world\u4e8b\u4ef6\u53d1\u751f\u5728: \u521d\u59cb\u6807\u8bb0(initial mark)\u4ee5\u53ca\u91cd\u65b0\u6807\u8bb0(remark)\u9636\u6bb5. \u5f53\u8001\u5e74\u4ee3\u8fbe\u5230\u4e00\u5b9a\u7684\u5360\u6709\u7387\u65f6,CMS\u5783\u573e\u56de\u6536\u5668\u5c31\u5f00\u59cb\u5de5\u4f5c.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/03_5_Old_Generation_Collection_in_CMS_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/03_5_Old_Generation_Collection_in_CMS_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>(1) \u521d\u59cb\u6807\u8bb0(Initial mark)\u9636\u6bb5\u7684\u505c\u987f\u65f6\u95f4\u5f88\u77ed,\u5728\u6b64\u9636\u6bb5\u5b58\u6d3b\u7684(live,reachable,\u53ef\u53ca\u7684) \u5bf9\u8c61\u88ab\u8bb0\u4e0b\u6765. (2) \u5e76\u53d1\u6807\u8bb0(Concurrent marking)\u5728\u7a0b\u5e8f\u7ee7\u7eed\u8fd0\u884c\u7684\u540c\u65f6\u627e\u51fa\u5b58\u6d3b\u7684\u5bf9\u8c61. \u6700\u540e, \u5728\u7b2c(3)\u9636\u6bb5(remark phase), \u67e5\u627e\u5728\u7b2c(2)\u9636\u6bb5(concurrent marking)\u4e2d\u9519\u8fc7\u7684\u5bf9\u8c61.<\/p>\n<h5><a target=\"_blank\" name=\"t34\"><\/a><a id=\"user-content-6-\u8001\u5e74\u4ee3\u56de\u6536---\u5e76\u53d1\u6e05\u7406concurrent-sweep\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#6-%E8%80%81%E5%B9%B4%E4%BB%A3%E5%9B%9E%E6%94%B6---%E5%B9%B6%E5%8F%91%E6%B8%85%E7%90%86concurrent-sweep\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>6. \u8001\u5e74\u4ee3\u56de\u6536 - \u5e76\u53d1\u6e05\u7406(Concurrent Sweep)<\/h5>\n<p>\u5728\u524d\u9762\u9636\u6bb5\u672a\u88ab\u6807\u8bb0\u7684\u5bf9\u8c61\u5c06\u4f1a\u5c31\u5730\u91ca\u653e(deallocated in place). \u6b64\u5904\u6ca1\u6709\u538b\u7f29(compaction).<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/03_6_Concurrent_Sweep_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/03_6_Concurrent_Sweep_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u5907\u6ce8:\u00a0\u672a\u6807\u8bb0(Unmarked)\u7684\u5bf9\u8c61 == \u5df2\u6b7b\u5bf9\u8c61(Dead Objects)<\/p>\n<h4><a target=\"_blank\" name=\"t35\"><\/a><a id=\"user-content-7-\u8001\u5e74\u4ee3\u56de\u6536---\u6e05\u7406\u4e4b\u540eafter-sweeping\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#7-%E8%80%81%E5%B9%B4%E4%BB%A3%E5%9B%9E%E6%94%B6---%E6%B8%85%E7%90%86%E4%B9%8B%E5%90%8Eafter-sweeping\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>7. \u8001\u5e74\u4ee3\u56de\u6536 - \u6e05\u7406\u4e4b\u540e(After Sweeping)<\/h4>\n<p>\u5728\u7b2c(4)\u6b65(Sweeping phase)\u4e4b\u540e, \u53ef\u4ee5\u770b\u5230\u5f88\u591a\u5185\u5b58\u88ab\u91ca\u653e\u4e86. \u8fd8\u5e94\u8be5\u6ce8\u610f\u5230,\u8fd9\u91cc\u5e76\u6ca1\u6709\u6267\u884c\u5185\u5b58\u538b\u7f29\u6574\u7406(no compaction).<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/03_7_After_Sweeping_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/03_7_After_Sweeping_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u6700\u540e, CMS \u6536\u96c6\u5668\u8fdb\u5165(move through)\u7b2c(5)\u9636\u6bb5, \u91cd\u7f6e(resetting phase), \u7136\u540e\u7b49\u5019\u4e0b\u4e00\u6b21\u7684GC\u9600\u503c\u5230\u6765(GC threshold).<\/p>\n<h2><a target=\"_blank\" name=\"t36\"><\/a><a id=\"user-content-g1\u5783\u573e\u6536\u96c6\u5668\u6982\u8ff0\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8%E6%A6%82%E8%BF%B0\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1\u5783\u573e\u6536\u96c6\u5668\u6982\u8ff0<\/h2>\n<h3><a target=\"_blank\" name=\"t37\"><\/a><a id=\"user-content-\u4e00\u6b65\u6b65\u4ecb\u7ecdg1\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E4%B8%80%E6%AD%A5%E6%AD%A5%E4%BB%8B%E7%BB%8Dg1\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u4e00\u6b65\u6b65\u4ecb\u7ecdG1<\/h3>\n<p>G1\u6536\u96c6\u5668\u91c7\u7528\u4e00\u79cd\u4e0d\u540c\u7684\u65b9\u5f0f\u6765\u5206\u914d\u5806. \u4e0b\u9762\u901a\u8fc7\u56fe\u89e3\u7684\u65b9\u5f0f\u4e00\u6b65\u6b65\u5730\u8bb2\u8ff0G1\u7cfb\u7edf.<\/p>\n<h4><a target=\"_blank\" name=\"t38\"><\/a><a id=\"user-content-1-g1\u7684\u5806\u5185\u5b58\u7ed3\u6784\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#1-g1%E7%9A%84%E5%A0%86%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%84\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>1. G1\u7684\u5806\u5185\u5b58\u7ed3\u6784<\/h4>\n<p>\u5806\u5185\u5b58\u88ab\u5212\u5206\u4e3a\u56fa\u5b9a\u5927\u5c0f\u7684\u591a\u4e2a\u533a\u57df.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_1_G1_Heap_Structure_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_1_G1_Heap_Structure_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u6bcf\u4e2aheap\u533a(Region)\u7684\u5927\u5c0f\u5728JVM\u542f\u52a8\u65f6\u5c31\u786e\u5b9a\u4e86. JVM \u901a\u5e38\u751f\u6210 2000 \u4e2a\u5de6\u53f3\u7684heap\u533a, \u6839\u636e\u5806\u5185\u5b58\u7684\u603b\u5927\u5c0f,\u533a\u7684size\u8303\u56f4\u5141\u8bb8\u4e3a 1Mb \u5230 32Mb.<\/p>\n<h4><a target=\"_blank\" name=\"t39\"><\/a><a id=\"user-content-2-g1-\u5806\u7a7a\u95f4\u5206\u914d\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#2-g1-%E5%A0%86%E7%A9%BA%E9%97%B4%E5%88%86%E9%85%8D\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>2. G1 \u5806\u7a7a\u95f4\u5206\u914d<\/h4>\n<p>\u5b9e\u9645\u4e0a,\u8fd9\u4e9b\u533a\u57df(regions)\u88ab\u6620\u5c04\u4e3a\u903b\u8f91\u4e0a\u7684 Eden, Survivor, \u548c old generation(\u8001\u5e74\u4ee3)\u7a7a\u95f4.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/02_2_G1HeapAllocation_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/02_2_G1HeapAllocation_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u56fe\u4e2d\u7684\u989c\u8272\u6807\u8bc6\u4e86\u6bcf\u4e00\u4e2a\u533a\u57df\u5c5e\u4e8e\u54ea\u4e2a\u89d2\u8272. \u5b58\u6d3b\u7684\u5bf9\u8c61\u4ece\u4e00\u5757\u533a\u57df\u8f6c\u79fb(\u590d\u5236\u6216\u79fb\u52a8)\u5230\u53e6\u4e00\u5757\u533a\u57df\u3002\u8bbe\u8ba1\u6210 heap \u533a\u7684\u76ee\u7684\u662f\u4e3a\u4e86\u5e76\u884c\u5730\u8fdb\u884c\u5783\u573e\u56de\u6536(\u7684\u540c\u65f6\u505c\u6b62\/\u6216\u4e0d\u505c\u6b62\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u7ebf\u7a0b).<\/p>\n<p>\u5982\u56fe\u6240\u793a,heap\u533a\u53ef\u4ee5\u5206\u914d\u4e3a Eden, Survivor, \u6216 old generation(\u8001\u5e74\u4ee3)\u533a. \u6b64\u5916,\u8fd8\u6709\u7b2c\u56db\u79cd\u7c7b\u578b\u7684\u5bf9\u8c61\u88ab\u79f0\u4e3a\u5de8\u65e0\u9738\u533a\u57df(Humongous regions),\u8fd9\u79cd\u5de8\u65e0\u9738\u533a\u662f\u8bbe\u8ba1\u4e86\u7528\u6765\u4fdd\u5b58\u6bd4<strong>\u6807\u51c6\u5757<\/strong>(standard region)\u592750%\u53ca\u4ee5\u4e0a\u7684\u5bf9\u8c61, \u5b83\u4eec\u5b58\u50a8\u5728\u4e00\u7ec4\u8fde\u7eed\u7684\u533a\u4e2d. \u6700\u540e\u4e00\u4e2a\u7c7b\u578b\u662f\u5806\u5185\u5b58\u4e2d\u7684\u672a\u4f7f\u7528\u533a(unused areas).<\/p>\n<p>\u5907\u6ce8:\u00a0\u622a\u6b62\u82f1\u6587\u539f\u6587\u53d1\u8868\u65f6,\u5de8\u65e0\u9738\u5bf9\u8c61\u7684\u56de\u6536\u8fd8\u6ca1\u6709\u5f97\u5230\u4f18\u5316. \u56e0\u6b64,\u60a8\u5e94\u8be5\u5c3d\u91cf\u907f\u514d\u521b\u5efa\u592a\u5927(\u5927\u4e8e32MB?)\u7684\u5bf9\u8c61.<\/p>\n<h4><a target=\"_blank\" name=\"t40\"><\/a><a id=\"user-content-3-g1\u4e2d\u7684\u5e74\u8f7b\u4ee3young-generation\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#3-g1%E4%B8%AD%E7%9A%84%E5%B9%B4%E8%BD%BB%E4%BB%A3young-generation\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>3. G1\u4e2d\u7684\u5e74\u8f7b\u4ee3(Young Generation)<\/h4>\n<p>\u5806\u88ab\u5206\u4e3a\u5927\u7ea62000\u4e2a\u533a. \u6700\u5c0fsize\u4e3a1 Mb, \u6700\u5927size\u4e3a 32Mb. \u84dd\u8272\u7684\u533a\u4fdd\u5b58\u8001\u5e74\u4ee3\u5bf9\u8c61,\u7eff\u8272\u533a\u57df\u4fdd\u5b58\u5e74\u8f7b\u4ee3\u5bf9\u8c61.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_3_Young_Generation_in_G1_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_3_Young_Generation_in_G1_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u6ce8\u610fG1\u4e2d\u5404\u4ee3\u7684heap\u533a\u4e0d\u50cf\u8001\u4e00\u4ee3\u5783\u573e\u6536\u96c6\u5668\u4e00\u6837\u8981\u6c42\u5404\u90e8\u5206\u662f\u8fde\u7eed\u7684.<\/p>\n<h4><a target=\"_blank\" name=\"t41\"><\/a><a id=\"user-content-4-g1\u4e2d\u7684\u4e00\u6b21\u5e74\u8f7b\u4ee3gc\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#4-g1%E4%B8%AD%E7%9A%84%E4%B8%80%E6%AC%A1%E5%B9%B4%E8%BD%BB%E4%BB%A3gc\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>4. G1\u4e2d\u7684\u4e00\u6b21\u5e74\u8f7b\u4ee3GC<\/h4>\n<p>\u5b58\u6d3b\u7684\u5bf9\u8c61\u88ab\u8f6c\u79fb(copied or moved)\u5230\u4e00\u4e2a\/\u6216\u591a\u4e2a\u5b58\u6d3b\u533a(survivor regions). \u5982\u679c\u5b58\u6d3b\u65f6\u95f4\u8fbe\u5230\u9600\u503c,\u8fd9\u90e8\u5206\u5bf9\u8c61\u5c31\u4f1a\u88ab\u63d0\u5347\u5230\u8001\u5e74\u4ee3(promoted to old generation regions).<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_4_A_Young_GC_in_G1_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_4_A_Young_GC_in_G1_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u6b64\u65f6\u4f1a\u6709\u4e00\u6b21 stop the world(STW)\u6682\u505c. \u4f1a\u8ba1\u7b97\u51fa Eden\u5927\u5c0f\u548c survivor \u5927\u5c0f,\u7ed9\u4e0b\u4e00\u6b21\u5e74\u8f7b\u4ee3GC\u4f7f\u7528. \u6e05\u5355\u7edf\u8ba1\u4fe1\u606f(Accounting)\u4fdd\u5b58\u4e86\u7528\u6765\u8f85\u52a9\u8ba1\u7b97size. \u8bf8\u5982\u6682\u505c\u65f6\u95f4\u76ee\u6807\u4e4b\u7c7b\u7684\u4e1c\u897f\u4e5f\u4f1a\u7eb3\u5165\u8003\u8651.<\/p>\n<p>\u8fd9\u79cd\u65b9\u6cd5\u4f7f\u5f97\u8c03\u6574\u5404\u4ee3\u533a\u57df\u7684\u5c3a\u5bf8\u5f88\u5bb9\u6613, \u8ba9\u5176\u66f4\u5927\u6216\u66f4\u5c0f\u4e00\u4e9b\u4ee5\u6ee1\u8db3\u9700\u8981.<\/p>\n<h4><a target=\"_blank\" name=\"t42\"><\/a><a id=\"user-content-5-g1\u7684\u4e00\u6b21\u5e74\u8f7b\u4ee3gc\u5b8c\u6210\u540e\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#5-g1%E7%9A%84%E4%B8%80%E6%AC%A1%E5%B9%B4%E8%BD%BB%E4%BB%A3gc%E5%AE%8C%E6%88%90%E5%90%8E\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>5. G1\u7684\u4e00\u6b21\u5e74\u8f7b\u4ee3GC\u5b8c\u6210\u540e<\/h4>\n<p>\u5b58\u6d3b\u5bf9\u8c61\u88ab\u8f6c\u79fb\u5230\u5b58\u6d3b\u533a(survivor regions) \u6216 \u8001\u5e74\u4ee3(old generation regions).<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_5_End_of_Young_GC_with_G1_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_5_End_of_Young_GC_with_G1_CN.png\" alt=\"\" \/><\/a><\/p>\n<p>\u521a\u521a\u88ab\u63d0\u5347\u4e0a\u6765\u7684\u5bf9\u8c61\u7528\u6df1\u7eff\u8272\u663e\u793a. Survivor \u533a\u7528\u7eff\u8272\u8868\u793a.<\/p>\n<p>\u603b\u7ed3\u8d77\u6765,G1\u7684\u5e74\u8f7b\u4ee3\u6536\u96c6\u5f52\u7eb3\u5982\u4e0b:<\/p>\n<ul class=\"task-list\">\n<li>\u5806\u4e00\u6574\u5757\u5185\u5b58\u7a7a\u95f4,\u88ab\u5206\u4e3a\u591a\u4e2aheap\u533a(regions).<\/li>\n<li>\u5e74\u8f7b\u4ee3\u5185\u5b58\u7531\u4e00\u7ec4\u4e0d\u8fde\u7eed\u7684heap\u533a\u7ec4\u6210. \u8fd9\u4f7f\u5f97\u5728\u9700\u8981\u65f6\u5f88\u5bb9\u6613\u8fdb\u884c\u5bb9\u91cf\u8c03\u6574.<\/li>\n<li>\u5e74\u8f7b\u4ee3\u7684\u5783\u573e\u6536\u96c6,\u6216\u8005\u53eb young GCs, \u4f1a\u6709 stop the world \u4e8b\u4ef6. \u5728\u64cd\u4f5c\u65f6\u6240\u6709\u7684\u5e94\u7528\u7a0b\u5e8f\u7ebf\u7a0b\u90fd\u4f1a\u88ab\u6682\u505c(stopped).<\/li>\n<li>\u5e74\u8f7b\u4ee3 GC \u901a\u8fc7\u591a\u7ebf\u7a0b\u5e76\u884c\u8fdb\u884c.<\/li>\n<li>\u5b58\u6d3b\u7684\u5bf9\u8c61\u88ab\u62f7\u8d1d\u5230\u65b0\u7684 survivor \u533a\u6216\u8005\u8001\u5e74\u4ee3.<\/li>\n<\/ul>\n<h3><a target=\"_blank\" name=\"t43\"><\/a><a id=\"user-content-old-generation-collection-with-g1\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#old-generation-collection-with-g1\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Old Generation Collection with G1<\/h3>\n<p>\u548c CMS \u6536\u96c6\u5668\u76f8\u4f3c, G1 \u6536\u96c6\u5668\u4e5f\u88ab\u8bbe\u8ba1\u4e3a\u7528\u6765\u5bf9\u8001\u5e74\u4ee3\u7684\u5bf9\u8c61\u8fdb\u884c\u4f4e\u5ef6\u8fdf(low pause)\u7684\u5783\u573e\u6536\u96c6. \u4e0b\u8868\u63cf\u8ff0\u4e86G1\u6536\u96c6\u5668\u5728\u8001\u5e74\u4ee3\u8fdb\u884c\u5783\u573e\u56de\u6536\u7684\u5404\u4e2a\u9636\u6bb5.<\/p>\n<h4><a target=\"_blank\" name=\"t44\"><\/a><a id=\"user-content-g1-\u6536\u96c6\u9636\u6bb5---\u5e76\u53d1\u6807\u8bb0\u5468\u671f\u9636\u6bb5concurrent-marking-cycle-phases\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1-%E6%94%B6%E9%9B%86%E9%98%B6%E6%AE%B5---%E5%B9%B6%E5%8F%91%E6%A0%87%E8%AE%B0%E5%91%A8%E6%9C%9F%E9%98%B6%E6%AE%B5concurrent-marking-cycle-phases\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1 \u6536\u96c6\u9636\u6bb5 - \u5e76\u53d1\u6807\u8bb0\u5468\u671f\u9636\u6bb5(Concurrent Marking Cycle Phases)<\/h4>\n<p>G1 \u6536\u96c6\u5668\u5728\u8001\u5e74\u4ee3\u5806\u5185\u5b58\u4e2d\u6267\u884c\u4e0b\u9762\u7684\u8fd9\u4e9b\u9636\u6bb5. \u6ce8\u610f\u6709\u4e9b\u9636\u6bb5\u4e5f\u662f\u5e74\u8f7b\u4ee3\u5783\u573e\u6536\u96c6\u7684\u4e00\u90e8\u5206.<\/p>\n<table>\n<tbody>\n<tr>\n<th>\u9636\u6bb5<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<tr>\n<td>(1) \u521d\u59cb\u6807\u8bb0(Initial Mark)<\/td>\n<td>(Stop the World Event,\u6240\u6709\u5e94\u7528\u7ebf\u7a0b\u6682\u505c) \u6b64\u65f6\u4f1a\u6709\u4e00\u6b21 stop the world(STW)\u6682\u505c\u4e8b\u4ef6. \u5728G1\u4e2d, \u8fd9\u9644\u52a0\u5728(piggybacked on)\u4e00\u6b21\u6b63\u5e38\u7684\u5e74\u8f7b\u4ee3GC. \u6807\u8bb0\u53ef\u80fd\u6709\u5f15\u7528\u6307\u5411\u8001\u5e74\u4ee3\u5bf9\u8c61\u7684survivor\u533a(\u6839regions).<\/td>\n<\/tr>\n<tr>\n<td>(2) \u626b\u63cf\u6839\u533a\u57df(Root Region Scanning)<\/td>\n<td>\u626b\u63cf survivor \u533a\u4e2d\u5f15\u7528\u5230\u8001\u5e74\u4ee3\u7684\u5f15\u7528. \u8fd9\u4e2a\u9636\u6bb5\u5e94\u7528\u7a0b\u5e8f\u7684\u7ebf\u7a0b\u4f1a\u7ee7\u7eed\u8fd0\u884c. \u5728\u5e74\u8f7b\u4ee3GC\u53ef\u80fd\u53d1\u751f\u4e4b\u524d\u6b64\u9636\u6bb5\u5fc5\u987b\u5b8c\u6210.<\/td>\n<\/tr>\n<tr>\n<td>(3) \u5e76\u53d1\u6807\u8bb0(Concurrent Marking)<\/td>\n<td>\u5728\u6574\u4e2a\u5806\u4e2d\u67e5\u627e\u6d3b\u7740\u7684\u5bf9\u8c61. \u6b64\u9636\u6bb5\u5e94\u7528\u7a0b\u5e8f\u7684\u7ebf\u7a0b\u6b63\u5728\u8fd0\u884c. \u6b64\u9636\u6bb5\u53ef\u4ee5\u88ab\u5e74\u8f7b\u4ee3GC\u6253\u65ad(interrupted).<\/td>\n<\/tr>\n<tr>\n<td>(4) \u518d\u6b21\u6807\u8bb0(Remark)<\/td>\n<td>(Stop the World Event,\u6240\u6709\u5e94\u7528\u7ebf\u7a0b\u6682\u505c) \u5b8c\u6210\u5806\u5185\u5b58\u4e2d\u5b58\u6d3b\u5bf9\u8c61\u7684\u6807\u8bb0. \u4f7f\u7528\u4e00\u4e2a\u53eb\u505a snapshot-at-the-beginning(SATB, \u8d77\u59cb\u5feb\u7167)\u7684\u7b97\u6cd5, \u8be5\u7b97\u6cd5\u6bd4CMS\u6240\u4f7f\u7528\u7684\u7b97\u6cd5\u8981\u5feb\u901f\u7684\u591a.<\/td>\n<\/tr>\n<tr>\n<td>(5) \u6e05\u7406(Cleanup)<\/td>\n<td>(Stop the World Event,\u6240\u6709\u5e94\u7528\u7ebf\u7a0b\u6682\u505c,\u5e76\u53d1\u6267\u884c)<br \/>\n\u5728\u5b58\u6d3b\u5bf9\u8c61\u548c\u5b8c\u5168\u7a7a\u95f2\u7684\u533a\u57df\u4e0a\u6267\u884c\u7edf\u8ba1(accounting). (Stop the world)<br \/>\n\u64e6\u5199 Remembered Sets. (Stop the world)<br \/>\n\u91cd\u7f6e\u7a7aheap\u533a\u5e76\u5c06\u4ed6\u4eec\u8fd4\u8fd8\u7ed9\u7a7a\u95f2\u5217\u8868(free list). (Concurrent, \u5e76\u53d1)<\/td>\n<\/tr>\n<tr>\n<td>(*) \u62f7\u8d1d(Copying)<\/td>\n<td>(Stop the World Event,\u6240\u6709\u5e94\u7528\u7ebf\u7a0b\u6682\u505c) \u4ea7\u751fSTW\u4e8b\u4ef6\u6765\u8f6c\u79fb\u6216\u62f7\u8d1d\u5b58\u6d3b\u7684\u5bf9\u8c61\u5230\u65b0\u7684\u672a\u4f7f\u7528\u7684heap\u533a(new unused regions). \u53ea\u5728\u5e74\u8f7b\u4ee3\u53d1\u751f\u65f6\u65e5\u5fd7\u4f1a\u8bb0\u5f55\u4e3a `[GC pause (young)]`. \u5982\u679c\u5728\u5e74\u8f7b\u4ee3\u548c\u8001\u5e74\u4ee3\u4e00\u8d77\u6267\u884c\u5219\u4f1a\u88ab\u65e5\u5fd7\u8bb0\u5f55\u4e3a `[GC Pause (mixed)]`.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4><a target=\"_blank\" name=\"t45\"><\/a><a id=\"user-content-g1\u8001\u5e74\u4ee3\u6536\u96c6\u6b65\u9aa4\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1%E8%80%81%E5%B9%B4%E4%BB%A3%E6%94%B6%E9%9B%86%E6%AD%A5%E9%AA%A4\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1\u8001\u5e74\u4ee3\u6536\u96c6\u6b65\u9aa4<\/h4>\n<p>\u987a\u7740\u5b9a\u4e49\u7684\u9636\u6bb5,\u8ba9\u6211\u4eec\u770b\u770bG1\u6536\u96c6\u5668\u5982\u4f55\u5904\u7406\u8001\u5e74\u4ee3(old generation).<\/p>\n<h5><a target=\"_blank\" name=\"t46\"><\/a><a id=\"user-content-6-\u521d\u59cb\u6807\u8bb0\u9636\u6bb5initial-marking-phase\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#6-%E5%88%9D%E5%A7%8B%E6%A0%87%E8%AE%B0%E9%98%B6%E6%AE%B5initial-marking-phase\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>6. \u521d\u59cb\u6807\u8bb0\u9636\u6bb5(Initial Marking Phase)<\/h5>\n<p>\u5b58\u6d3b\u5bf9\u8c61\u7684\u521d\u59cb\u6807\u8bb0\u88ab\u56fa\u5b9a\u5728\u5e74\u8f7b\u4ee3\u5783\u573e\u6536\u96c6\u91cc\u9762. \u5728\u65e5\u5fd7\u4e2d\u88ab\u8bb0\u4e3a\u00a0<code>GC pause (young)(inital-mark)<\/code>\u3002<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_6_Initial_Marking_Phase_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_6_Initial_Marking_Phase_CN.png\" alt=\"\" \/><\/a><\/p>\n<h5><a target=\"_blank\" name=\"t47\"><\/a><a id=\"user-content-7-\u5e76\u53d1\u6807\u8bb0\u9636\u6bb5concurrent-marking-phase\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#7-%E5%B9%B6%E5%8F%91%E6%A0%87%E8%AE%B0%E9%98%B6%E6%AE%B5concurrent-marking-phase\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>7. \u5e76\u53d1\u6807\u8bb0\u9636\u6bb5(Concurrent Marking Phase)<\/h5>\n<p>\u5982\u679c\u627e\u5230\u7a7a\u7684\u533a\u57df(\u5982\u7528\u7ea2\u53c9\u201cX\u201d\u6807\u793a\u7684\u533a\u57df), \u5219\u4f1a\u5728 Remark \u9636\u6bb5\u7acb\u5373\u79fb\u9664. \u5f53\u7136,\"\u6e05\u5355(accounting)\"\u4fe1\u606f\u51b3\u5b9a\u4e86\u6d3b\u8dc3\u5ea6(liveness)\u7684\u8ba1\u7b97.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_7_Concurrent_Marking_Phase_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_7_Concurrent_Marking_Phase_CN.png\" alt=\"\" \/><\/a><\/p>\n<h5><a target=\"_blank\" name=\"t48\"><\/a><a id=\"user-content-8-\u518d\u6b21\u6807\u8bb0\u9636\u6bb5remark-phase\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#8-%E5%86%8D%E6%AC%A1%E6%A0%87%E8%AE%B0%E9%98%B6%E6%AE%B5remark-phase\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>8. \u518d\u6b21\u6807\u8bb0\u9636\u6bb5(Remark Phase)<\/h5>\n<p>\u7a7a\u7684\u533a\u57df\u88ab\u79fb\u9664\u5e76\u56de\u6536\u3002\u73b0\u5728\u8ba1\u7b97\u6240\u6709\u533a\u57df\u7684\u6d3b\u8dc3\u5ea6(Region liveness).<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_8_Remark_Phase_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_8_Remark_Phase_CN.png\" alt=\"\" \/><\/a><\/p>\n<h5><a target=\"_blank\" name=\"t49\"><\/a><a id=\"user-content-9-\u62f7\u8d1d\u6e05\u7406\u9636\u6bb5copyingcleanup\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#9-%E6%8B%B7%E8%B4%9D%E6%B8%85%E7%90%86%E9%98%B6%E6%AE%B5copyingcleanup\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>9. \u62f7\u8d1d\/\u6e05\u7406\u9636\u6bb5(Copying\/Cleanup)<\/h5>\n<p>G1\u9009\u62e9\u201c\u6d3b\u8dc3\u5ea6(liveness)\u201d\u6700\u4f4e\u7684\u533a\u57df, \u8fd9\u4e9b\u533a\u57df\u53ef\u4ee5\u6700\u5feb\u7684\u5b8c\u6210\u56de\u6536. \u7136\u540e\u8fd9\u4e9b\u533a\u57df\u548c\u5e74\u8f7b\u4ee3GC\u5728\u540c\u65f6\u88ab\u5783\u573e\u6536\u96c6 . \u5728\u65e5\u5fd7\u88ab\u6807\u8bc6\u4e3a\u00a0<code>[GC pause (mixed)]<\/code>. \u6240\u4ee5\u5e74\u8f7b\u4ee3\u548c\u8001\u5e74\u4ee3\u90fd\u5728\u540c\u4e00\u65f6\u95f4\u88ab\u5783\u573e\u6536\u96c6.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_9_Copying_Cleanup_Phase_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_9_Copying_Cleanup_Phase_CN.png\" alt=\"\" \/><\/a><\/p>\n<h5><a target=\"_blank\" name=\"t50\"><\/a><a id=\"user-content-10\u62f7\u8d1d\u6e05\u7406\u4e4b\u540eafter-copyingcleanup\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#10%E6%8B%B7%E8%B4%9D%E6%B8%85%E7%90%86%E4%B9%8B%E5%90%8Eafter-copyingcleanup\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>10.\u62f7\u8d1d\/\u6e05\u7406\u4e4b\u540e(After Copying\/Cleanup)<\/h5>\n<p>\u6240\u9009\u62e9\u7684\u533a\u57df\u88ab\u6536\u96c6\u548c\u538b\u7f29\u5230\u4e0b\u56fe\u6240\u793a\u7684\u6df1\u84dd\u8272\u533a\u57df\u548c\u6df1\u7eff\u8272\u533a\u57df.<\/p>\n<p><a href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/04_10_After_Copying_Cleanup_Phase_CN.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/github.com\/cncounter\/translation\/raw\/master\/tiemao_2014\/G1\/04_10_After_Copying_Cleanup_Phase_CN.png\" alt=\"\" \/><\/a><\/p>\n<h4><a target=\"_blank\" name=\"t51\"><\/a><a id=\"user-content-\u8001\u5e74\u4ee3gcold-generation-gc\u603b\u7ed3\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E8%80%81%E5%B9%B4%E4%BB%A3gcold-generation-gc%E6%80%BB%E7%BB%93\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u8001\u5e74\u4ee3GC(Old Generation GC)\u603b\u7ed3<\/h4>\n<p>\u603b\u7ed3\u4e0b\u6765,G1\u5bf9\u8001\u5e74\u4ee3\u7684GC\u6709\u5982\u4e0b\u51e0\u4e2a\u5173\u952e\u70b9:<\/p>\n<ul class=\"task-list\">\n<li>\u5e76\u53d1\u6807\u8bb0\u6e05\u7406\u9636\u6bb5(Concurrent Marking Phase)\n<ul class=\"task-list\">\n<li>\u6d3b\u8dc3\u5ea6\u4fe1\u606f\u5728\u7a0b\u5e8f\u8fd0\u884c\u7684\u65f6\u5019\u88ab\u5e76\u884c\u8ba1\u7b97\u51fa\u6765<\/li>\n<li>\u6d3b\u8dc3\u5ea6(liveness)\u4fe1\u606f\u6807\u8bc6\u51fa\u54ea\u4e9b\u533a\u57df\u5728\u8f6c\u79fb\u6682\u505c\u671f\u95f4\u6700\u9002\u5408\u56de\u6536.<\/li>\n<li>\u4e0d\u50cfCMS\u4e00\u6837\u6709\u6e05\u7406\u9636\u6bb5(sweeping phase).<\/li>\n<\/ul>\n<\/li>\n<li>\u518d\u6b21\u6807\u8bb0\u9636\u6bb5(Remark Phase)\n<ul class=\"task-list\">\n<li>\u4f7f\u7528\u7684 Snapshot-at-the-Beginning (SATB, \u5f00\u59cb\u5feb\u7167) \u7b97\u6cd5\u6bd4\u8d77 CMS\u6240\u7528\u7684\u7b97\u6cd5\u8981\u5feb\u5f97\u591a.<\/li>\n<li>\u5b8c\u5168\u7a7a\u7684\u533a\u57df\u76f4\u63a5\u88ab\u56de\u6536.<\/li>\n<\/ul>\n<\/li>\n<li>\u62f7\u8d1d\/\u6e05\u7406\u9636\u6bb5(Copying\/Cleanup Phase)\n<ul class=\"task-list\">\n<li>\u5e74\u8f7b\u4ee3\u4e0e\u8001\u5e74\u4ee3\u540c\u65f6\u8fdb\u884c\u56de\u6536.<\/li>\n<li>\u8001\u5e74\u4ee3\u7684\u9009\u62e9\u57fa\u4e8e\u5176\u6d3b\u8dc3\u5ea6(liveness).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2><a target=\"_blank\" name=\"t52\"><\/a><a id=\"user-content-\u547d\u4ee4\u884c\u53c2\u6570\u4e0e\u6700\u4f73\u5b9e\u8df5\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E4%B8%8E%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u547d\u4ee4\u884c\u53c2\u6570\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h2>\n<h3><a target=\"_blank\" name=\"t53\"><\/a><a id=\"user-content-\u547d\u4ee4\u884c\u53c2\u6570\u4e0e\u6700\u4f73\u5b9e\u8df5-1\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E4%B8%8E%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5-1\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u547d\u4ee4\u884c\u53c2\u6570\u4e0e\u6700\u4f73\u5b9e\u8df5<\/h3>\n<p>\u5728\u672c\u8282\u4e2d,\u8ba9\u6211\u4eec\u770b\u770bG1\u7684\u5404\u79cd\u547d\u4ee4\u884c\u9009\u9879.<\/p>\n<h4><a target=\"_blank\" name=\"t54\"><\/a><a id=\"user-content-\u547d\u4ee4\u884c\u57fa\u672c\u53c2\u6570\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%9F%BA%E6%9C%AC%E5%8F%82%E6%95%B0\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u547d\u4ee4\u884c\u57fa\u672c\u53c2\u6570<\/h4>\n<p>\u8981\u542f\u7528 G1 \u6536\u96c6\u5668\u8bf7\u4f7f\u7528:\u00a0<code>-XX:+UseG1GC<\/code><\/p>\n<p>\u4e0b\u9762\u662f\u542f\u52a8 Java2Demo\u793a\u4f8b\u7a0b\u5e8f\u7684\u547d\u4ee4\u884c\u793a\u4f8b. Java2Demo\u4f4d\u4e8e\u4e0b\u8f7d JDK demos and samples \u540e\u89e3\u538b\u7684\u6587\u4ef6\u5939\u4e2d:<\/p>\n<p>java -Xmx50m -Xms50m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar c:\\javademos\\demo\\jfc\\Java2D\\Java2demo.jar<\/p>\n<h4><a target=\"_blank\" name=\"t55\"><\/a><a id=\"user-content-\u5173\u952e\u547d\u4ee4\u884c\u5f00\u5173\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%85%B3%E9%94%AE%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%BC%80%E5%85%B3\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u5173\u952e\u547d\u4ee4\u884c\u5f00\u5173<\/h4>\n<p>-XX:+UseG1GC\u00a0- \u8ba9 JVM \u4f7f\u7528 G1 \u5783\u573e\u6536\u96c6\u5668.<\/p>\n<p>-XX:MaxGCPauseMillis=200\u00a0- \u8bbe\u7f6e\u6700\u5927GC\u505c\u987f\u65f6\u95f4(GC pause time)\u6307\u6807(target). \u8fd9\u662f\u4e00\u4e2a\u8f6f\u6027\u6307\u6807(soft goal), JVM \u4f1a\u5c3d\u529b\u53bb\u8fbe\u6210\u8fd9\u4e2a\u76ee\u6807. \u6240\u4ee5\u6709\u65f6\u5019\u8fd9\u4e2a\u76ee\u6807\u5e76\u4e0d\u80fd\u8fbe\u6210. \u9ed8\u8ba4\u503c\u4e3a 200 \u6beb\u79d2.<\/p>\n<p>-XX:InitiatingHeapOccupancyPercent=45\u00a0- \u542f\u52a8\u5e76\u53d1GC\u65f6\u7684\u5806\u5185\u5b58\u5360\u7528\u767e\u5206\u6bd4. G1\u7528\u5b83\u6765\u89e6\u53d1\u5e76\u53d1GC\u5468\u671f,\u57fa\u4e8e\u6574\u4e2a\u5806\u7684\u4f7f\u7528\u7387,\u800c\u4e0d\u53ea\u662f\u67d0\u4e00\u4ee3\u5185\u5b58\u7684\u4f7f\u7528\u6bd4\u4f8b\u3002\u503c\u4e3a 0 \u5219\u8868\u793a\u201c\u4e00\u76f4\u6267\u884cGC\u5faa\u73af)'. \u9ed8\u8ba4\u503c\u4e3a 45 (\u4f8b\u5982, \u5168\u90e8\u7684 45% \u6216\u8005\u4f7f\u7528\u4e8645%).<\/p>\n<h4><a target=\"_blank\" name=\"t56\"><\/a><a id=\"user-content-\u6700\u4f73\u5b9e\u8df5\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u6700\u4f73\u5b9e\u8df5<\/h4>\n<p>\u5728\u4f7f\u7528 G1 \u4f5c\u4e3a\u5783\u573e\u6536\u96c6\u5668\u65f6,\u4f60\u5e94\u8be5\u9075\u5faa\u4e0b\u9762\u8fd9\u4e9b\u6700\u4f73\u5b9e\u8df5\u7684\u6307\u5bfc.<\/p>\n<h5><a target=\"_blank\" name=\"t57\"><\/a><a id=\"user-content-\u4e0d\u8981\u8bbe\u7f6e\u5e74\u8f7b\u4ee3\u7684\u5927\u5c0fyoung-generation-size\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E4%B8%8D%E8%A6%81%E8%AE%BE%E7%BD%AE%E5%B9%B4%E8%BD%BB%E4%BB%A3%E7%9A%84%E5%A4%A7%E5%B0%8Fyoung-generation-size\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u4e0d\u8981\u8bbe\u7f6e\u5e74\u8f7b\u4ee3\u7684\u5927\u5c0f(Young Generation Size)<\/h5>\n<p>\u5047\u82e5\u901a\u8fc7 -Xmn \u663e\u5f0f\u5730\u6307\u5b9a\u4e86\u5e74\u8f7b\u4ee3\u7684\u5927\u5c0f, \u5219\u4f1a\u5e72\u6270\u5230 G1\u6536\u96c6\u5668\u7684\u9ed8\u8ba4\u884c\u4e3a.<\/p>\n<ul class=\"task-list\">\n<li>G1\u5728\u5783\u573e\u6536\u96c6\u65f6\u5c06\u4e0d\u518d\u5173\u5fc3\u6682\u505c\u65f6\u95f4\u6307\u6807. \u6240\u4ee5\u4ece\u672c\u8d28\u4e0a\u8bf4,\u8bbe\u7f6e\u5e74\u8f7b\u4ee3\u7684\u5927\u5c0f\u5c06\u7981\u7528\u6682\u505c\u65f6\u95f4\u76ee\u6807.<\/li>\n<li>G1\u5728\u5fc5\u8981\u65f6\u4e5f\u4e0d\u80fd\u591f\u589e\u52a0\u6216\u8005\u7f29\u5c0f\u5e74\u8f7b\u4ee3\u7684\u7a7a\u95f4. \u56e0\u4e3a\u5927\u5c0f\u662f\u56fa\u5b9a\u7684,\u6240\u4ee5\u5bf9\u66f4\u6539\u5927\u5c0f\u65e0\u80fd\u4e3a\u529b.<\/li>\n<\/ul>\n<h5><a target=\"_blank\" name=\"t58\"><\/a><a id=\"user-content-\u54cd\u5e94\u65f6\u95f4\u6307\u6807response-time-metrics\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%93%8D%E5%BA%94%E6%97%B6%E9%97%B4%E6%8C%87%E6%A0%87response-time-metrics\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u54cd\u5e94\u65f6\u95f4\u6307\u6807(Response Time Metrics)<\/h5>\n<p>\u8bbe\u7f6e\u00a0<code>XX:MaxGCPauseMillis=&lt;N&gt;<\/code>\u00a0\u65f6\u4e0d\u5e94\u8be5\u4f7f\u7528\u5e73\u5747\u54cd\u5e94\u65f6\u95f4(ART, average response time) \u4f5c\u4e3a\u6307\u6807,\u800c\u5e94\u8be5\u8003\u8651\u4f7f\u7528\u76ee\u6807\u65f6\u95f4\u768490%\u6216\u8005\u66f4\u5927\u4f5c\u4e3a\u54cd\u5e94\u65f6\u95f4\u6307\u6807. \u4e5f\u5c31\u662f\u8bf490%\u7684\u7528\u6237(\u5ba2\u6237\u7aef\/?)\u8bf7\u6c42\u54cd\u5e94\u65f6\u95f4\u4e0d\u4f1a\u8d85\u8fc7\u9884\u8bbe\u7684\u76ee\u6807\u503c. \u8bb0\u4f4f,\u6682\u505c\u65f6\u95f4\u53ea\u662f\u4e00\u4e2a\u76ee\u6807,\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u603b\u662f\u5f97\u5230\u6ee1\u8db3.<\/p>\n<h5><a target=\"_blank\" name=\"t59\"><\/a><a id=\"user-content-\u4ec0\u4e48\u662f\u8f6c\u79fb\u5931\u8d25evacuation-failure\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E4%BB%80%E4%B9%88%E6%98%AF%E8%BD%AC%E7%A7%BB%E5%A4%B1%E8%B4%A5evacuation-failure\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u4ec0\u4e48\u662f\u8f6c\u79fb\u5931\u8d25(Evacuation Failure)?<\/h5>\n<p>\u5bf9 survivors \u6216 promoted objects \u8fdb\u884cGC\u65f6\u5982\u679cJVM\u7684heap\u533a\u4e0d\u8db3\u5c31\u4f1a\u53d1\u751f\u63d0\u5347\u5931\u8d25(promotion failure). \u5806\u5185\u5b58\u4e0d\u80fd\u7ee7\u7eed\u6269\u5145,\u56e0\u4e3a\u5df2\u7ecf\u8fbe\u5230\u6700\u5927\u503c\u4e86. \u5f53\u4f7f\u7528\u00a0<code>-XX:+PrintGCDetails<\/code>\u00a0\u65f6\u5c06\u4f1a\u5728GC\u65e5\u5fd7\u4e2d\u663e\u793a\u00a0to-space overflow\u00a0(to-\u7a7a\u95f4\u6ea2\u51fa)\u3002<\/p>\n<p>\u8fd9\u662f\u5f88\u6602\u8d35\u7684\u64cd\u4f5c!<\/p>\n<ul class=\"task-list\">\n<li>GC\u4ecd\u7ee7\u7eed\u6240\u4ee5\u7a7a\u95f4\u5fc5\u987b\u88ab\u91ca\u653e.<\/li>\n<li>\u62f7\u8d1d\u5931\u8d25\u7684\u5bf9\u8c61\u5fc5\u987b\u88ab\u653e\u5230\u6b63\u786e\u7684\u4f4d\u7f6e(tenured in place).<\/li>\n<li>CSet\u6307\u5411\u533a\u57df\u4e2d\u7684\u4efb\u4f55 RSets \u66f4\u65b0\u90fd\u5fc5\u987b\u91cd\u65b0\u751f\u6210(regenerated).<\/li>\n<li>\u6240\u6709\u8fd9\u4e9b\u6b65\u9aa4\u90fd\u662f\u4ee3\u4ef7\u9ad8\u6602\u7684.<\/li>\n<\/ul>\n<h5><a target=\"_blank\" name=\"t60\"><\/a><a id=\"user-content-\u5982\u4f55\u907f\u514d\u8f6c\u79fb\u5931\u8d25evacuation-failure\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E8%BD%AC%E7%A7%BB%E5%A4%B1%E8%B4%A5evacuation-failure\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u5982\u4f55\u907f\u514d\u8f6c\u79fb\u5931\u8d25(Evacuation Failure)<\/h5>\n<p>\u8981\u907f\u514d\u907f\u514d\u8f6c\u79fb\u5931\u8d25, \u8003\u8651\u91c7\u7eb3\u4e0b\u5217\u9009\u9879.<\/p>\n<ul class=\"task-list\">\n<li>\u589e\u52a0\u5806\u5185\u5b58\u5927\u5c0f\n<ul class=\"task-list\">\n<li>\u589e\u52a0\u00a0-XX:G1ReservePercent=n, \u5176\u9ed8\u8ba4\u503c\u662f 10.<\/li>\n<li>G1\u521b\u5efa\u4e86\u4e00\u4e2a\u5047\u5929\u82b1\u677f(false ceiling),\u5728\u9700\u8981\u66f4\u5927 'to-space' \u7684\u60c5\u51b5\u4e0b\u4f1a\u5c1d\u8bd5\u4ece\u4fdd\u7559\u5185\u5b58\u83b7\u53d6(leave the reserve memory free).<\/li>\n<\/ul>\n<\/li>\n<li>\u66f4\u65e9\u542f\u52a8\u6807\u8bb0\u5468\u671f(marking cycle)<\/li>\n<li>\u901a\u8fc7\u91c7\u7528\u00a0-XX:ConcGCThreads=n\u00a0\u9009\u9879\u589e\u52a0\u6807\u8bb0\u7ebf\u7a0b(marking threads)\u7684\u6570\u91cf.<\/li>\n<\/ul>\n<h5><a target=\"_blank\" name=\"t61\"><\/a><a id=\"user-content-g1-\u7684-gc-\u53c2\u6570\u5b8c\u5168\u5217\u8868\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1-%E7%9A%84-gc-%E5%8F%82%E6%95%B0%E5%AE%8C%E5%85%A8%E5%88%97%E8%A1%A8\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1 \u7684 GC \u53c2\u6570\u5b8c\u5168\u5217\u8868<\/h5>\n<p>\u4e0b\u9762\u662f\u5b8c\u6574\u7684 G1 \u7684 GC \u5f00\u5173\u53c2\u6570\u5217\u8868. \u5728\u4f7f\u7528\u65f6\u8bf7\u8bb0\u4f4f\u4e0a\u9762\u6240\u8ff0\u7684\u6700\u4f73\u5b9e\u8df5.<\/p>\n<table>\n<tbody>\n<tr>\n<th>\u9009\u9879\/\u9ed8\u8ba4\u503c<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<tr>\n<td>-XX:+UseG1GC<\/td>\n<td>\u4f7f\u7528 G1 (Garbage First) \u5783\u573e\u6536\u96c6\u5668<\/td>\n<\/tr>\n<tr>\n<td>-XX:MaxGCPauseMillis=n<\/td>\n<td>\u8bbe\u7f6e\u6700\u5927GC\u505c\u987f\u65f6\u95f4(GC pause time)\u6307\u6807(target). \u8fd9\u662f\u4e00\u4e2a\u8f6f\u6027\u6307\u6807(soft goal), JVM \u4f1a\u5c3d\u91cf\u53bb\u8fbe\u6210\u8fd9\u4e2a\u76ee\u6807.<\/td>\n<\/tr>\n<tr>\n<td>-XX:InitiatingHeapOccupancyPercent=n<\/td>\n<td>\u542f\u52a8\u5e76\u53d1GC\u5468\u671f\u65f6\u7684\u5806\u5185\u5b58\u5360\u7528\u767e\u5206\u6bd4. G1\u4e4b\u7c7b\u7684\u5783\u573e\u6536\u96c6\u5668\u7528\u5b83\u6765\u89e6\u53d1\u5e76\u53d1GC\u5468\u671f,\u57fa\u4e8e\u6574\u4e2a\u5806\u7684\u4f7f\u7528\u7387,\u800c\u4e0d\u53ea\u662f\u67d0\u4e00\u4ee3\u5185\u5b58\u7684\u4f7f\u7528\u6bd4. \u503c\u4e3a 0 \u5219\u8868\u793a\"\u4e00\u76f4\u6267\u884cGC\u5faa\u73af\". \u9ed8\u8ba4\u503c\u4e3a 45.<\/td>\n<\/tr>\n<tr>\n<td>-XX:NewRatio=n<\/td>\n<td>\u65b0\u751f\u4ee3\u4e0e\u8001\u751f\u4ee3(new\/old generation)\u7684\u5927\u5c0f\u6bd4\u4f8b(Ratio). \u9ed8\u8ba4\u503c\u4e3a 2.<\/td>\n<\/tr>\n<tr>\n<td>-XX:SurvivorRatio=n<\/td>\n<td>eden\/survivor \u7a7a\u95f4\u5927\u5c0f\u7684\u6bd4\u4f8b(Ratio). \u9ed8\u8ba4\u503c\u4e3a 8.<\/td>\n<\/tr>\n<tr>\n<td>-XX:MaxTenuringThreshold=n<\/td>\n<td>\u63d0\u5347\u5e74\u8001\u4ee3\u7684\u6700\u5927\u4e34\u754c\u503c(tenuring threshold). \u9ed8\u8ba4\u503c\u4e3a 15.<\/td>\n<\/tr>\n<tr>\n<td>-XX:ParallelGCThreads=n<\/td>\n<td>\u8bbe\u7f6e\u5783\u573e\u6536\u96c6\u5668\u5728\u5e76\u884c\u9636\u6bb5\u4f7f\u7528\u7684\u7ebf\u7a0b\u6570,\u9ed8\u8ba4\u503c\u968fJVM\u8fd0\u884c\u7684\u5e73\u53f0\u4e0d\u540c\u800c\u4e0d\u540c.<\/td>\n<\/tr>\n<tr>\n<td>-XX:ConcGCThreads=n<\/td>\n<td>\u5e76\u53d1\u5783\u573e\u6536\u96c6\u5668\u4f7f\u7528\u7684\u7ebf\u7a0b\u6570\u91cf. \u9ed8\u8ba4\u503c\u968fJVM\u8fd0\u884c\u7684\u5e73\u53f0\u4e0d\u540c\u800c\u4e0d\u540c.<\/td>\n<\/tr>\n<tr>\n<td>-XX:G1ReservePercent=n<\/td>\n<td>\u8bbe\u7f6e\u5806\u5185\u5b58\u4fdd\u7559\u4e3a\u5047\u5929\u82b1\u677f\u7684\u603b\u91cf,\u4ee5\u964d\u4f4e\u63d0\u5347\u5931\u8d25\u7684\u53ef\u80fd\u6027. \u9ed8\u8ba4\u503c\u662f 10.<\/td>\n<\/tr>\n<tr>\n<td>-XX:G1HeapRegionSize=n<\/td>\n<td>\u4f7f\u7528G1\u65f6Java\u5806\u4f1a\u88ab\u5206\u4e3a\u5927\u5c0f\u7edf\u4e00\u7684\u7684\u533a(region)\u3002\u6b64\u53c2\u6570\u53ef\u4ee5\u6307\u5b9a\u6bcf\u4e2aheap\u533a\u7684\u5927\u5c0f. \u9ed8\u8ba4\u503c\u5c06\u6839\u636e heap size \u7b97\u51fa\u6700\u4f18\u89e3. \u6700\u5c0f\u503c\u4e3a 1Mb, \u6700\u5927\u503c\u4e3a 32Mb.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><a target=\"_blank\" name=\"t62\"><\/a><a id=\"user-content-\u8bb0\u5f55g1\u7684gc\u65e5\u5fd7\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E8%AE%B0%E5%BD%95g1%E7%9A%84gc%E6%97%A5%E5%BF%97\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u8bb0\u5f55G1\u7684GC\u65e5\u5fd7<\/h2>\n<h3><a target=\"_blank\" name=\"t63\"><\/a><a id=\"user-content-\u8bb0\u5f55g1\u7684gc\u65e5\u5fd7-1\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E8%AE%B0%E5%BD%95g1%E7%9A%84gc%E6%97%A5%E5%BF%97-1\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u8bb0\u5f55G1\u7684GC\u65e5\u5fd7<\/h3>\n<p>\u6211\u4eec\u8981\u4ecb\u7ecd\u7684\u6700\u540e\u4e00\u4e2a\u4e3b\u9898\u662f\u4f7f\u7528\u65e5\u5fd7\u4fe1\u606f\u6765\u5206\u4eabG1\u6536\u96c6\u5668\u7684\u6027\u80fd. \u672c\u8282\u7b80\u8981\u4ecb\u7ecd\u5783\u573e\u6536\u96c6\u7684\u76f8\u5173\u53c2\u6570,\u4ee5\u53ca\u65e5\u5fd7\u4e2d\u6253\u5370\u7684\u76f8\u5173\u4fe1\u606f.<\/p>\n<h4><a target=\"_blank\" name=\"t64\"><\/a><a id=\"user-content-\u8bbe\u7f6e\u65e5\u5fd7\u7ec6\u8282log-detail\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E8%AE%BE%E7%BD%AE%E6%97%A5%E5%BF%97%E7%BB%86%E8%8A%82log-detail\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u8bbe\u7f6e\u65e5\u5fd7\u7ec6\u8282(Log Detail)<\/h4>\n<p>\u53ef\u4ee5\u8bbe\u7f6e3\u79cd\u4e0d\u540c\u7684\u65e5\u5fd7\u7ea7\u522b.<\/p>\n<p>(1) -verbosegc\u00a0(\u7b49\u4ef7\u4e8e\u00a0-XX:+PrintGC) \u8bbe\u7f6e\u65e5\u5fd7\u7ea7\u522b\u4e3a\u00a0\u597d\u00a0fine.<\/p>\n<p>\u65e5\u5fd7\u8f93\u51fa\u793a\u4f8b<\/p>\n<pre><code>[GC pause (G1 Humongous Allocation) (young) (initial-mark) 24M- &gt;21M(64M), 0.2349730 secs]\n[GC pause (G1 Evacuation Pause) (mixed) 66M-&gt;21M(236M), 0.1625268 secs]    \n<\/code><\/pre>\n<p>(2) -XX:+PrintGCDetails\u00a0\u8bbe\u7f6e\u65e5\u5fd7\u7ea7\u522b\u4e3a\u00a0\u66f4\u597d\u00a0finer. \u4f7f\u7528\u6b64\u9009\u9879\u4f1a\u663e\u793a\u4ee5\u4e0b\u4fe1\u606f:<\/p>\n<ul class=\"task-list\">\n<li>\u6bcf\u4e2a\u9636\u6bb5\u7684 Average, Min, \u4ee5\u53ca Max \u65f6\u95f4.<\/li>\n<li>\u6839\u626b\u63cf(Root Scan), RSet \u66f4\u65b0(\u540c\u65f6\u5904\u7406\u7f13\u51b2\u533a\u4fe1\u606f), RSet\u626b\u63cf(Scan), \u5bf9\u8c61\u62f7\u8d1d(Object Copy), \u7ec8\u6b62(Termination, \u5305\u62ec\u5c1d\u8bd5\u6b21\u6570).<\/li>\n<li>\u8fd8\u663e\u793a \u201cother\u201d \u6267\u884c\u65f6\u95f4, \u6bd4\u5982\u9009\u62e9 CSet, \u5f15\u7528\u5904\u7406(reference processing), \u5f15\u7528\u6392\u961f(reference enqueuing) \u4ee5\u53ca\u91ca\u653e(freeing) CSet\u7b49.<\/li>\n<li>\u663e\u793a Eden, Survivors \u4ee5\u53ca\u603b\u7684 Heap \u5360\u7528\u4fe1\u606f(occupancies).<\/li>\n<\/ul>\n<p>\u65e5\u5fd7\u8f93\u51fa\u793a\u4f8b<\/p>\n<pre><code>[Ext Root Scanning (ms): Avg: 1.7 Min: 0.0 Max: 3.7 Diff: 3.7]\n[Eden: 818M(818M)-&gt;0B(714M) Survivors: 0B-&gt;104M Heap: 836M(4096M)-&gt;409M(4096M)]\n<\/code><\/pre>\n<p>(3) -XX:+UnlockExperimentalVMOptions -XX:G1LogLevel=finest\u00a0\u8bbe\u7f6e\u65e5\u5fd7\u7ea7\u522b\u4e3a\u00a0\u6700\u597d\u00a0finest. \u548c finer \u7ea7\u522b\u7c7b\u4f3c, \u5305\u542b\u6bcf\u4e2a worker \u7ebf\u7a0b\u4fe1\u606f.<\/p>\n<pre><code>[Ext Root Scanning (ms): 2.1 2.4 2.0 0.0\n           Avg: 1.6 Min: 0.0 Max: 2.4 Diff: 2.3]\n       [Update RS (ms):  0.4  0.2  0.4  0.0\n           Avg: 0.2 Min: 0.0 Max: 0.4 Diff: 0.4]\n           [Processed Buffers : 5 1 10 0\n           Sum: 16, Avg: 4, Min: 0, Max: 10, Diff: 10]\n<\/code><\/pre>\n<h4><a target=\"_blank\" name=\"t65\"><\/a><a id=\"user-content-determining-time\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#determining-time\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Determining Time<\/h4>\n<p>\u6709\u4e24\u4e2a\u53c2\u6570\u51b3\u5b9a\u4e86GC\u65e5\u5fd7\u4e2d\u6253\u5370\u7684\u65f6\u95f4\u663e\u793a\u5f62\u5f0f.<\/p>\n<p>(1) -XX:+PrintGCTimeStamps\u00a0- \u663e\u793a\u4eceJVM\u542f\u52a8\u65f6\u7b97\u8d77\u7684\u8fd0\u884c\u65f6\u95f4.<\/p>\n<p>\u65e5\u5fd7\u8f93\u51fa\u793a\u4f8b<\/p>\n<pre><code>1.729: [GC pause (young) 46M-&gt;35M(1332M), 0.0310029 secs]\n<\/code><\/pre>\n<p>(2) -XX:+PrintGCDateStamps\u00a0- \u5728\u6bcf\u6761\u8bb0\u5f55\u524d\u52a0\u4e0a\u65e5\u671f\u65f6\u95f4.<\/p>\n<p>\u65e5\u5fd7\u8f93\u51fa\u793a\u4f8b<\/p>\n<pre><code>2012-05-02T11:16:32.057+0200: [GC pause (young) 46M-&gt;35M(1332M), 0.0317225 secs]\n<\/code><\/pre>\n<h4><a target=\"_blank\" name=\"t66\"><\/a><a id=\"user-content-\u7406\u89e3-g1-\u65e5\u5fd7\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E7%90%86%E8%A7%A3-g1-%E6%97%A5%E5%BF%97\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u7406\u89e3 G1 \u65e5\u5fd7<\/h4>\n<p>\u4e3a\u4e86\u4f7f\u4f60\u66f4\u597d\u5730\u7406\u89e3GC\u65e5\u5fd7, \u672c\u8282\u901a\u8fc7\u5b9e\u9645\u7684\u65e5\u5fd7\u8f93\u51fa\uff0c\u5b9a\u4e49\u4e86\u8bb8\u591a\u4e13\u4e1a\u672f\u8bed. \u4e0b\u9762\u7684\u4f8b\u5b50\u663e\u793a\u4e86GC\u65e5\u5fd7\u7684\u5185\u5bb9,\u5e76\u52a0\u4e0a\u65e5\u5fd7\u4e2d\u51fa\u73b0\u7684\u672f\u8bed\u548c\u503c\u7684\u89e3\u91ca\u8bf4\u660e.<\/p>\n<p>Note:\u00a0\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u8003\u00a0<a href=\"https:\/\/blogs.oracle.com\/poonam\/entry\/understanding_g1_gc_logs\" target=\"_blank\" rel=\"noopener\">Poonam Bajaj\u7684\u535a\u5ba2\uff1a G1\u5783\u573e\u56de\u6536\u65e5\u5fd7<\/a>.<\/p>\n<h4><a target=\"_blank\" name=\"t67\"><\/a><a id=\"user-content-g1-\u65e5\u5fd7\u76f8\u5173\u672f\u8bed\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#g1-%E6%97%A5%E5%BF%97%E7%9B%B8%E5%85%B3%E6%9C%AF%E8%AF%AD\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>G1 \u65e5\u5fd7\u76f8\u5173\u672f\u8bed<\/h4>\n<ul class=\"task-list\">\n<li>Clear CT<\/li>\n<li>CSet<\/li>\n<li>External Root Scanning<\/li>\n<li>Free CSet<\/li>\n<li>GC Worker End<\/li>\n<li>GC Worker Other<\/li>\n<li>Object Copy<\/li>\n<li>Other<\/li>\n<li>Parallel Time<\/li>\n<li>Ref Eng<\/li>\n<li>Ref Proc<\/li>\n<li>Scanning Remembered Sets<\/li>\n<li>Termination Time<\/li>\n<li>Update Remembered Set<\/li>\n<li>Worker Start<\/li>\n<\/ul>\n<h5><a target=\"_blank\" name=\"t68\"><\/a><a id=\"user-content-parallel-time\u5e76\u884c\u9636\u6bb5\u8017\u65f6\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#parallel-time%E5%B9%B6%E8%A1%8C%E9%98%B6%E6%AE%B5%E8%80%97%E6%97%B6\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Parallel Time(\u5e76\u884c\u9636\u6bb5\u8017\u65f6)<\/h5>\n<pre><code>414.557: [GC pause (young), 0.03039600 secs] [Parallel Time: 22.9 ms]\n[GC Worker Start (ms): 7096.0 7096.0 7096.1 7096.1 706.1 7096.1 7096.1 7096.1 7096.2 7096.2 7096.2 7096.2\n       Avg: 7096.1, Min: 7096.0, Max: 7096.2, Diff: 0.2]\n<\/code><\/pre>\n<p><code>Parallel Time<\/code>\u00a0\u2013 \u4e3b\u8981\u5e76\u884c\u90e8\u5206\u8fd0\u884c\u505c\u987f\u7684\u6574\u4f53\u65f6\u95f4<\/p>\n<p><code>Worker Start<\/code>\u00a0\u2013 \u5404\u4e2a\u5de5\u4f5c\u7ebf\u7a0b(workers)\u542f\u52a8\u65f6\u7684\u65f6\u95f4\u6233(Timestamp)<\/p>\n<p>Note:\u00a0\u65e5\u5fd7\u662f\u6839\u636e thread id \u6392\u5e8f,\u5e76\u4e14\u6bcf\u6761\u8bb0\u5f55\u90fd\u662f\u4e00\u81f4\u7684.<\/p>\n<h5><a target=\"_blank\" name=\"t69\"><\/a><a id=\"user-content-external-root-scanning\u5916\u90e8\u6839\u626b\u63cf\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#external-root-scanning%E5%A4%96%E9%83%A8%E6%A0%B9%E6%89%AB%E6%8F%8F\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>External Root Scanning(\u5916\u90e8\u6839\u626b\u63cf)<\/h5>\n<pre><code>[Ext Root Scanning (ms): 3.1 3.4 3.4 3.0 4.2 2.0 3.6 3.2 3.4 7.7 3.7 4.4\n     Avg: 3.8, Min: 2.0, Max: 7.7, Diff: 5.7]\n<\/code><\/pre>\n<p><code>External root scanning<\/code>\u00a0- \u626b\u63cf\u5916\u90e8\u6839\u82b1\u8d39\u7684\u65f6\u95f4(\u5982\u6307\u5411\u5806\u5185\u5b58\u7684\u7cfb\u7edf\u8bcd\u5178(system dictionary)\u7b49\u90e8\u5206)<\/p>\n<h5><a target=\"_blank\" name=\"t70\"><\/a><a id=\"user-content-update-remembered-set\u66f4\u65b0-rset\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#update-remembered-set%E6%9B%B4%E6%96%B0-rset\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Update Remembered Set(\u66f4\u65b0 RSet)<\/h5>\n<pre><code>[Update RS (ms): 0.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Avg: 0.0, Min: 0.0, Max: 0.1, Diff: 0.1]\n   [Processed Buffers : 26 0 0 0 0 0 0 0 0 0 0 0\n    Sum: 26, Avg: 2, Min: 0, Max: 26, Diff: 26]\n<\/code><\/pre>\n<p><code>Update Remembered Set<\/code>\u00a0- \u5fc5\u987b\u66f4\u65b0\u5728pause\u4e4b\u524d\u5df2\u7ecf\u5b8c\u6210\u4f46\u5c1a\u672a\u5904\u7406\u7684\u7f13\u51b2. \u82b1\u8d39\u7684\u65f6\u95f4\u53d6\u51b3\u4e8ecards\u7684\u5bc6\u5ea6\u3002cards\u8d8a\u591a,\u8017\u8d39\u7684\u65f6\u95f4\u5c31\u8d8a\u957f\u3002<\/p>\n<h5><a target=\"_blank\" name=\"t71\"><\/a><a id=\"user-content-scanning-remembered-sets\u626b\u63cf-rsets\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#scanning-remembered-sets%E6%89%AB%E6%8F%8F-rsets\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Scanning Remembered Sets(\u626b\u63cf RSets)<\/h5>\n<pre><code>[Scan RS (ms): 0.4 0.2 0.1 0.3 0.0 0.0 0.1 0.2 0.0 0.1 0.0 0.0 Avg: 0.1, Min: 0.0, Max: 0.4, Diff: 0.3]F\n<\/code><\/pre>\n<p><code>Scanning Remembered Sets<\/code>\u00a0- \u67e5\u627e\u6307\u5411 Collection Set \u7684\u6307\u9488(pointers)<\/p>\n<h5><a target=\"_blank\" name=\"t72\"><\/a><a id=\"user-content-object-copy\u5bf9\u8c61\u62f7\u8d1d\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#object-copy%E5%AF%B9%E8%B1%A1%E6%8B%B7%E8%B4%9D\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Object Copy(\u5bf9\u8c61\u62f7\u8d1d)<\/h5>\n<pre><code>[Object Copy (ms): 16.7 16.7 16.7 16.9 16.0 18.1 16.5 16.8 16.7 12.3 16.4 15.7 Avg: 16.3, Min: 12.3, Max:  18.1, Diff: 5.8]\n<\/code><\/pre>\n<p><code>Object copy<\/code>\u00a0\u2013 \u6bcf\u4e2a\u72ec\u7acb\u7684\u7ebf\u7a0b\u5728\u62f7\u8d1d\u548c\u8f6c\u79fb\u5bf9\u8c61\u65f6\u6240\u6d88\u8017\u7684\u65f6\u95f4.<\/p>\n<h5><a target=\"_blank\" name=\"t73\"><\/a><a id=\"user-content-termination-time\u7ed3\u675f\u65f6\u95f4\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#termination-time%E7%BB%93%E6%9D%9F%E6%97%B6%E9%97%B4\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Termination Time(\u7ed3\u675f\u65f6\u95f4)<\/h5>\n<pre><code>[Termination (ms): 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n0.0 Avg: 0.0, Min: 0.0, Max: 0.0, Diff: 0.0] [Termination Attempts : 1 1 1 1 1 1 1 1 1 1 1 1 Sum: 12, Avg: 1, Min: 1, Max: 1, Diff: 0]\n<\/code><\/pre>\n<p><code>Termination time<\/code>\u00a0- \u5f53worker\u7ebf\u7a0b\u5b8c\u6210\u4e86\u81ea\u5df1\u90a3\u90e8\u5206\u5bf9\u8c61\u7684\u590d\u5236\u548c\u626b\u63cf,\u5c31\u8fdb\u5165\u7ec8\u6b62\u534f\u8bae(termination protocol)\u3002\u5b83\u67e5\u627e\u672a\u5b8c\u6210\u7684\u5de5\u4f5c(looks for work to steal), \u4e00\u65e6\u5b83\u5b8c\u6210\u5c31\u4f1a\u518d\u8fdb\u5165\u7ec8\u6b62\u534f\u8bae\u3002 \u7ec8\u6b62\u5c1d\u8bd5\u8bb0\u5f55(Termination attempt counts)\u6240\u6709\u67e5\u627e\u5de5\u4f5c\u7684\u5c1d\u8bd5\u6b21\u6570(attempts to steal work).<\/p>\n<h5><a target=\"_blank\" name=\"t74\"><\/a><a id=\"user-content-gc-worker-end\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#gc-worker-end\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>GC Worker End<\/h5>\n<pre><code>[GC Worker End (ms): 7116.4 7116.3 7116.4 7116.3 7116.4 7116.3 7116.4 7116.4 7116.4 7116.4 7116.3 7116.3\n    Avg: 7116.4, Min: 7116.3, Max: 7116.4, Diff:   0.1]\n[GC Worker (ms): 20.4 20.3 20.3 20.2 20.3 20.2 20.2 20.2 20.3 20.2 20.1 20.1\n     Avg: 20.2, Min: 20.1, Max: 20.4, Diff: 0.3]\n<\/code><\/pre>\n<p><code>GC worker end time<\/code>\u00a0\u2013 \u72ec\u7acb\u7684 GC worker \u505c\u6b62\u65f6\u7684\u65f6\u95f4\u6233.<\/p>\n<p><code>GC worker time<\/code>\u00a0\u2013 \u6bcf\u4e2a\u72ec\u7acb\u7684 GC worker \u7ebf\u7a0b\u6d88\u8017\u7684\u65f6\u95f4.<\/p>\n<h5><a target=\"_blank\" name=\"t75\"><\/a><a id=\"user-content-gc-worker-other\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#gc-worker-other\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>GC Worker Other<\/h5>\n<pre><code>[GC Worker Other (ms): 2.6 2.6 2.7 2.7 2.7 2.7 2.7 2.8 2.8 2.8 2.8 2.8\n    Avg: 2.7, Min: 2.6, Max: 2.8, Diff: 0.2]\n<\/code><\/pre>\n<p><code>GC worker other<\/code>\u00a0\u2013 \u6bcf\u4e2aGC\u7ebf\u7a0b\u4e2d\u4e0d\u80fd\u5f52\u5c5e\u5230\u4e4b\u524d\u5217\u51fa\u7684worker\u9636\u6bb5\u7684\u5176\u4ed6\u65f6\u95f4. \u8fd9\u4e2a\u503c\u5e94\u8be5\u5f88\u4f4e. \u8fc7\u53bb\u6211\u4eec\u89c1\u8fc7\u5f88\u9ad8\u7684\u503c,\u662f\u7531\u4e8eJVM\u7684\u5176\u4ed6\u90e8\u5206\u7684\u74f6\u9888\u5f15\u8d77\u7684(\u4f8b\u5982\u5728\u5206\u5c42[Tiered]\u4ee3\u7801\u7f13\u5b58[Code Cache]\u5360\u6709\u7387\u7684\u589e\u52a0)\u3002<\/p>\n<h5><a target=\"_blank\" name=\"t76\"><\/a><a id=\"user-content-clear-ct\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#clear-ct\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Clear CT<\/h5>\n<pre><code>[Clear CT: 0.6 ms]\n<\/code><\/pre>\n<p>\u6e05\u9664 RSet \u626b\u63cf\u5143\u6570\u636e(scanning meta-data)\u7684 card table \u6d88\u8017\u7684\u65f6\u95f4.<\/p>\n<h5><a target=\"_blank\" name=\"t77\"><\/a><a id=\"user-content-other\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#other\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Other<\/h5>\n<pre><code>[Other: 6.8 ms]\n<\/code><\/pre>\n<p>\u5176\u4ed6\u5404\u79cdGC\u6682\u505c\u7684\u8fde\u7eed\u9636\u6bb5\u82b1\u8d39\u7684\u65f6\u95f4.<\/p>\n<h5><a target=\"_blank\" name=\"t78\"><\/a><a id=\"user-content-cset\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#cset\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>CSet<\/h5>\n<pre><code>[Choose CSet: 0.1 ms]\n<\/code><\/pre>\n<p>\u6572\u5b9a\u8981\u8fdb\u884c\u5783\u573e\u56de\u6536\u7684region\u96c6\u5408\u65f6\u6d88\u8017\u7684\u65f6\u95f4. \u901a\u5e38\u5f88\u5c0f,\u5728\u5fc5\u987b\u9009\u62e9 old \u533a\u65f6\u4f1a\u7a0d\u5fae\u957f\u4e00\u70b9\u70b9.<\/p>\n<h5><a target=\"_blank\" name=\"t79\"><\/a><a id=\"user-content-ref-proc\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#ref-proc\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Ref Proc<\/h5>\n<pre><code>[Ref Proc: 4.4 ms]\n<\/code><\/pre>\n<p>\u5904\u7406 soft, weak, \u7b49\u5f15\u7528\u6240\u82b1\u8d39\u7684\u65f6\u95f4,\u4e0d\u540c\u4e8e\u524d\u9762\u7684GC\u9636\u6bb5<\/p>\n<h5><a target=\"_blank\" name=\"t80\"><\/a><a id=\"user-content-ref-enq\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#ref-enq\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Ref Enq<\/h5>\n<pre><code>[Ref Enq: 0.1 ms]\n<\/code><\/pre>\n<p>\u5c06 soft, weak, \u7b49\u5f15\u7528\u653e\u7f6e\u5230\u5f85\u5904\u7406\u5217\u8868(pending list)\u82b1\u8d39\u7684\u65f6\u95f4.<\/p>\n<h5><a target=\"_blank\" name=\"t81\"><\/a><a id=\"user-content-free-cset\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#free-cset\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>Free CSet<\/h5>\n<pre><code>[Free CSet: 2.0 ms]\n<\/code><\/pre>\n<p>\u91ca\u653e\u521a\u88ab\u5783\u573e\u6536\u96c6\u7684 heap\u533a\u6240\u6d88\u8017\u7684\u65f6\u95f4,\u5305\u62ec\u5bf9\u5e94\u7684remembered sets\u3002<\/p>\n<h2><a target=\"_blank\" name=\"t82\"><\/a><a id=\"user-content-\u603b\u7ed3\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E6%80%BB%E7%BB%93\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u603b\u7ed3<\/h2>\n<p>\u5728\u6b64OBE\u4e2d, \u60a8\u5bf9Java JVM \u4e2d\u7684G1\u5783\u573e\u6536\u96c6\u5668\u6709\u4e86\u4e2a\u5927\u81f4\u7684\u4e86\u89e3\u3002\u9996\u5148\u4f60\u5b66\u5230\u4e86\u4e3a\u4f55\u5806\u548c\u5783\u573e\u6536\u96c6\u5668\u662f\u6240\u6709Java JVM\u7684\u5173\u952e\u90e8\u5206\u3002\u63a5\u4e0b\u6765\u8bb2\u8ff0\u4e86\u4f7f\u7528CMS\u548cG1\u6536\u96c6\u5668\u8fdb\u884c\u5783\u573e\u56de\u6536\u7684\u5de5\u4f5c\u65b9\u5f0f. \u63a5\u4e0b\u6765,\u60a8\u4e86\u89e3\u4e86G1\u7684\u547d\u4ee4\u884c\u53c2\u6570\/\u5f00\u5173\u4ee5\u53ca\u548c\u4f7f\u7528\u5b83\u4eec\u7684\u6700\u4f73\u5b9e\u8df5\u3002\u6700\u540e,\u60a8\u4e86\u89e3\u4e86\u65e5\u5fd7\u5bf9\u8c61\u4ee5\u53caGC\u65e5\u5fd7\u4e2d\u7684\u6570\u636e\u3002<\/p>\n<p>\u5728\u672c\u6559\u7a0b\u4e2d,\u4f60\u5b66\u5230\u4e86\u8fd9\u4e9b\u77e5\u8bc6:<\/p>\n<ul class=\"task-list\">\n<li>Java JVM \u7684\u7ec4\u6210\u90e8\u5206<\/li>\n<li>\u5bf9 G1 \u7684\u6982\u8ff0<\/li>\n<li>\u6982\u8ff0 CMS \u5783\u573e\u6536\u96c6\u5668<\/li>\n<li>\u6982\u8ff0 G1 \u5783\u573e\u6536\u96c6\u5668<\/li>\n<li>\u547d\u4ee4\u884c\u53c2\u6570\u4e0e\u6700\u4f73\u5b9e\u8df5<\/li>\n<li>G1 \u7684\u65e5\u5fd7\u4fe1\u606f<\/li>\n<\/ul>\n<h3><a target=\"_blank\" name=\"t83\"><\/a><a id=\"user-content-\u76f8\u5173\u8d44\u6e90\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E7%9B%B8%E5%85%B3%E8%B5%84%E6%BA%90\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u76f8\u5173\u8d44\u6e90<\/h3>\n<p>\u66f4\u591a\u76f8\u5173\u4fe1\u606f\u8bf7\u53c2\u8003\u4ee5\u4e0b\u7f51\u7ad9\u94fe\u63a5.<\/p>\n<ul class=\"task-list\">\n<li><a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/tech\/vmoptions-jsp-140102.html\" target=\"_blank\" rel=\"noopener\">HotSpot \u865a\u62df\u673a\u53c2\u6570<\/a><\/li>\n<li><a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/tech\/g1-intro-jsp-135488.html\" target=\"_blank\" rel=\"noopener\">G1(\u5783\u573e\u4f18\u5148)\u6536\u96c6\u5668<\/a><\/li>\n<li><a href=\"https:\/\/blogs.oracle.com\/poonam\/entry\/understanding_g1_gc_logs\" target=\"_blank\" rel=\"noopener\">Poonam Bajaj\u7684\u535a\u5ba2\uff1a G1\u5783\u573e\u56de\u6536\u65e5\u5fd7<\/a><\/li>\n<li><a href=\"http:\/\/education.oracle.com\/pls\/web_prod-plq-dad\/db_pages.getpage?page_id=609&amp;p_org_id=1001&amp;lang=US&amp;get_params=dc:D67232GC10,p_preview:N\" target=\"_blank\" rel=\"noopener\">Java SE 7: \u5f00\u53d1\u5bcc\u5ba2\u6237\u7aef\u5e94\u7528\u7a0b\u5e8f<\/a><\/li>\n<li><a href=\"http:\/\/www.amazon.cn\/gp\/product\/B00IOB0K1Q\" target=\"_blank\" rel=\"noopener\">Java\u6027\u80fd\u4f18\u5316\u6743\u5a01\u6307\u5357 - \u4e2d\u6587\u7248<\/a><\/li>\n<li><a href=\"http:\/\/www.oracle.com\/oll\" target=\"_blank\" rel=\"noopener\">Oracle \u5b66\u4e60\u8d44\u6599\u5e93<\/a><\/li>\n<\/ul>\n<h2><a target=\"_blank\" name=\"t84\"><\/a><a id=\"user-content-\u4f5c\u8005\u4fe1\u606f\" class=\"anchor\" href=\"https:\/\/github.com\/cncounter\/translation\/blob\/master\/tiemao_2014\/G1\/G1.md#%E4%BD%9C%E8%80%85%E4%BF%A1%E6%81%AF\" target=\"_blank\" rel=\"noopener\" aria-hidden=\"true\"><\/a>\u4f5c\u8005\u4fe1\u606f<\/h2>\n<ul class=\"task-list\">\n<li>\u8bfe\u7a0b\u5f00\u53d1\u4eba\u5458: Michael J Williams<\/li>\n<li>\u8d28\u91cf\u4fdd\u8bc1: Krishnanjani Chitta<\/li>\n<\/ul>\n<ul class=\"task-list\">\n<li>\u7ffb\u8bd1\u4eba\u5458:\u00a0<a href=\"http:\/\/blog.csdn.net\/renfufei\" target=\"_blank\" rel=\"noopener\">\u94c1\u951a http:\/\/blog.csdn.net\/renfufei<\/a><\/li>\n<li>\u53c2\u8003:\u00a0<a href=\"http:\/\/www.infoq.com\/cn\/news\/2008\/05\/g1\" target=\"_blank\" rel=\"noopener\">JavaOne: Garbage First<\/a><\/li>\n<li>\u8fd9\u91cc\u6709\u4e00\u7fa4\u7eaf\u6280\u672fJava\u7a0b\u5e8f\u5458:\u00a0<a href=\"http:\/\/jq.qq.com\/?_wv=1027&amp;k=cXLDjh\" target=\"_blank\" rel=\"noopener\">\u6b22\u8fce\u5927\u725b\u548c\u7231\u597d\u8005\u52a0\u5165\u3010Java\u9ad8\u7ea7\u4ea4\u6d41\u7fa4: 329019348\u3011<\/a><\/li>\n<li>\u539f\u6587\u94fe\u63a5:\u00a0<a href=\"http:\/\/www.oracle.com\/webfolder\/technetwork\/tutorials\/obe\/java\/G1GettingStarted\/index.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.oracle.com\/webfolder\/technetwork\/tutorials\/obe\/java\/G1GettingStarted\/index.html<\/a><\/li>\n<\/ul>\n<p>\u8f6c\u8f7d\u81ea:\u00a0http:\/\/blog.csdn.net\/renfufei\/article\/details\/41897113<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8bf4\u660e concurrent: \u5e76\u53d1, \u591a\u4e2a\u7ebf\u7a0b\u534f\u540c\u505a\u540c\u4e00\u4ef6\u4e8b\u60c5(\u6709\u72b6\u6001) parallel: \u5e76\u884c, \u591a\u4e2a\u7ebf\u7a0b\u5404\u505a\u5404\u7684\u4e8b\u60c5(\u4e92\u76f8\u95f4\u65e0\u5171\u4eab\u72b6\u6001) \u53c2\u8003:\u00a0What\u2019s the difference be&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[34],"tags":[8],"class_list":["post-1296","post","type-post","status-publish","format-standard","hentry","category-software","tag-java"],"views":4645,"_links":{"self":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/1296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1296"}],"version-history":[{"count":1,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/1296\/revisions"}],"predecessor-version":[{"id":1297,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/1296\/revisions\/1297"}],"wp:attachment":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}