Javaã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
java [options] classname [args]
java [options] -jar filename [args]
javaw [options] classname [args]
javaw [options] -jar filename [args]
ã¹ããŒã¹ã§åºåã£ãã³ãã³ãè¡ãªãã·ã§ã³ã ããªãã·ã§ã³ããåç §ããŠãã ããã
èµ·åããã¯ã©ã¹ã®ååã
åŒã³åºãããJavaã¢ãŒã«ã€ã(JAR)ãã¡ã€ã«ã®ååã -jarãªãã·ã§ã³ãšäžç·ã«ã®ã¿äœ¿çšãããŸãã
ã¹ããŒã¹ã§åºåãããmain()ã¡ãœããã«æž¡ãããåŒæ°ã
javaã³ãã³ãã¯Javaã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã ããã¯ãJava Runtime Environment (JRE)ãèµ·åããæå®ãããã¯ã©ã¹ãããŒããããã®ã¯ã©ã¹ã®main()ã¡ãœãããåŒã³åºãããšã«ãã£ãŠè¡ãããŸãã ãã®ã¡ãœããã¯ãpublicããã³staticãšããŠå®£èšããå¿
èŠããããå€ãè¿ãããšãã§ãããStringé
åããã©ã¡ãŒã¿ãšããŠåãä»ããå¿
èŠããããŸãã ã¡ãœãã宣èšã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
public static void main(String[] args)
javaã³ãã³ãã¯ãmain()ã¡ãœãããããããjavafx.application.Applicationãæ¡åŒµããã¯ã©ã¹ãããŒãããããšã«ãã£ãŠãJavaFXã¢ããªã±ãŒã·ã§ã³ãèµ·åããããã«äœ¿çšã§ããŸãã åŸè
ã®å Žåãã©ã³ãã£ã¯Applicationã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãæ§ç¯ãããã®init()ã¡ãœãããåŒã³åºããæ¬¡ã«start(javafx.stage.Stage)ã¡ãœãããåŒã³åºããŸãã
ããã©ã«ãã§ã¯ãjavaã³ãã³ãã®ãªãã·ã§ã³ã§ãªãæåã®åŒæ°ã¯åŒã³åºãããã¯ã©ã¹ã®å®å
šä¿®é£Ÿåã§ãã -jarãªãã·ã§ã³ãæå®ããå Žåããã®åŒæ°ã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã¹ã»ãã¡ã€ã«ãšãªãœãŒã¹ã»ãã¡ã€ã«ãå«ãJARãã¡ã€ã«ã®ååã§ãã èµ·åã¯ã©ã¹ã¯ãã®ãœãŒã¹ã»ã³ãŒãã®Main-Classãããã§ã¹ãã»ããããŒã«ãã£ãŠç€ºãããå¿
èŠããããŸãã
JREã¯ãããŒãã¹ãã©ããã»ã¯ã©ã¹ã»ãã¹ãã€ã³ã¹ããŒã«ãããæ¡åŒµæ©èœããã³ãŠãŒã¶ãŒã»ã¯ã©ã¹ã»ãã¹ã®3ã€ã®äžé£ã®å Žæããèµ·åã¯ã©ã¹(ããã³ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããä»ã®ã¯ã©ã¹)ãæ€çŽ¢ããŸãã
ã¯ã©ã¹ã»ãã¡ã€ã«åãŸãã¯JARãã¡ã€ã«åã®åŸã«ããåŒæ°ã¯ãmain()ã¡ãœããã«æž¡ãããŸãã
javawã³ãã³ãã¯ãjavawã«ã³ã³ãœãŒã«ã»ãŠã£ã³ããŠãé¢é£ä»ããããŠããªãããšä»¥å€ã¯ãjavaã³ãã³ããšåãã§ãã javawã¯ãã³ãã³ãã»ããã³ããã»ãŠã£ã³ããŠã衚瀺ããå¿
èŠããªããšãã«äœ¿çšããŸãã ãã ããjavawã©ã³ãã£ã¯ãèµ·åã«å€±æãããšããšã©ãŒæ
å ±ã瀺ããã€ã¢ãã°ã»ããã¯ã¹ã衚瀺ããŸãã
javaã³ãã³ãã¯ãå¹
åºããªãã·ã§ã³ããµããŒãããŠãããæ¬¡ã®ã«ããŽãªã«åããããŸãã
æšæºãªãã·ã§ã³ã¯ãJavaä»®æ³ãã·ã³(JVM)ã®ãã¹ãŠã®å®è£ ã§ãµããŒããããããšãä¿èšŒãããŠããŸãã ãããã¯ãJREã®ããŒãžã§ã³ã®ç¢ºèªãã¯ã©ã¹ã»ãã¹ã®èšå®ã詳现åºåã®æå¹åãªã©ã®äžè¬çãªã¢ã¯ã·ã§ã³ã«äœ¿çšããŸãã
éæšæºãªãã·ã§ã³ã¯Java HotSpotä»®æ³ãã·ã³ã«åºæã®æ±çšãªãã·ã§ã³ã§ããããããã¹ãŠã®JVMå®è£
ã§ãµããŒããããä¿èšŒã¯ãªãã倿ŽãããããšããããŸãã ãããã®ãªãã·ã§ã³ã¯-Xããå§ãŸããŸãã
æ¡åŒµãªãã·ã§ã³ã¯äžçšæã«äœ¿çšããããšã¯ãèŠãããŸããã ãããã¯ãç¹å®ã®ã·ã¹ãã èŠä»¶ããããã·ã¹ãã æ§æãã©ã¡ãŒã¿ã«ç¹æš©ä»ãã¢ã¯ã»ã¹ãå¿
èŠãšãããããªJava HotSpotä»®æ³ãã·ã³ã®æäœã®ç¹å®ã®é åã®ãã¥ãŒãã³ã°ã«äœ¿çšããããã®éçºè
çšãªãã·ã§ã³ã§ãã ãããã¯ããã¹ãŠã®JVMå®è£
ã§ãµããŒããããŠããä¿èšŒã¯ãªãã倿ŽãããããšããããŸãã æ¡åŒµãªãã·ã§ã³ã¯-XXããå§ãŸããŸãã
ææ°ã®ãªãªãŒã¹ã§éæšå¥šã«ãããããåé€ããããªãã·ã§ã³ã远跡ããã«ã¯ãããã¥ã¡ã³ãã®æåŸã®ãéæšå¥šã®ãªãã·ã§ã³ãšåé€ããããªãã·ã§ã³ããšããã»ã¯ã·ã§ã³ããããŸãã
ããŒã«ã»ãªãã·ã§ã³ã¯ãããã©ã«ãã§ç¡å¹ã«ãããŠããæ©èœãæå¹ã«ããããããã©ã«ãã§æå¹ã«ãããŠããæ©èœãç¡å¹ã«ããããã«äœ¿çšããŸãã ãããã®ãªãã·ã§ã³ã§ã¯ãã©ã¡ãŒã¿ã¯å¿
èŠãããŸããã ããŒã«-XXãªãã·ã§ã³ã¯ããã©ã¹èšå·ã䜿çšããŠæå¹ã«ã(-XX:+OptionName)ããã€ãã¹èšå·ã䜿çšããŠç¡å¹ã«ããŸã(-XX:-OptionName)ã
åŒæ°ãå¿
èŠãšãããªãã·ã§ã³ã®å ŽåãåŒæ°ãšãªãã·ã§ã³åã¯ã¹ããŒã¹ãã³ãã³(:)ãŸãã¯çå·(=)ã§åºåããããŸãã¯ãªãã·ã§ã³ã®åŸã«çŽæ¥åŒæ°ãç¶ããããšãã§ããŸã(æ£ç¢ºãªæ§æã¯ãªãã·ã§ã³ããšã«ç°ãªããŸã)ã ãã€ãåäœã®ãµã€ãºãæå®ããå¿
èŠãããå Žåã¯ãæ¥å°ŸèŸã䜿çšããªããããŸãã¯ãããã€ã(KB)ã®å Žåã«æ¥å°ŸèŸkãŸãã¯Kãã¡ã¬ãã€ã(MB)ã®å Žåã«mãŸãã¯Mãã®ã¬ãã€ã(GB)ã®å Žåã«gãŸãã¯Gã䜿çšã§ããŸãã ããšãã°ããµã€ãºã8Gãã€ãã«èšå®ããã«ã¯ãåŒæ°ãšããŠã8gã8192mã8388608kãŸãã¯8589934592ãšæå®ã§ããŸãã ããŒã»ã³ããŒãžãæå®ããå¿
èŠãããå Žåã¯ã0ãã1ã®æ°å€ã䜿çšããŸã(ããšãã°ã25%ã®å Žå0.25ãšæå®ãã)ã
ãããã¯ãJVMã®ãã¹ãŠã®å®è£ ã§ãµããŒãããããã£ãšãäžè¬çã«äœ¿ããããªãã·ã§ã³ã§ãã
æå®ãããã€ãã£ãã»ãšãŒãžã§ã³ãã»ã©ã€ãã©ãªãããŒãããŸãã ã©ã€ãã©ãªåã®åŸã«ãã©ã€ãã©ãªã«åºæã®ãªãã·ã§ã³ã®ã«ã³ãåºåãã®ãªã¹ãã䜿çšã§ããŸãã
ãªãã·ã§ã³-agentlib:fooãæå®ãããå ŽåãJVMã¯foo.dllãšããååã®ã©ã€ãã©ãªããPATHã·ã¹ãã 倿°ã§æå®ãããå Žæã«ããŒãããããšããŸãã
次ã®äŸã§ã¯ãããŒãã»ãããã¡ã€ãªã³ã°ã»ããŒã«(HPROF)ã©ã€ãã©ãªãããŒãããã¹ã¿ãã¯ã®æ·±ã3ã§ããµã³ãã«CPUæ å ±ã20ããªç§ããã«ååŸããæ¹æ³ã瀺ããŠããŸãã
-agentlib:hprof=cpu=samples,interval=20,depth=3
次ã®äŸã§ã¯ãava Debug Wire Protocol (JDWP)ã©ã€ãã©ãªãããŒãããããŒã8000ã§ãœã±ããæ¥ç¶ããªã¹ãã³ã°ããã¡ã€ã³ã»ã¯ã©ã¹ã®ããŒãåã«JVMãäžæåæ¢ããæ¹æ³ã瀺ããŠããŸãã
-agentlib:jdwp=transport=dt_socket,server=y,address=8000
ãã€ãã£ãã»ãšãŒãžã§ã³ãã»ã©ã€ãã©ãªã®è©³çްã¯ã次ãåç §ããŠãã ããã
http://docs.oracle.com/javase/jp/8/api/java/lang/instrument/package-summary.htmlã®java.lang.instrumentããã±ãŒãžã®èª¬æ
http://docs.oracle.com/javase/jp/8/platform/jvmti/jvmti.html#startingã®JVM Tools Interfaceã¬ã€ãã®ããšãŒãžã§ã³ãã®ã³ãã³ãè¡ãªãã·ã§ã³ã
絶察ãã¹åã§æå®ããããã€ãã£ãã»ãšãŒãžã§ã³ãã»ã©ã€ãã©ãªãããŒãããŸãã ãã®ãªãã·ã§ã³ã¯-agentlibãšåçã§ãããã©ã€ãã©ãªã®ãã«ã»ãã¹ãšãã¡ã€ã«åã䜿çšããŸãã
Java HotSpot Client VMãéžæããŸãã Java SE Development Kit (JDK)ã®64ãããã»ããŒãžã§ã³ã¯çŸåšããã®ãªãã·ã§ã³ãç¡èŠãããããã«Server VMã䜿çšããŸãã
ããã©ã«ãã®JVMã®éžæã«ã€ããŠã¯ã次ã®Server-Classãã·ã³ã®æ€åºã«é¢ããããŒãžãåç
§ããŠãã ãããhttp://docs.oracle.com/javase/jp/8/technotes/guides/vm/server-class.html
ã·ã¹ãã ã»ããããã£ã®å€ãèšå®ããŸãã property倿°ã¯ããããã£ã®ååã衚ãã¹ããŒã¹ãªãã®æååã§ãã value倿°ã¯ããããã£ã®å€ã衚ãæååã§ãã valueãã¹ããŒã¹ã®ããæååã®å ŽåããããåŒçšç¬Šã§å²ã¿ãŸã(-Dfoo="foo bar"ãªã©)ã
ã¢ãµãŒã·ã§ã³ãç¡å¹ã«ããŸãã ããã©ã«ãã§ã¯ããã¹ãŠã®ããã±ãŒãžãšã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
åŒæ°ãªãã§ã-disableassertions (-da)ã¯ããã¹ãŠã®ããã±ãŒãžãšã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãç¡å¹ã«ããŸãã ...ã§çµããpackagenameåŒæ°ãæå®ãããšãã¹ã€ããã¯æå®ããããã±ãŒãžãšãµãããã±ãŒãžå
ã§ã¢ãµãŒã·ã§ã³ãç¡å¹ã«ããŸãã åŒæ°ã...ã®ã¿ã®å Žåãã¹ã€ããã¯çŸåšã®äœæ¥ãã£ã¬ã¯ããªã«ããååã®ãªãããã±ãŒãžå
ã§ã¢ãµãŒã·ã§ã³ãç¡å¹ã«ããŸãã classnameåŒæ°ãæå®ãããšãã¹ã€ããã¯æå®ããã¯ã©ã¹å
ã§ã¢ãµãŒã·ã§ã³ãç¡å¹ã«ããŸãã
-disableassertions (-da)ãªãã·ã§ã³ã¯ããã¹ãŠã®ã¯ã©ã¹ã»ããŒããŒããã³ã·ã¹ãã ã»ã¯ã©ã¹(ã¯ã©ã¹ã»ããŒããŒãæããªã)ã«é©çšãããŸãã ãã®ã«ãŒã«ã«ã¯1ã€ã®äŸå€ããããŸããåŒæ°ãªãã§ãªãã·ã§ã³ãæå®ãããå Žåãã·ã¹ãã ã»ã¯ã©ã¹ã«ã¯é©çšãããŸããã ããã«ãããã·ã¹ãã ã»ã¯ã©ã¹ãé€ããã¹ãŠã®ã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãç°¡åã«ç¡å¹ã«ã§ããŸãã -disablesystemassertionsãªãã·ã§ã³ã¯ããã¹ãŠã®ã·ã¹ãã ã»ã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãç¡å¹ã«ã§ããŸãã
ç¹å®ã®ããã±ãŒãžãŸãã¯ã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãæç€ºçã«æå¹ã«ããã«ã¯ã-enableassertions (-ea)ãªãã·ã§ã³ã䜿çšããŸãã äž¡æ¹ã®ãªãã·ã§ã³ãåæã«äœ¿çšããããšã¯ã§ããŸããã ããšãã°ãcom.wombat.fruitbatããã±ãŒãž(ããã³ãã¹ãŠã®ãµãããã±ãŒãž)å
ã®ã¢ãµãŒã·ã§ã³ãæå¹ã«ããcom.wombat.fruitbat.Brickbatã¯ã©ã¹å
ã®ã¢ãµãŒã·ã§ã³ãç¡å¹ã«ããŠãMyClassã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass
ãã¹ãŠã®ã·ã¹ãã ã»ã¯ã©ã¹å ã§ã¢ãµãŒã·ã§ã³ãç¡å¹ã«ããŸãã
ã¢ãµãŒã·ã§ã³ãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã¹ãŠã®ããã±ãŒãžãšã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
åŒæ°ãªãã§ã-enableassertions (-ea)ã¯ããã¹ãŠã®ããã±ãŒãžãšã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãæå¹ã«ããŸãã ...ã§çµããpackagenameåŒæ°ãæå®ãããšãã¹ã€ããã¯æå®ããããã±ãŒãžãšãã¹ãŠã®ãµãããã±ãŒãžå
ã§ã¢ãµãŒã·ã§ã³ãæå¹ã«ããŸãã åŒæ°ã...ã®ã¿ã®å Žåãã¹ã€ããã¯çŸåšã®äœæ¥ãã£ã¬ã¯ããªã«ããååã®ãªãããã±ãŒãžå
ã§ã¢ãµãŒã·ã§ã³ãæå¹ã«ããŸãã classnameåŒæ°ãæå®ãããšãã¹ã€ããã¯æå®ããã¯ã©ã¹å
ã§ã¢ãµãŒã·ã§ã³ãæå¹ã«ããŸãã
-enableassertions (-ea)ãªãã·ã§ã³ã¯ããã¹ãŠã®ã¯ã©ã¹ã»ããŒããŒããã³ã·ã¹ãã ã»ã¯ã©ã¹(ã¯ã©ã¹ã»ããŒããŒãæããªã)ã«é©çšãããŸãã ãã®ã«ãŒã«ã«ã¯1ã€ã®äŸå€ããããŸããåŒæ°ãªãã§ãªãã·ã§ã³ãæå®ãããå Žåãã·ã¹ãã ã»ã¯ã©ã¹ã«ã¯é©çšãããŸããã ããã«ãããã·ã¹ãã ã»ã¯ã©ã¹ãé€ããã¹ãŠã®ã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãç°¡åã«æå¹ã«ã§ããŸãã -enablesystemassertionsãªãã·ã§ã³ã¯ããã¹ãŠã®ã·ã¹ãã ã»ã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãæå¹ã«ããããã«åå¥ã®ã¹ã€ãããæäŸããŸãã
ç¹å®ã®ããã±ãŒãžãŸãã¯ã¯ã©ã¹ã§ã¢ãµãŒã·ã§ã³ãæç€ºçã«ç¡å¹ã«ããã«ã¯ã-disableassertions (-da)ãªãã·ã§ã³ã䜿çšããŸãã åäžã®ã³ãã³ãã«ãããã®ã¹ã€ããã®ã€ã³ã¹ã¿ã³ã¹ãè€æ°æå®ããå Žåã¯ãæå®ããã¹ã€ãããé çªã«åŠçãããŠããã¯ã©ã¹ãããŒããããŸãã ããšãã°ãcom.wombat.fruitbatããã±ãŒãž(ããã³ãã¹ãŠã®ãµãããã±ãŒãž)å
ã§ã®ã¿ã¢ãµãŒã·ã§ã³ãæå¹ã«ããcom.wombat.fruitbat.Brickbatã¯ã©ã¹å
ã§ç¡å¹ã«ããŠãMyClassã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass
ãã¹ãŠã®ã·ã¹ãã ã»ã¯ã©ã¹å ã§ã¢ãµãŒã·ã§ã³ãæå¹ã«ããŸãã
å®éã«JVMãå®è¡ããã«ãjavaã³ãã³ãã®äœ¿çšæ
å ±ã衚瀺ããŸãã
JARãã¡ã€ã«ã«ã«ãã»ã«åãããããã°ã©ã ãå®è¡ããŸãã filenameåŒæ°ã¯ãã¢ããªã±ãŒã·ã§ã³ã®éå§äœçœ®ãšããŠæ©èœããpublic static void main(String[] args)ã¡ãœããã«ãã£ãŠã¯ã©ã¹ãå®çŸ©ãããMain-Class:classnameã®åœ¢åŒã®è¡ãå«ããããã§ã¹ãã®ããJARãã¡ã€ã«ã®ååã§ãã
-jarãªãã·ã§ã³ã䜿çšãããšãæå®ããJARãã¡ã€ã«ããã¹ãŠã®ãŠãŒã¶ãŒã»ã¯ã©ã¹ã®ãœãŒã¹ã«ãªããä»ã®ã¯ã©ã¹ã»ãã¹ã®èšå®ã¯ç¡èŠãããŸãã
JARãã¡ã€ã«ã®è©³çްã¯ã次ã®ãªãœãŒã¹ãåç §ããŠãã ããã
http://docs.oracle.com/javase/jp/8/technotes/guides/jar/index.htmlã®Java Archive (JAR)ãã¡ã€ã«ã®ã¬ã€ã
次ã®JARãã¡ã€ã«ãžã®ããã°ã©ã ã®ããã±ãŒãžåã«é¢ããã¬ãã¹ã³
http://docs.oracle.com/javase/tutorial/deployment/jar/index.html
æå®ããJavaããã°ã©ãã³ã°èšèªãšãŒãžã§ã³ããããŒãããŸãã Javaã¢ããªã±ãŒã·ã§ã³ã®èšæž¬ã®è©³çްã«ã€ããŠã¯ãJava APIããã¥ã¡ã³ãã®java.lang.instrumentããã±ãŒãžã®èª¬æ(http://docs.oracle.com/javase/jp/8/api/java/lang/instrument/package-summary.html)ãåç
§ããŠãã ããã
ãŠãŒã¶ãŒã®ãã©ã€ããŒãJREãããŒãžã§ã³æ€çŽ¢ã«å«ããŸãã
ãŠãŒã¶ãŒã®ãã©ã€ããŒãJREãããŒãžã§ã³æ€çŽ¢ããé€å€ããŸãã
Java HotSpot Server VMãéžæããŸãã JDKã®64ãããã»ããŒãžã§ã³ã¯Server VMã®ã¿ããµããŒãããŠããããããã®å Žåã®ãªãã·ã§ã³ã¯æé»çã§ãã
ããã©ã«ãã®JVMã®éžæã«ã€ããŠã¯ã次ã®Server-Classãã·ã³ã®æ€åºã«é¢ããããŒãžãåç
§ããŠãã ãããhttp://docs.oracle.com/javase/jp/8/technotes/guides/vm/server-class.html
ããŒãžã§ã³æ
å ±ã衚瀺ããŠã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãç¶è¡ããŸãã ãã®ãªãã·ã§ã³ã¯ã-versionãªãã·ã§ã³ãšåçã§ãããåŸè
ã¯JVMã«ããŒãžã§ã³æ
å ±ã®è¡šç€ºåŸçµäºããããã«æç€ºããç¹ãç°ãªããŸãã
imgnameã«æå®ãããç»åãå«ãã¹ãã©ãã·ã¥ç»é¢ã衚瀺ããŸãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«ãimagesãã£ã¬ã¯ããªã®splash.gifãã¡ã€ã«ã衚瀺ããã«ã¯ã次ã®ãªãã·ã§ã³ã䜿çšããŸãã
-splash:images/splash.gif
ããŒããããåã¯ã©ã¹ã«é¢ããæ å ±ã衚瀺ããŸãã
åã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³(GC)ã€ãã³ãã«é¢ããæ å ±ã衚瀺ããŸãã
ãã€ãã£ãã»ã¡ãœããããã³ãã®ä»ã®Java Native Interface (JNI)ã¢ã¯ãã£ããã£ã®äœ¿çšã«é¢ããæ å ±ã衚瀺ããŸãã
ããŒãžã§ã³æ
å ±ã衚瀺ããŠçµäºããŸãã ãã®ãªãã·ã§ã³ã¯ã-showversionãªãã·ã§ã³ãšåçã§ãããåŸè
ã¯JVMã«ããŒãžã§ã³æ
å ±ã®è¡šç€ºåŸçµäºããããã«æç€ºããç¹ãç°ãªããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã«äœ¿çšãããªãªãŒã¹ã»ããŒãžã§ã³ãæå®ããŸãã åŒã³åºãããjavaã³ãã³ãã®ããŒãžã§ã³ããã®æå®å
å®¹ãæºãããããã€é©åãªå®è£
ãã·ã¹ãã äžã§èŠã€ãã£ãå Žåã¯ããã®é©åãªå®è£
ã䜿çšãããŸãã
releaseåŒæ°ã¯ãæ£ç¢ºãªããŒãžã§ã³æååããããŒãžã§ã³æååãšç¯å²ã®ã¹ããŒã¹ã§åºåããããªã¹ãã®ããããã§æå®ããŸãã ããŒãžã§ã³æååãšã¯åœ¢åŒ1.x.0_u (ããã§xã¯ã¡ãžã£ãŒã»ããŒãžã§ã³çªå·ã§ãuã¯æŽæ°ããŒãžã§ã³çªå·)ã§ã®ããŒãžã§ã³çªå·ã®éçºè
ã«ããæå®ã§ãã ããŒãžã§ã³ç¯å²ã¯ããŒãžã§ã³çªå·ãšããã«ç¶ããã®ããŒãžã§ã³ä»¥éã瀺ããã©ã¹èšå·(+)ãããŸãã¯äžèŽããæ¥é èŸãæã€ããŒãžã§ã³æååã瀺ãããŒãžã§ã³æååãšãã®åŸã®ã¢ã¹ã¿ãªã¹ã¯(*) ããæ§æãããŸãã ããŒãžã§ã³æååãšããŒãžã§ã³ç¯å²ã¯ãè«çORã®çµåããã§ã¹ããŒã¹ã䜿çšããŠçµã¿åããããã2ã€ã®ããŒãžã§ã³æåå/ç¯å²ã®è«çANDã®çµåããã§ã¢ã³ããµã³ã(&)ã䜿çšããŠçµã¿åãããããšãã§ããŸãã ããšãã°ãã¯ã©ã¹ãŸãã¯JARãã¡ã€ã«ã®å®è¡ã«ãJRE 6u13 (1.6.0_13)ãŸãã¯6u10 (1.6.0_10)ããå§ãŸãä»»æã®JRE 6ãå¿
èŠãªå Žåãæ¬¡ã®ããã«æå®ããŸãã
-version:"1.6.0_13 1.6* & 1.6.0_10+"
çå笊ã¯ãreleaseãã©ã¡ãŒã¿ã«ã¹ããŒã¹ãããå Žåã«ã®ã¿å¿ èŠã§ãã
JARãã¡ã€ã«ã®å Žåã¯ãããŒãžã§ã³èŠä»¶ãã³ãã³ãè¡ã«æå®ããããããJARãã¡ã€ã«ã®ãããã§ã¹ãå ã«æå®ããããšãæšå¥šãããŠããŸãã
ãããã®ãªãã·ã§ã³ã¯ãJava HotSpotä»®æ³ãã·ã³ã«åºæã®æ±çšãªãã·ã§ã³ã§ãã
䜿çšå¯èœãªãã¹ãŠã®-Xãªãã·ã§ã³ã®ãã«ãã衚瀺ããŸãã
ããã¯ã°ã©ãŠã³ãã»ã³ã³ãã€ã«ãç¡å¹ã«ããŸãã ããã©ã«ãã§ãJVMã¯ãã¡ãœãããããã¯ã°ã©ãŠã³ãã»ã¿ã¹ã¯ãšããŠã³ã³ãã€ã«ããããã¯ã°ã©ãŠã³ãã»ã³ã³ãã€ã«ãçµäºãããŸã§ã€ã³ã¿ããªã¿ã»ã¢ãŒãã§ã¡ãœãããå®è¡ããŸãã -Xbatchãã©ã°ã¯ãããã¯ã°ã©ãŠã³ãã»ã³ã³ãã€ã«ãç¡å¹ã«ããããããã¹ãŠã®ã¡ãœããã®ã³ã³ãã€ã«ãå®äºãããŸã§ãã©ã¢ã°ã©ãŠã³ãã»ã¿ã¹ã¯ãšããŠåŠçãããŸãã
ãã®ãªãã·ã§ã³ã¯-XX:-BackgroundCompilationãšåçã§ãã
ããŒãã»ã¯ã©ã¹ã»ãã¡ã€ã«ãæ¢ããã£ã¬ã¯ããªãJARãã¡ã€ã«ããã³ZIPã¢ãŒã«ã€ããã»ãã³ãã³(;)ã§åºåã£ããªã¹ãã§æå®ããŸãã ãããããJDKã«å«ãŸããããŒãã»ã¯ã©ã¹ã»ãã¡ã€ã«ã®ä»£ããã«äœ¿çšãããŸãã
rt.jarå
ã®ã¯ã©ã¹ããªãŒããŒã©ã€ãããããã«ãã®ãªãã·ã§ã³ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã¯é
åããªãã§ãã ãããããã¯JRE ãã€ããªã»ã³ãŒãã»ã©ã€ã»ã³ã¹éåã«ãªããŸãã
ãã£ã¬ã¯ããªãJARãã¡ã€ã«ããã³ZIPã¢ãŒã«ã€ããã»ãã³ãã³(;)ã§åºåã£ããªã¹ãã§æå®ããããã©ã«ãã®ããŒãã¹ãã©ããã»ã¯ã©ã¹ã»ãã¹ã®æåŸã«è¿œå ããŸãã
rt.jarå
ã®ã¯ã©ã¹ããªãŒããŒã©ã€ãããããã«ãã®ãªãã·ã§ã³ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã¯é
åããªãã§ãã ãããããã¯JRE ãã€ããªã»ã³ãŒãã»ã©ã€ã»ã³ã¹éåã«ãªããŸãã
ãã£ã¬ã¯ããªãJARãã¡ã€ã«ããã³ZIPã¢ãŒã«ã€ããã»ãã³ãã³(;)ã§åºåã£ããªã¹ãã§æå®ããããã©ã«ãã®ããŒãã¹ãã©ããã»ã¯ã©ã¹ã»ãã¹ã®åã«è¿œå ããŸãã
rt.jarå
ã®ã¯ã©ã¹ããªãŒããŒã©ã€ãããããã«ãã®ãªãã·ã§ã³ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã¯é
åããªãã§ãã ãããããã¯JRE ãã€ããªã»ã³ãŒãã»ã©ã€ã»ã³ã¹éåã«ãªããŸãã
Java Native Interface (JNI)æ©èœã«å¯ŸããŠè¿œå ãã§ãã¯ãè¡ããŸãã å ·äœçã«ã¯ãããã¯JNIèŠæ±ãåŠçããåã«ãJNI颿°ã«æž¡ããããã©ã¡ãŒã¿ãšãå®è¡æç°å¢ããŒã¿ãæ€èšŒããŸãã ç¡å¹ãªããŒã¿ãèŠã€ãã£ãå Žåã¯ããã€ãã£ãã»ã³ãŒãã«åé¡ãããããšã瀺ããŠããããã®å Žåã«ãJVMã¯å埩äžèœãªãšã©ãŒãçºçããŠçµäºããŸãã ãã®ãªãã·ã§ã³ã䜿çšãããšãããã©ãŒãã³ã¹äœäžãäºæ³ãããŸãã
æåã®åŒåºãã§ãã¡ãœããã®ã³ã³ãã€ã«ã匷å¶çã«å®è¡ããŸãã ããã©ã«ãã§ãã¯ã©ã€ã¢ã³ãVM (-client)ã¯1,000åã®è§£æå¯Ÿè±¡ã¡ãœããã®åŒåºããå®è¡ãããµãŒããŒVM (-server)ã¯10,000åã®è§£æå¯Ÿè±¡ã¡ãœããã®åŒåºããå®è¡ããŠãå¹ççãªã³ã³ãã€ã«ã®ããã®æ
å ±ãåéããŸãã -Xcompãªãã·ã§ã³ãæå®ãããšãè§£æå¯Ÿè±¡ã¡ãœããã®åŒåºããç¡å¹ã«ãããããå¹çæ§ãšåŒãæãã«ã³ã³ãã€ã«ã®ããã©ãŒãã³ã¹ãåäžããŸãã
-XX:CompileThresholdãªãã·ã§ã³ã䜿çšããŠãã³ã³ãã€ã«åã®è§£æå¯Ÿè±¡ã¡ãœããã®åŒåºãæ°ã倿Žããããšãã§ããŸãã
äœãè¡ããŸããã äžäœäºææ§ãç¶æããããã«æäŸãããŠããŸãã
远å ã®èšºæã¡ãã»ãŒãžã衚瀺ããŸãã
ã¯ã©ã¹ãã¡ã€ã«åœ¢åŒã®ä»æ§ãžã®å³å¯ãªæºæ ãé©çšããã¯ã©ã¹ãã¡ã€ã«åœ¢åŒã®å³å¯ãªãã§ãã¯ãæå¹ã«ããŸãã å°æ¥ã®ãªãªãŒã¹ã§ã¯ãããå³å¯ãªãã§ãã¯ãããã©ã«ãã«ãªããããæ°ããã³ãŒããéçºãããšãã«ã¯ãã®ãã©ã°ã䜿çšããããšããèŠãããŸãã
ã€ã³ã¿ããªã¿å°çšã¢ãŒãã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã ãã€ãã£ãã»ã³ãŒããžã®ã³ã³ãã€ã«ã¯ç¡å¹ã«ãªãããã¹ãŠã®ãã€ãã»ã³ãŒããã€ã³ã¿ããªã¿ã«ãã£ãŠå®è¡ãããŸãã Just-In-Time (JIT)ã³ã³ãã€ã©ãæäŸããããã©ãŒãã³ã¹äžã®å©ç¹ã¯ããã®ã¢ãŒãã§ã¯å®çŸãããŸããã
-versionãªãã·ã§ã³ããã詳ããJVMããŒãžã§ã³æ
å ±ã衚瀺ããŠãçµäºããŸãã
ãã®ã³ã°ã®ããã詳现GCã€ãã³ãæ
å ±ããªãã€ã¬ã¯ããããã¡ã€ã«ãèšå®ããŸãã ãã®ãã¡ã€ã«ã«æžã蟌ãŸããæ
å ±ã¯ããã®ã³ã°ãããåã€ãã³ãã®åã®æåã®GCã€ãã³ãããçµéããæéã§ã®-verbose:gcã®åºåãšäŒŒãŠããŸãã åãjavaã³ãã³ãã§äž¡æ¹ãæå®ãããå Žåã«ã-Xloggcãªãã·ã§ã³ã¯ã-verbose:gcããªãŒããŒã©ã€ãããŸãã
äŸ:
-Xloggc:garbage-collection.log
JITã§ã³ã³ãã€ã«ãããã³ãŒãã®æå€§ã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãº(ãã€ãåäœ)ãæå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãã®æå€§ã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãºã¯240MBã§ãããªãã·ã§ã³-XX:-TieredCompilationã䜿çšããŠéå±€åã³ã³ãã€ã«ãç¡å¹ã«ããå Žåãããã©ã«ãã®ãµã€ãºã¯48MBã§ãã
-Xmaxjitcodesize=240m
ãã®ãªãã·ã§ã³ã¯-XX:ReservedCodeCacheSizeãšåçã§ãã
ãã€ãã£ãã»ã³ãŒãã«ã³ã³ãã€ã«ããããããã»ã¡ãœãããé€ããã¹ãŠã®ãã€ãã³ãŒããã€ã³ã¿ããªã¿ã«ãã£ãŠå®è¡ããŸãã
Youngäžä»£(ããŒãµãª)ã®ããŒãã®åæããã³æå€§ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã
ããŒãã®Youngäžä»£é åã¯æ°ãããªããžã§ã¯ãã«äœ¿çšãããŸãã ãã®é åã§ã¯ä»ã®é åãããé »ç¹ã«GCãå®è¡ãããŸãã Youngäžä»£ã®ãµã€ãºãå°ããããå Žåã¯ã倧éã®ãã€ããŒã»ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ãå®è¡ãããŸãã ãã®ãµã€ãºã倧ããããå Žåã¯ãå®å šã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã®ã¿ãå®è¡ãããŸãããããã¯å®äºãŸã§ã«é·ãæéããããããšããããŸãã Oracleã§ã¯ãYoungäžä»£ã®ãµã€ãºãããŒãã»ãµã€ãºå šäœã®ååãã4åã®1ã®éã«ç¶æããããšããèŠãããŸãã
次ã®äŸã§ã¯ãæ§ã ãªåäœã䜿çšããŠãYoungäžä»£ã®åæããã³æå€§ãµã€ãºã256Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŸãã
-Xmn256m -Xmn262144k -Xmn268435456
Youngäžä»£ã®ããŒãã®åæãµã€ãºãšæå€§ãµã€ãºã®äž¡æ¹ãèšå®ãã-Xmnãªãã·ã§ã³ã®ä»£ããã«ã-XX:NewSizeã䜿çšããŠãåæãµã€ãºãèšå®ãã-XX:MaxNewSizeã䜿çšããŠãæå€§ãµã€ãºãèšå®ã§ããŸãã
ããŒãã®æå°ãµã€ãºããã³åæãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãã®å€ã¯ã1024ã®åæ°ã§1Mãã€ããã倧ãããªããã°ãªããŸããã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã
次ã®äŸã§ã¯ãæ§ã ãªåäœã䜿çšããŠãå²ãåœãŠãããã¡ã¢ãªãŒã®ãµã€ãºã6Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŸãã
-Xms6291456 -Xms6144k -Xms6m
ãã®ãªãã·ã§ã³ãèšå®ããªãå Žåãåæãµã€ãºã¯ãOldäžä»£ãšYoungäžä»£ã«å²ãåœãŠããããµã€ãºã®åèšãšããŠèšå®ãããŸãã Youngäžä»£ã®ããŒãã®åæãµã€ãºã¯ã-Xmnãªãã·ã§ã³ãŸãã¯-XX:NewSizeãªãã·ã§ã³ã䜿çšããŠèšå®ã§ããŸãã
-XX:InitalHeapSizeãªãã·ã§ã³ã¯ãåæããŒãã»ãµã€ãºã®èšå®ã«ã䜿çšã§ããŸãã ã³ãã³ãã©ã€ã³ã§-Xmsã®åŸã«æå®ãããŠããå ŽåãåæããŒãã»ãµã€ãºã¯-XX:InitalHeapSizeã§æå®ãããå€ã«èšå®ãããŸãã
ã¡ã¢ãªãŒå²åœãŠããŒã«ã®æå€§ãµã€ãº(ãã€ãåäœ)ãæå®ããŸãã ãã®å€ã¯ã1024ã®åæ°ã§ã2Mãã€ããã倧ãããªããã°ãªããŸããã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãå€ã¯ãå®è¡æã«ã·ã¹ãã ã®èšå®ã«åºã¥ããŠéžæãããŸãã ãµãŒããŒé
åã®å Žåã-Xmsãš-Xmxãåäžã®å€ã«èšå®ãããŠããããšããããããŸãã ãJava SE HotSpotä»®æ³ãã·ã³ã»ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã»ãã¥ãŒãã³ã°ã»ã¬ã€ã ã(http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html)ã®ãšã«ãŽããã¯ã¹ã«é¢ããé
ãåç
§ããŠãã ããã
次ã®äŸã§ã¯ãæ§ã ãªåäœã䜿çšããŠãå²ãåœãŠãããã¡ã¢ãªãŒã®æå€§èš±å®¹ãµã€ãºã80Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŸãã
-Xmx83886080 -Xmx81920k -Xmx80m
-Xmxãªãã·ã§ã³ã¯-XX:MaxHeapSizeãšåçã§ãã
ã¯ã©ã¹ã®ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³(GC)ãç¡å¹ã«ããŸãã ããã«ããããããã®GCæéãç¯çŽãããã¢ããªã±ãŒã·ã§ã³å®è¡æã®å²èŸŒã¿ãçããªããŸãã
èµ·åæã«-Xnoclassgcãæå®ãããšãGCæã«ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã¹ã»ãªããžã§ã¯ãããã®ãŸãŸã®ç¶æ
ã«ãããåžžã«æå¹ã§ãããšã¿ãªãããŸãã ããã«ãããå€ãã®ã¡ã¢ãªãŒãæ°žç¶çã«å æãããããšã«ãªããããæ
éã«äœ¿çšããªããšãã¡ã¢ãªãŒäžè¶³ã®äŸå€ãã¹ããŒãããŸãã
å®è¡äžã®ããã°ã©ã ã®ãããã¡ã€ã«ãçæãããããã¡ã€ã«ã»ããŒã¿ãæšæºåºåã«åºåããŸãã ãã®ãªãã·ã§ã³ã¯ãããã°ã©ã éçºã§åœ¹ç«ã€ãŠãŒãã£ãªãã£ãšããŠæäŸãããŠãããæ¬çªçšŒåã·ã¹ãã ã§ã®äœ¿çšãç®çãšãããã®ã§ã¯ãããŸããã
JVMã«ãããªãã¬ãŒãã£ã³ã°ã»ã·ã¹ãã ã»ã·ã°ãã«ã®äœ¿çšãæžãããŸãã
ã·ã£ããããŠã³ã»ããã¯ã«ãããJVMãçªç¶çµäºããå Žåã§ããã·ã£ããããŠã³æã«ãŠãŒã¶ãŒã»ã¯ãªãŒã³ã»ã¢ããã³ãŒã(ããŒã¿ããŒã¹æ¥ç¶ã®ã¯ããŒãºãªã©)ãå®è¡ããŠãJavaã¢ããªã±ãŒã·ã§ã³ã®æ£åžžãªã·ã£ããããŠã³ãã§ããããã«ãªããŸããã
JVMã¯ãã³ã³ãœãŒã«å¶åŸ¡ã€ãã³ããç£èŠããŠäºæããªãçµäºã®ã·ã£ããããŠã³ã»ããã¯ãå®è£
ããŸãã å
·äœçã«ã¯ãJVMã¯ãã·ã£ããããŠã³ã»ããã¯åŠçãéå§ããã³ã³ãœãŒã«å¶åŸ¡ãã³ãã©ãç»é²ããCTRL_C_EVENTãCTRL_CLOSE_EVENTãCTRL_LOGOFF_EVENTããã³CTRL_SHUTDOWN_EVENTã«å¯ŸããŠTRUEãè¿ããŸãã
JVMã¯ããããã°çšã®ã¹ã¬ããã»ã¹ã¿ãã¯ããã³ãããæ©èœãå®çŸããããã«ããåæ§ã®ã¡ã«ããºã ã䜿çšããŸãã JVMã¯ãã¹ã¬ããã»ãã³ããå®è¡ããããã«CTRL_BREAK_EVENTã䜿çšããŸãã
JVMããµãŒãã¹(WebãµãŒããŒçšã®ãµãŒãã¬ããã»ãšã³ãžã³ãªã©)ãšããŠå®è¡ãããŠããå ŽåãCTRL_LOGOFF_EVENTãåãåã£ãŠãã·ã£ããããŠã³åŠçãéå§ããã¹ãã§ã¯ãããŸãããããã¯ããªãã¬ãŒãã£ã³ã°ã»ã·ã¹ãã ãå®éã«ã¯ããã»ã¹ãçµäºãããªãããã§ãã ãã®ãããªå¹²æžã®å¯èœæ§ãé¿ããããã-Xrsãªãã·ã§ã³ã䜿çšã§ããŸãã -Xrsãªãã·ã§ã³ã䜿çšãããšãJVMã¯ãã³ã³ãœãŒã«å¶åŸ¡ãã³ãã©ãã€ã³ã¹ããŒã«ããªããããCTRL_C_EVENTãCTRL_CLOSE_EVENTãCTRL_LOGOFF_EVENTãŸãã¯CTRL_SHUTDOWN_EVENTã®ç£èŠãåŠçãè¡ããªãããšãæå³ããŸãã
-Xrsãæå®ããå Žåã¯ã2ã€ã®åœ±é¿ããããŸãã
Ctrl+BreakããŒã«ããã¹ã¬ããã»ãã³ãã䜿çšã§ããŸããã
ã·ã£ããããŠã³ã»ããã¯ã®å®è¡ã¯ãJVMãçµäºããããšããŠããæç¹ã§System.exit()ãåŒã³åºããªã©ããŠããŠãŒã¶ãŒã»ã³ãŒãåŽã§è¡ããŸãã
ã¯ã©ã¹ã»ããŒã¿å ±æ(CDS)ã¢ãŒããèšå®ããŸãã ãã®ãªãã·ã§ã³ã®modeåŒæ°ã«ã¯æ¬¡ãæå®ã§ããŸãã
å¯èœãªå Žåã¯ãCDSã䜿çšããŸãã ããã¯Java HotSpot 32-Bit Client VMã®ããã©ã«ãå€ã§ãã
CDSã®äœ¿çšãå¿ é ã§ãã ã¯ã©ã¹ã»ããŒã¿å ±æã䜿çšã§ããªãå Žåã¯ããšã©ãŒã»ã¡ãã»ãŒãžãåºåããçµäºããŸãã
CDSã¯äœ¿çšããªãã§ãã ããã ããã¯Java HotSpot 32-Bit Server VMãJava HotSpot 64-Bit Client VMããã³Java HotSpot 64-Bit Server VMã®ããã©ã«ãå€ã§ãã
CDSã¢ãŒã«ã€ããæåã§çæããŸãã ã¯ã©ã¹ã»ãã¹ã®èšå®ã®èª¬æã«åŸã£ãŠãã¢ããªã±ãŒã·ã§ã³ã»ã¯ã©ã¹ã»ãã¹ãæå®ããŸãã
æ°ããJDKãªãªãŒã¹ã䜿çšããŠCDSã¢ãŒã«ã€ããåçæããå¿ èŠããããŸãã
èšå®ã衚瀺ããç¶è¡ããŸãã ãã®ãªãã·ã§ã³ã®categoryåŒæ°ã«ã¯æ¬¡ãæå®ã§ããŸãã
èšå®ã®ãã¹ãŠã®ã«ããŽãªã衚瀺ããŸãã ãããããã©ã«ãå€ã§ãã
ãã±ãŒã«ã«é¢é£ããèšå®ã衚瀺ããŸãã
ã·ã¹ãã ã»ããããã£ã«é¢é£ããèšå®ã衚瀺ããŸãã
JVMã®èšå®ã衚瀺ããŸãã
ã¹ã¬ããã»ã¹ã¿ãã¯ã»ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã Kãã€ããæå®ããã«ã¯æåkãŸãã¯KãMãã€ããæå®ããã«ã¯æåmãŸãã¯MãGãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãå€ã¯ãä»®æ³ã¡ã¢ãªãŒã«ãã£ãŠç°ãªããŸãã
次ã®äŸã§ã¯ãæ§ã ãªåäœã§ã¹ã¬ããã»ã¹ã¿ãã¯ã»ãµã€ãºã1024Kãã€ãã«èšå®ããŸãã
-Xss1m -Xss1024k -Xss1048576
ãã®ãªãã·ã§ã³ã¯-XX:ThreadStackSizeã«äŒŒãŠããŸãã
ãã€ãã³ãŒãã»ããªãã¡ã€ã¢ã®ã¢ãŒããèšå®ããŸãã ãã€ãã³ãŒãæ€èšŒã§ã¯ãã¯ã©ã¹ã»ãã¡ã€ã«ã®åœ¢åŒãæ£ãããJavaä»®æ³ãã·ã³ã®ä»æ§ã®ã»ã¯ã·ã§ã³4.10ãclassãã¡ã€ã«ã®æ€èšŒã«é¢ããé
ã«èšèŒãããŠããå¶çŽãæºè¶³ããŠããããšã確èªãããŸãã
æ€èšŒãç¡å¹ã«ãããšãJavaãæäŸããŠããä¿è·ãäœäžãã圢åŒãæ£ãããªãã¯ã©ã¹ã»ãã¡ã€ã«ã®ããã«åé¡ãçºçããããšããããããç¡å¹ã«ããªãã§ãã ããã
ãã®ãªãã·ã§ã³ã®modeåŒæ°ã«ã¯æ¬¡ãæå®ã§ããŸãã
ããŒãã¹ãã©ããã»ã¯ã©ã¹ã»ããŒããŒã§ããŒããããŠããªããã¹ãŠã®ãã€ãã³ãŒããæ€èšŒããŸãã ããã¯-Xverifyãªãã·ã§ã³ãæå®ããªãå Žåã®ããã©ã«ãã®åäœã§ãã
ãã¹ãŠã®ãã€ãã³ãŒãã®æ€èšŒãæå¹ã«ããŸãã
ãã¹ãŠã®ãã€ãã³ãŒãã®æ€èšŒãç¡å¹ã«ããŸãã -Xverify:noneã®äœ¿çšã¯ãµããŒããããŠããŸããã
ãããã®ãªãã·ã§ã³ã¯Java HotSpot VMã®ã©ã³ã¿ã€ã åäœãå¶åŸ¡ããŸãã
æ¿èªãããæšæºã®ãªãŒããŒã©ã€ãæ©æ§ãŸãã¯æ¡åŒµæ©èœæ©æ§ã䜿çšããå Žåãjavaã³ãã³ããJavaã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã®ãããªãã·ã§ã³ã§é²æ¢ã§ããããã«ããŸãã ãã®ãªãã·ã§ã³ã¯ã次ã確èªããããšã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ããã®ããããã®æ©æ§ã䜿çšããŠãããã©ããã確èªããŸãã
java.ext.dirsãŸãã¯java.endorsed.dirsã·ã¹ãã ã»ããããã£ãèšå®ãããŠããã
lib/endorsedãã£ã¬ã¯ããªãååšãã空ã§ãªãã
lib/extãã£ã¬ã¯ããªã«ãJDKã®ãã®ãé€ããããããJARãã¡ã€ã«ãããã
ãã©ãããã©ãŒã åºæã®ã·ã¹ãã å šäœã®æ¡åŒµãã£ã¬ã¯ããªã«JARãã¡ã€ã«ãå«ãŸããŠããã
ããŒã«ãJVMã«æ·»ä»ã§ããã¡ã«ããºã ãç¡å¹ã«ãããªãã·ã§ã³ãæå¹ã«ããŸãã ããã©ã«ãã§ãã®ãªãã·ã§ã³ã¯ç¡å¹ã§ãããæ·»ä»ã¡ã«ããºã ãæå¹ã«ãããŠããããšãæå³ãããããjcmdãjstackãjmapããã³jinfoãªã©ã®ããŒã«ã䜿çšã§ããŸãã
å埩äžèœãªãšã©ãŒãçºçããå Žåã«ããšã©ãŒã»ããŒã¿ãæžã蟌ãŸãããã¹ãšãã¡ã€ã«åãæå®ããŸãã ããã©ã«ãã§ããã®ãã¡ã€ã«ã¯çŸåšã®äœæ¥ãã£ã¬ã¯ããªã«äœæãããhs_err_pidpid.logãšåä»ããããŸããããã§pidã¯ãšã©ãŒãçºçãããããã»ã¹ã®èå¥åã§ãã æ¬¡ã®äŸã§ã¯ãããã©ã«ãã®ãã°ã»ãã¡ã€ã«ãèšå®ããæ¹æ³ã瀺ããŸã(ããã»ã¹ã®èå¥åã¯%pã§æå®ãããããšã«æ³šæããŠãã ãã)ã
-XX:ErrorFile=./hs_err_pid%p.log
次ã®äŸã¯ããšã©ãŒã»ãã°ã»ãã¡ã€ã«ãC:/log/java/java_error.logã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:ErrorFile=C:/log/java/java_error.log
æå®ããããã£ã¬ã¯ããªã«ãã¡ã€ã«ãäœæã§ããªãå Žå(é åäžè¶³ãã¢ã¯ã»ã¹æš©ã®åé¡ãŸãã¯ãã®ä»ã®åé¡ã®ãã)ããã¡ã€ã«ã¯ãªãã¬ãŒãã£ã³ã°ã»ã·ã¹ãã ã®äžæãã£ã¬ã¯ããªã«äœæãããŸãã äžæãã£ã¬ã¯ããªã¯ãTMPç°å¢å€æ°ã®å€ã§æå®ãããŸãããã®ç°å¢å€æ°ãå®çŸ©ãããŠããªãå Žåã¯ãTEMPç°å¢å€æ°ã®å€ã䜿çšãããŸãã
æ°ããåãã§ãã«ãŒã倱æããå Žåã«ãå€ãããªãã¡ã€ã¢ãžã®èªåãã§ãŒã«ãªãŒããŒãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããæè¿ã®ãã€ãã³ãŒãã»ããŒãžã§ã³ã®ã¯ã©ã¹ã«å¯ŸããŠãããç¡èŠãããŸã(ã€ãŸããç¡å¹ãšããŠæ±ããã)ã å€ãããŒãžã§ã³ã®ãã€ãã³ãŒãã®ã¯ã©ã¹ã«å¯ŸããŠãããæå¹ã«ã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³å®è¡æã®Java Flight Recorder (JFR)ã®äœ¿çšãæå¹ã«ããŸãã ããã¯ã次ã®ããã«ã-XX:+UnlockCommercialFeaturesãªãã·ã§ã³ãšãšãã«åäœããåçšæ©èœã§ã:
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
ãã®ãªãã·ã§ã³ãæå®ããªãå Žåãé©åãªjcmd蚺æã³ãã³ãã䜿çšããããšã§ãå®è¡äžã®JVMã§Java Flight Recorderãæå¹åããããšãã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³å®è¡æã®Java Flight Recorder (JFR)ã®äœ¿çšãç¡å¹ã«ããŸãã ããã¯ã次ã®ããã«ã-XX:+UnlockCommercialFeaturesãªãã·ã§ã³ãšãšãã«åäœããåçšæ©èœã§ã:
java -XX:+UnlockCommercialFeatures -XX:-FlightRecorder
ãã®ãªãã·ã§ã³ãæå®ããå Žåãå®è¡äžã®JVMã§Java Flight Recorderãæå¹åããããšã¯ã§ããŸããã
JFRã®åäœãå¶åŸ¡ãããã©ã¡ãŒã¿ãèšå®ããŸãã ããã¯ã-XX:+UnlockCommercialFeaturesãªãã·ã§ã³ãšãšãã«åäœããåçšæ©èœã§ã: ãã®ãªãã·ã§ã³ã¯ãJFRãæå¹ã«ãªã£ãŠãã(ã€ãŸãã-XX:+FlightRecorderãªãã·ã§ã³ãæå®ãããŠãã)å Žåã«ã®ã¿äœ¿çšã§ããŸãã
次ã®ãªã¹ãã«ã¯ã䜿çšå¯èœãªãã¹ãŠã®JFRãã©ã¡ãŒã¿ãå«ãŸããŠããŸãã
Javaã¢ããªã±ãŒã·ã§ã³ã§ãããã©ã«ããé£ç¶ã¬ã³ãŒãã£ã³ã°ãéå§ãããã©ãããæå®ããŸãã ããã©ã«ãã§ã¯ããã®ãã©ã¡ãŒã¿ã¯falseã«èšå®ãããŠããŸãã ããã©ã«ãã®ã¬ã³ãŒãã£ã³ã°ãèªåçã«éå§ããã«ã¯ããã©ã¡ãŒã¿ãtrueã«èšå®ããŸãã
äžæããŒã¿ããã£ã¹ã¯ã»ãªããžããªã«æžã蟌ããã©ãããæå®ããŸãã ããã©ã«ãã§ã¯ããã®ãã©ã¡ãŒã¿ã¯falseã«èšå®ãããŠããŸãã æå¹ã«ããã«ã¯ããã©ã¡ãŒã¿ãtrueã«èšå®ããŸãã
å¶åŸ¡ãããæ¹æ³ã§JVMãçµäºãããšãã«ãJFRããŒã¿ã®ãã³ãã»ãã¡ã€ã«ãçæããã¹ããã©ãããæå®ããŸãã ããã©ã«ãã§ã¯ããã®ãã©ã¡ãŒã¿ã¯false (çµäºæã«ãã³ãã»ãã¡ã€ã«ãçæããªã)ã«èšå®ãããŸãã æå¹ã«ããã«ã¯ããã®ãã©ã¡ãŒã¿ãtrueã«èšå®ããåæã«defaultrecording=trueã«èšå®ããŸãã
ãã³ãã»ãã¡ã€ã«ã¯ãdumponexitpathãã©ã¡ãŒã¿ã«ãã£ãŠå®çŸ©ãããå Žæã«æžã蟌ãŸããŸãã
å¶åŸ¡ãããæ¹æ³ã§JVMãçµäºãããšã(dumponexit=trueãã©ã¡ãŒã¿ãèšå®ããå Žå)ã«äœæããããJFRããŒã¿ãå«ããã³ãã»ãã¡ã€ã«ã®ãã¹ãšååãæå®ããŸãã ãã®ãã¹ã®èšå®ã¯ãåæã«defaultrecording=trueãèšå®ããå Žåã«ã®ã¿æå¹ã§ãã
æå®ããããã¹ããã£ã¬ã¯ããªã®å ŽåãJVMã¯äœææ¥æã瀺ããã¡ã€ã«åãå²ãåœãŠãŸãã æå®ããããã¹ã«ãã¡ã€ã«åãå«ãŸããŠããããã®ãã¡ã€ã«ããã§ã«ååšããå ŽåãJVMã¯æå®ããããã¡ã€ã«åã«æ¥æã¹ã¿ã³ãã远å ããŠæ°ãããã¡ã€ã«ãäœæããŸãã
ããŒã¿ã®ä¿æã«äœ¿çšããããã©ã€ããªã»ã¡ã¢ãªãŒã®åèšé(ãã€ãåäœ)ãæå®ããŸãã Kãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯kãŸãã¯KãMãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯mãŸãã¯MãGãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯gãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ã¯ããã®ãµã€ãºã¯462848ãã€ãã«èšå®ãããŸãã
JFRã«ãã£ãŠãã°ã»ãã¡ã€ã«ã«æžã蟌ãŸããããŒã¿ã®éãæå®ããŸãã ããã©ã«ãã§ã¯ãinfoã«èšå®ãããŸãã
ããã©ã«ãã®èšé²çšã«ãã£ã¹ã¯ã»ããŒã¿ãç¶æããæå€§æéãæå®ããŸãã æéãç§ã§æå®ããããã«ã¯sãåã®å Žåã¯mãæéã®å Žåã¯hãŸãã¯æ¥ã®å Žådã远å ããŸã(ããšãã°ã30sã®æå®ã¯ã30ç§ãæå³ããŸã)ã ããã©ã«ãã§ã¯ãæå€§æéã¯15å(15m)ã«èšå®ãããŸãã
ãã®ãã©ã¡ãŒã¿ã¯ãdisk=trueãã©ã¡ãŒã¿ãèšå®ããå Žåã«ã®ã¿æå¹ã§ãã
èšé²ã®ããŒã¿ã»ãã£ã³ã¯ã®æå€§ãµã€ãº(ãã€ãåäœ)ãæå®ããŸãã Kãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯kãŸãã¯KãMãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯mãŸãã¯MãGãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯gãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ã¯ãããŒã¿ã»ãã£ã³ã¯ã®æå€§ãµã€ãºã¯12Mãã€ãã«èšå®ãããŸãã
ããã©ã«ãèšé²çšã«ç¶æãããã£ã¹ã¯ã»ããŒã¿ã®æå€§ãµã€ãº(ãã€ãåäœ)ãæå®ããŸãã Kãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯kãŸãã¯KãMãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯mãŸãã¯MãGãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯gãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ããã£ã¹ã¯ã»ããŒã¿ã®æå€§ãµã€ãºã¯ç¡å¶éã§ããã®ãã©ã¡ãŒã¿ã¯0ã«èšå®ãããŠããŸãã
ãã®ãã©ã¡ãŒã¿ã¯ãdisk=trueãã©ã¡ãŒã¿ãèšå®ããå Žåã«ã®ã¿æå¹ã§ãã
äžæãã£ã¹ã¯ã»ã¹ãã¬ãŒãžã®ãªããžããª(ãã£ã¬ã¯ããª)ãæå®ããŸãã ããã©ã«ãã§ã¯ãã·ã¹ãã ã®äžæãã£ã¬ã¯ããªã䜿çšãããŸãã
ã¹ã¬ããã»ãµã³ããªã³ã°ãæå¹ã«ãããã©ãããæå®ããŸãã ã¹ã¬ããã»ãµã³ããªã³ã°ã¯ããã®ãã©ã¡ãŒã¿ãšãšãã«ãµã³ããªã³ã°ã»ã€ãã³ããæå¹ã«ãããŠããå Žåã«ã®ã¿è¡ãããŸãã ããã©ã«ãã§ã¯ããã®ãã©ã¡ãŒã¿ã¯æå¹ã«ãªã£ãŠããŸãã
ã€ãã³ãèšå®ãã¡ã€ã«(çš®é¡ã¯JFC)ã®ãã¹ãšååãæå®ããŸãã ããã©ã«ãã§ã¯ãJAVA_HOME/jre/lib/jfrã«ããdefault.jfcãã¡ã€ã«ã䜿çšãããŸãã
JFRã«ããã¹ã¿ãã¯ã»ãã¬ãŒã¹ã®ã¹ã¿ãã¯ã®æ·±ãã ããã©ã«ãã§ã¯ããã®æ·±ãã¯64åã®ã¡ãœããåŒåºãã«èšå®ãããŸãã æå€§ã¯2048ãæå°ã¯1ã§ãã
ã¹ã¬ããããšã®ããŒã«ã«ã»ãããã¡ã»ãµã€ãº(ãã€ãåäœ)ãæå®ããŸãã Kãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯kãŸãã¯KãMãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯mãŸãã¯MãGãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯gãŸãã¯Gãä»ããŸãã ãã®ãã©ã¡ãŒã¿ã®å€ã倧ãããããšãã°ããŒãã«ã»ã¹ãã¬ãŒãžãžã®ãã©ãã·ã¥ãšç«¶åããã«ãããå€ãã®ããŒã¿ãåéã§ããŸãã ã¹ã¬ãããªããç°å¢ã§ã¢ããªã±ãŒã·ã§ã³ã»ãããããªã³ããå¢å ããå ŽåããããŸãã ããã©ã«ãã§ã¯ãããŒã«ã«ã»ãããã¡ã»ãµã€ãºã¯5Kãã€ãã«èšå®ãããŸãã
è€æ°ã®ãã©ã¡ãŒã¿ã®å€ãæå®ããã«ã¯ãããããã³ãã³ã§åºåããŸãã ããšãã°ãé£ç¶çãªèšé²ããã£ã¹ã¯ã«æžã蟌ãããã«JFRã«æç€ºããããŒã¿ã»ãã£ã³ã¯ã®æå€§ãµã€ãºã10Mãã€ãã«èšå®ããã«ã¯ã次ãæå®ããŸãã
-XX:FlightRecorderOptions=defaultrecording=true,disk=true,maxchunksize=10M
Solarisã§ã¯ãJavaããŒãã«äœ¿çšãããã©ãŒãžã»ããŒãžã®æå€§ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã sizeåŒæ°ã¯2ã®çޝä¹ã§ãªããã°ãªããŸãã(2ã4ã8ã16...)ã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ãµã€ãºã¯0ã«èšå®ãããJVMãã©ãŒãžã»ããŒãžã®ãµã€ãºãèªåçã«éžæããããšãæå³ããŸãã
次ã®äŸã§ã¯ãã©ãŒãžã»ããŒãžã»ãµã€ãºã4Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŸãã
-XX:LargePageSizeInBytes=4m
New I/O (java.nioããã±ãŒãž)ãã€ã¬ã¯ããããã¡å²åœãŠã®æå€§åèšãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ãµã€ãºã¯0ã«èšå®ãããJVMãNIOãã€ã¬ã¯ããããã¡å²åœãŠã®ãµã€ãºãèªåçã«éžæããããšãæå³ããŸãã
次ã®äŸã§ã¯ãæ§ã ãªåäœã§NIOã®ãµã€ãºã1024Kãã€ãã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:MaxDirectMemorySize=1m -XX:MaxDirectMemorySize=1024k -XX:MaxDirectMemorySize=1048576
JVMãã€ãã£ãã»ã¡ã¢ãªãŒã®äœ¿çšç¶æ³ã®è¿œè·¡ã®ã¢ãŒããæå®ããŸãã ãã®ãªãã·ã§ã³ã®modeåŒæ°ã«ã¯æ¬¡ãæå®ã§ããŸãã
JVMãã€ãã£ãã»ã¡ã¢ãªãŒã®äœ¿çšç¶æ³ã远跡ããŸããã ããã¯-XX:NativeMemoryTrackingãªãã·ã§ã³ãæå®ããªãå Žåã®ããã©ã«ãã®åäœã§ãã
JavaããŒããã¯ã©ã¹ãã³ãŒããããã³ã¹ã¬ãããªã©ã®JVMãµãã·ã¹ãã ã«ããã¡ã¢ãªãŒäœ¿çšç¶æ³ã®ã¿ã远跡ããŸãã
JVMãµãã·ã¹ãã ã«ããã¡ã¢ãªãŒäœ¿çšç¶æ³ã®è¿œè·¡ã«å ããŠãåCallSiteãåä»®æ³ã¡ã¢ãªãŒé åããã³ãã®ã³ãããæžé åã«ããã¡ã¢ãªãŒäœ¿çšç¶æ³ã远跡ããŸãã
Javaãªããžã§ã¯ãã®ã¡ã¢ãªãŒé 眮ãèšå®ããŸã(ãã€ãåäœ)ã ããã©ã«ãã§ã¯ãå€ã8ãã€ãã«èšå®ãããŸãã æå®ãããå€ã¯ã2ã®çޝä¹ã«ããŠ8ãã256(䞡端ãå«ã)ã®ç¯å²å ã«ããå¿ èŠããããŸãã ãã®ãªãã·ã§ã³ã«ããã倧ããJavaããŒãã»ãµã€ãºã§å§çž®ãã€ã³ã¿ã䜿çšã§ããŸãã
ãã€ãåäœã®ããŒãã»ãµã€ãºå¶éã¯æ¬¡ã®ããã«èšç®ãããŸã:
4GB * ObjectAlignmentInBytes
ããŒã: é 眮ã®å€ãå¢ãããšããªããžã§ã¯ãéã®æªäœ¿çšã®é åãå¢ããŸãã çµæãšããŠã倧ããããŒãã»ãµã€ãºã§å§çž®ãã€ã³ã¿ã䜿çšããã¡ãªãããããããªãå¯èœæ§ããããŸãã
å埩äžèœãªãšã©ãŒãçºçããå Žåã«å®è¡ããã«ã¹ã¿ã ã»ã³ãã³ããŸãã¯äžé£ã®ã»ãã³ãã³åºåãã®ã³ãã³ããèšå®ããŸãã æååã«ã¹ããŒã¹ãå«ãå Žåã¯ãäºéåŒçšç¬Šã§å²ãå¿ èŠããããŸãã
次ã®äŸã¯ã-XX:OnErrorãªãã·ã§ã³ã䜿çšããŠuserdump.exeãŠãŒãã£ãªãã£ãå®è¡ããå埩äžèœãªãšã©ãŒãçºçããå Žåã«ãã¯ã©ãã·ã¥ã»ãã³ããååŸããæ¹æ³ã瀺ããŠããŸã(%pã¯çŸåšã®ããã»ã¹ãæå®ããŸã)ã
-XX:OnError="userdump.exe %p"
åã®äŸã§ã¯ãuserdump.exeãŠãŒãã£ãªãã£ã®ãã¹ãPATHç°å¢å€æ°ã«æå®ãããŠããããšãåæãšããŠããŸãã
OutOfMemoryErroräŸå€ãæåã«ã¹ããŒãããå Žåã«å®è¡ããã«ã¹ã¿ã ã»ã³ãã³ããŸãã¯äžé£ã®ã»ãã³ãã³åºåãã®ã³ãã³ããèšå®ããŸãã æååã«ã¹ããŒã¹ãå«ãå Žåã¯ãäºéåŒçšç¬Šã§å²ãå¿
èŠããããŸãã ã³ãã³ãæååã®äŸã«ã€ããŠã¯ã-XX:OnErrorãªãã·ã§ã³ã®èª¬æãåç
§ããŠãã ããã
æå¹ã«ãããšãJavaã¢ããªã±ãŒã·ã§ã³ã®çµäºæã«jstat(1)ãã€ããªã»ããŒã¿ãä¿åããŸãã ãã®ãã€ããªã»ããŒã¿ã¯ãhsperfdata_<pid>ãšããååã®ãã¡ã€ã«ã«ä¿åãããŸããããã§<pid>ã¯å®è¡ããJavaã¢ããªã±ãŒã·ã§ã³ã®ããã»ã¹èå¥åã§ãã æ¬¡ã®ããã«jstatã䜿çšããŠããã®ãã¡ã€ã«ã«å«ãŸããããã©ãŒãã³ã¹ã»ããŒã¿ã衚瀺ããŸãã
jstat -class file:///<path>/hsperfdata_<pid> jstat -gc file:///<path>/hsperfdata_<pid>
ã³ãã³ãè¡ã«è¡šç€ºããããšã«ãŽããã¯ã¹ã«åŸã£ãŠéžæãããJVMãã©ã°ã®åºåãæå¹ã«ããŸãã ããã¯ãããŒãé åãµã€ãºãéžæãããã¬ããŒãžã»ã³ã¬ã¯ã¿ãªã©ã®JVMã«ãã£ãŠèšå®ããããšã«ãŽããã¯ã¹å€ãç¥ãããã«åœ¹ç«ã€å¯èœæ§ããããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããããã©ã°ã¯åºåãããŸããã
ã¡ã¢ãªãŒè¿œè·¡ãæå¹ã«ãããŠããå Žå(-XX:NativeMemoryTrackingãåç
§)ãJVMã§åéããããã€ãã£ãã»ã¡ã¢ãªãŒè¿œè·¡ããŒã¿ã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããããã€ãã£ãã»ã¡ã¢ãªãŒè¿œè·¡ããŒã¿ã¯åºåãããŸããã
ããªãã¡ã€ã¢ã®ã¢ã¯ã»ã¹å¶åŸ¡ãã§ãã¯ã®éãæžãããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããæè¿ã®ãã€ãã³ãŒãã»ããŒãžã§ã³ã®ã¯ã©ã¹ã«å¯ŸããŠãããç¡èŠãããŸã(ã€ãŸããç¡å¹ãšããŠæ±ããã)ã å€ãããŒãžã§ã³ã®ãã€ãã³ãŒãã®ã¯ã©ã¹ã«å¯ŸããŠãããæå¹ã«ã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžã«ãªãœãŒã¹ç®¡çã®äœ¿çšãæå¹ã«ããŸãã
ããã¯ã次ã®ããã«-XX:+UnlockCommercialFeaturesãªãã·ã§ã³ãåæã«æå®ããå¿
èŠãããåçšæ©èœã§ãã
java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement
ããªç§åäœã§ãªãœãŒã¹ç®¡ç枬å®ã®ãµã³ããªã³ã°ééãå¶åŸ¡ãããã©ã¡ãŒã¿ãèšå®ããŸãã
ãªãœãŒã¹ç®¡çãæå¹ãªå Žåã®ã¿(ã€ãŸãã-XX:+ResourceManagementãªãã·ã§ã³ãæå®ãããŠããå Žå)ããã®ãªãã·ã§ã³ã䜿çšã§ããŸãã
ã¯ã©ã¹ã»ããŒã¿å ±æ(CDS)ã¢ãŒã«ã€ãã»ãã¡ã€ã«ã®ãã¹ãšååãæå®ããŸã
ã¯ã©ã¹ã»ããŒã¿å
±æ(CDS)ã¢ãŒã«ã€ãã«æ ŒçŽããã¯ã©ã¹ã»ãã¡ã€ã«ã®ååãå«ãããã¹ãã»ãã¡ã€ã«ãæå®ããŸãã ãã®ãã¡ã€ã«ã¯ãã¯ã©ã¹ã»ãã¡ã€ã«ã®ãã«ã»ããŒã ã1è¡ã«1ã€å«ã¿ãŸãããã ãã¹ã©ãã·ã¥(/)ã¯ããã(.)ã«çœ®æãããŸãã ããšãã°ãã¯ã©ã¹java.lang.Objectãšhello.Mainãæå®ããã«ã¯ã次ã®2è¡ãå«ãããã¹ãã»ãã¡ã€ã«ãäœæããŸãã
java/lang/Object hello/Main
ãã®ããã¹ãã»ãã¡ã€ã«ã§æå®ããã¯ã©ã¹ã»ãã¡ã€ã«ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã§ãã䜿çšãããã¯ã©ã¹ãå«ããå¿ èŠããããŸãã ã¢ããªã±ãŒã·ã§ã³ãæ©èœæ¡åŒµãŸãã¯ããŒãã¹ãã©ããã»ã¯ã©ã¹ã»ãã¹ããã®ããããã¯ã©ã¹ãå«ãŸããå ŽåããããŸãã
JVMã§å埩äžèœãªãšã©ãŒãçºçããå Žåã«ããã€ã¢ãã°ã»ããã¯ã¹ã®è¡šç€ºãæå¹ã«ããŸãã ããã«ãããJVMã®çµäºãåé¿ããããã»ã¹ãã¢ã¯ãã£ãã«ç¶æãããããããã«ãããã¬ãæ¥ç¶ããŠããšã©ãŒã®åå ã調æ»ã§ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
Javaã¢ããªã±ãŒã·ã§ã³ã®JFRèšé²ãéå§ããŸãã ããã¯ã-XX:+UnlockCommercialFeaturesãªãã·ã§ã³ãšãšãã«åäœããåçšæ©èœã§ã: ãã®ãªãã·ã§ã³ã¯ãå®è¡æã«èšé²ãéå§ããJFR.start蚺æã³ãã³ããšåçã§ãã JFRèšé²ãéå§ãããšãã«ã次ã®ãã©ã¡ãŒã¿ãèšå®ã§ããŸãã
gzipãã¡ã€ã«å§çž®ãŠãŒãã£ãªãã£ã䜿çšããŠãã£ã¹ã¯äžã®JFRèšé²ãã°ã»ãã¡ã€ã«(çš®é¡ã¯JFR)ãå§çž®ãããã©ãããæå®ããŸãã ãã®ãã©ã¡ãŒã¿ã¯ãfilenameãã©ã¡ãŒã¿ãæå®ãããŠããå Žåã«ã®ã¿æå¹ã§ãã ããã©ã«ãã§ã¯ãfalse (èšé²ãå§çž®ããªã)ã«èšå®ãããŸãã å§çž®ãæå¹ã«ããã«ã¯ããã®ãã©ã¡ãŒã¿ãtrueã«èšå®ããŸãã
èšé²ãé£ç¶çããã¯ã°ã©ãŠã³ãèšé²ãªã®ããéãããæéã ãå®è¡ããã®ããæå®ããŸãã ããã©ã«ãã§ã¯ããã®ãã©ã¡ãŒã¿ã¯false (éãããæéã ãèšé²ãå®è¡ãã)ã«èšå®ãããŸãã èšé²ãé£ç¶çã«å®è¡ããã«ã¯ããã®ãã©ã¡ãŒã¿ãtrueã«èšå®ããŸãã
Javaã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéããèšé²ãéå§ãããŸã§ã®é
å»¶æéãæå®ããŸãã æéãç§ã§æå®ããããã«ã¯sãåã®å Žåã¯mãæéã®å Žåã¯hãŸãã¯æ¥ã®å Žåã¯dã远å ããŸã(ããšãã°ã10mã®æå®ã¯ã10åãæå³ããŸã)ã ããã©ã«ãã§ã¯ãé
å»¶ã¯ãªãããã®ãã©ã¡ãŒã¿ã¯0ã«èšå®ãããŸãã
å¶åŸ¡ãããæ¹æ³ã§JVMãçµäºãããšãã«ãJFRããŒã¿ã®ãã³ãã»ãã¡ã€ã«ãçæããã¹ããã©ãããæå®ããŸãã ããã©ã«ãã§ã¯ããã®ãã©ã¡ãŒã¿ã¯false (çµäºæã«ãã³ãã»ãã¡ã€ã«ãçæããªã)ã«èšå®ãããŸãã æå¹ã«ããã«ã¯ããã©ã¡ãŒã¿ãtrueã«èšå®ããŸãã
ãã³ãã»ãã¡ã€ã«ã¯ãfilenameãã©ã¡ãŒã¿ã§å®çŸ©ãããå Žæã«æžã蟌ãŸããŸãã
äŸ:
-XX:StartFlightRecording=name=test,filename=D:\test.jfr,dumponexit=true
èšé²ã®ç¶ç¶æéãæå®ããŸãã æéãç§ã§æå®ããããã«ã¯sãåã®å Žåã¯mãæéã®å Žåã¯hãŸãã¯æ¥ã®å Žåã¯dã远å ããŸã(ããšãã°ã5hã®æå®ã¯ã5æéãæå³ããŸã)ã ããã©ã«ãã§ãç¶ç¶æéã¯ç¡å¶éã§ããã®ãã©ã¡ãŒã¿ã¯0ã«èšå®ãããŠããŸãã
JFRèšé²ãã°ã»ãã¡ã€ã«ã®ãã¹ãšååãæå®ããŸãã
JFRèšé²ã®èå¥åãè¿ããŸãã ããã©ã«ãã§ã¯ãRecording xã«èšå®ãããŸãã
ããã©ã«ãã®èšé²çšã«ãã£ã¹ã¯ã»ããŒã¿ãç¶æããæå€§æéãæå®ããŸãã æéãç§ã§æå®ããããã«ã¯sãåã®å Žåã¯mãæéã®å Žåã¯hãŸãã¯æ¥ã®å Žådã远å ããŸã(ããšãã°ã30sã®æå®ã¯ã30ç§ãæå³ããŸã)ã ããã©ã«ãã§ã¯ãæå€§æéã¯15å(15m)ã«èšå®ãããŸãã
ããã©ã«ãèšé²çšã«ç¶æãããã£ã¹ã¯ã»ããŒã¿ã®æå€§ãµã€ãº(ãã€ãåäœ)ãæå®ããŸãã Kãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯kãŸãã¯KãMãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯mãŸãã¯MãGãã€ãåäœã®ãµã€ãºãæå®ããã«ã¯gãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ããã£ã¹ã¯ã»ããŒã¿ã®æå€§ãµã€ãºã¯ç¡å¶éã§ããã®ãã©ã¡ãŒã¿ã¯0ã«èšå®ãããŠããŸãã
ã€ãã³ãèšå®ãã¡ã€ã«(çš®é¡ã¯JFC)ã®ãã¹ãšååãæå®ããŸãã ããã©ã«ãã§ã¯ãJAVA_HOME/jre/lib/jfrã«ããdefault.jfcãã¡ã€ã«ã䜿çšãããŸãã
è€æ°ã®ãã©ã¡ãŒã¿ã®å€ãæå®ããã«ã¯ãããããã³ãã³ã§åºåããŸãã ããšãã°ãçŸåšã®äœæ¥ãã£ã¬ã¯ããªå ã®test.jfrã«èšé²ãä¿åãããã°ã»ãã¡ã€ã«ãå§çž®ããããã«JFRã«æç€ºããã«ã¯ã次ãæå®ããŸãã
-XX:StartFlightRecording=filename=test.jfr,compress=true
Javaã¹ã¬ããã®ã¹ã¿ãã¯ã»ãµã€ãº(ãããã€ãåäœ)ãèšå®ããŸãã kãªã©ã®ã¹ã±ãŒãªã³ã°æ¥å°ŸèŸã䜿çšãããšãKãã€ãå€ãã¹ã±ãŒãªã³ã°ãããŸãã ããšãã°ã-XX:ThreadStackSize=1kã¯ãJavaã¹ã¬ããã»ã¹ã¿ãã¯ã»ãµã€ãºã1024*1024ãã€ããŸãã¯1MBã«èšå®ããŸãã ããã©ã«ãå€ã¯ãä»®æ³ã¡ã¢ãªãŒã«ãã£ãŠç°ãªããŸãã
次ã®äŸã§ã¯ãæ§ã ãªåäœã§ã¹ã¬ããã»ã¹ã¿ãã¯ã®ãµã€ãºã1024Kãã€ãã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:ThreadStackSize=1k -XX:ThreadStackSize=1024
ãã®ãªãã·ã§ã³ã¯-Xssãšåçã§ãã
ããŒã: ã·ã¹ãã ã»ããã©ã«ãã䜿çšãããšãThreadStackSizeå€ã¯ãWindowsã®ãã¹ãŠã®JavaããŒãžã§ã³ã«ããã-XX:+PrintFlagsFinalåºåã§0ãšããŠè¡šç€ºãããŸãã ããã¯ãŒãã»ã¹ã¿ãã¯ã»ãµã€ãºã瀺ãã®ã§ã¯ãªããjava.exeããŒã¿ãã«å®è¡å¯èœãã¡ã€ã«(PE)ããããŒã«åºã¥ããŠå®è¡æã«æ±ºå®ããããªãã¬ãŒãã£ã³ã°ã»ã·ã¹ãã ã®ããã©ã«ãã«JVMãé
å»¶ããããšãæå³ããŸãã ãã®ããã©ã«ãã¯ã32ãã€ãã·ã¹ãã ã§ã¯320Kãã€ãã64ãããã·ã¹ãã ã§ã¯1Mãã€ãã§ãã ãã®ãªãã·ã§ã³ã䜿çšããŠThreadStackSizeãæç€ºçã«èšå®ãããšãæå®ãããå€ã-XX:+PrintFlagsFinalåºåã«åæ ãããŸãã Windowsã®ããŒãžã§ã³ã«ãã£ãŠã¯ãThreadStackSizeããŒã以å€ã®å€ã«å€æŽãããšãã¡ã¢ãªãŒäœ¿çšéã«å€§ããªåœ±é¿ãäžããå ŽåããããŸãã
ã¯ã©ã¹ãããŒãããããšãã«ããããã®è¿œè·¡ãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããã¯ã©ã¹ã¯è¿œè·¡ãããŸããã
ããŒãããããã¹ãŠã®ã¯ã©ã¹ã®è¿œè·¡ãããããåç §ãããé çªã§æå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããã¯ã©ã¹ã¯è¿œè·¡ãããŸããã
宿°ããŒã«ã®è§£æ±ºã®è¿œè·¡ãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããã宿°ããŒã«ã®è§£æ±ºã¯è¿œè·¡ãããŸããã
ã¯ã©ã¹ãã¢ã³ããŒãããããšãã«ããããã®è¿œè·¡ãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããã¯ã©ã¹ã¯è¿œè·¡ãããŸããã
ããŒããŒã®å¶çŽã®èšé²ã®è¿œè·¡ãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã§ãããããŒããŒå¶çŽã®èšé²ã¯è¿œè·¡ãããŸããã
åçšæ©èœã®äœ¿çšãæå¹ã«ããŸãã åçšæ©èœã¯ãhttp://www.oracle.com/technetwork/java/javase/terms/products/index.htmlã®Java SE補åã®ããŒãžã§å®çŸ©ãããŠããOracle Java SE AdvancedãŸãã¯Oracle Java SE Suiteããã±ãŒãžã«å«ãŸããŠããŸãã
ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããJVMã¯åçšæ©èœãªãã§å®è¡ããŸãã JVMããã»ã¹ã§ããããæå¹ã«ãããšããã®ããã»ã¹ã§ã®ãããã®äœ¿çšãç¡å¹ã«ããããšã¯ã§ããŸããã
ãã®ãªãã·ã§ã³ãæå®ããªãå Žåãé©åãªjcmd蚺æã³ãã³ãã䜿çšããããšã§ããå®è¡äžã®JVMã§åçšæ©èœã®ããã¯ãè§£é€ã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã»ã¯ã©ã¹ã»ããŒã¿å
±æ(AppCDS)ãæå¹åããŸãã AppCDSã䜿çšããã«ã¯ãCDSãã³ãæå»(ãªãã·ã§ã³-Xshare:dumpãåç
§)ãšã¢ããªã±ãŒã·ã§ã³å®è¡æå»ã®éã«ããªãã·ã§ã³-XX:SharedClassListFileããã³-XX:SharedArchiveFileã®å€ãæå®ããå¿
èŠããããŸãã
ããã¯ã-XX:+UnlockCommercialFeaturesãªãã·ã§ã³ãåæã«æå®ããå¿
èŠãããåçšæ©èœã§ãã ããã¯å®éšçãªæ©èœã§ããããä»åŸã®ãªãªãŒã¹ã§å€æŽãããå ŽåããããŸãã
åç §ããŠãã ããã
ãã€ã¢ã¹ã»ããã¯ã®äœ¿çšãç¡å¹ã«ããŸãã 倧éã®éç«¶ååæãè¡ãã¢ããªã±ãŒã·ã§ã³ã¯ããã®ãã©ã°ãæå¹ã«ããããšã§å€§å¹
ãªé«éåãå®çŸãããããšããããŸãããç¹å®ã®ãã¿ãŒã³ã®ããã¯ãè¡ãã¢ããªã±ãŒã·ã§ã³ã¯é床ãäœäžããããšããããŸãã Biased Lockingææ³ã®è©³çްã¯ãhttp://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5ã®Javaã®ãã¥ãŒãã³ã°ã«é¢ãããã¯ã€ãã»ããŒããŒã®äŸãåç
§ããŠãã ããã
ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ãæå¹ã«ãªã£ãŠããŸãã
å§çž®ããããã€ã³ã¿ã®äœ¿çšãç¡å¹ã«ããŸãã ããã©ã«ãã§ã¯ãã®ãªãã·ã§ã³ãæå¹ã§ãããJavaããŒãã»ãµã€ãºã32GBããå°ããå Žåã«å§çž®ãã€ã³ã¿ã䜿çšãããŸãã ãã®ãªãã·ã§ã³ãæå¹ã«ãããŠããå Žåããªããžã§ã¯ãåç §ã¯64ãããã»ãã€ã³ã¿ã®ä»£ããã«32ãããã®ãªãã»ããã§è¡šãããã¢ããªã±ãŒã·ã§ã³ã32GBæªæºã®JavaããŒãã»ãµã€ãºã§å®è¡ããŠããå Žåã«ãäžè¬ã«ããã©ãŒãã³ã¹ãåäžããŸãã ãã®ãªãã·ã§ã³ã¯64ãããJVMã®å Žåã«ã®ã¿æ©èœããŸãã
JavaããŒãã»ãµã€ãºã32GBãã倧ããå Žåã«ãå§çž®ãã€ã³ã¿ã䜿çšã§ããŸãã -XX:ObjectAlignmentInBytesãªãã·ã§ã³ãåç
§ããŠãã ããã
ã©ãŒãžã»ããŒãžã»ã¡ã¢ãªãŒã®äœ¿çšãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããã©ãŒãžã»ããŒãžã»ã¡ã¢ãªãŒã¯äœ¿çšãããŸããã
詳现ã¯ããã©ãŒãžã»ããŒãžããåç §ããŠãã ããã
ã¹ã¬ããç¶æ ã®é·ç§»æã«ã¡ã³ããŒã®çºè¡ãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãæå¹ã«ãªã£ãŠããARMãµãŒããŒãé€ããã¹ãŠã®ãã©ãããã©ãŒã äžã§ãããã©ã«ãã§ã¯ç¡å¹ã«ãªã£ãŠããŸãã (ARMãµãŒããŒã§ãã®ãªãã·ã§ã³ãç¡å¹ã«ããªãããšããèŠãããŸãã)
perfdataæ©èœãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ããã©ã«ãã§æå¹ã«ãããŠãããJVMã®ã¢ãã¿ãªã³ã°ãšããã©ãŒãã³ã¹ã®ãã¹ããèš±å¯ãããŸãã ãããç¡å¹ã«ãããšãhsperfdata_useridãã£ã¬ã¯ããªã®äœæãæå¶ãããŸãã perfdataæ©èœãç¡å¹ã«ããã«ã¯ã-XX:-UsePerfDataãæå®ããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã·ã°ãã«ã»ãã³ãã©ãã€ã³ã¹ããŒã«ã§ããããã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããã¢ããªã±ãŒã·ã§ã³ã¯ã·ã°ãã«ã»ãã³ãã©ãã€ã³ã¹ããŒã«ã§ããŸããã
ãããã®ãªãã·ã§ã³ã¯Java HotSpot VMã«ãã£ãŠå®è¡ãããJust-in-Time (JIT)åçã³ã³ãã€ã«ãå¶åŸ¡ããŸãã
å°æ¥ã®ãªãªãŒã¹ã§ããã©ã«ãã«ãªãããšãäºæ³ãããç©æ¥µçãªããã©ãŒãã³ã¹æé©åæ©èœã®äœ¿çšãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããã詊éšçããã©ãŒãã³ã¹æ©èœã¯äœ¿çšãããŸããã
ã€ã³ã¹ã¿ã³ã¹å²åœãŠãã€ã³ã¿ã®åã«ããªãã§ããããè¡æ°ãèšå®ããŸãã ããã©ã«ãã§ããªãã§ããããè¡æ°ã¯1ã«èšå®ãããŠããŸãã
-XX:AllocateInstancePrefetchLines=1
Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
ãªããžã§ã¯ãå²åœãŠã®ããªãã§ããè·é¢ã®ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã æ°ãããªããžã§ã¯ãã®å€ã§æžã蟌ãŸããããšããŠããã¡ã¢ãªãŒããæåŸã«å²ãåœãŠããããªããžã§ã¯ãã®ã¢ãã¬ã¹ãããã®è·é¢ãŸã§ãããªãã§ãããããŸãã åJavaã¹ã¬ããã¯ç¬èªã®å²åœãŠãã€ã³ãããããŸãã
ãã€ãã¹ã®å€ã¯ãããªãã§ããè·é¢ããã©ãããã©ãŒã ã«åºã¥ããŠéžæãããããšã瀺ããŸãã ãã©ã¹ã®å€ã¯ããªãã§ãããããã€ãã§ãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãå€ã¯-1ã«èšå®ãããŸãã
次ã®äŸã¯ãããªãã§ããè·é¢ã1024ãã€ãã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:AllocatePrefetchDistance=1024
Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
å²åœãŠãã€ã³ã¿ã®åã«ããªãã§ããããããªãã§ããåœä»€ãèšå®ããŸãã Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã æå®å¯èœãªå€ã¯0ãã3ã§ãã å€ã®èåŸã«ããå®éã®åœä»€ã¯ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªããŸãã ããã©ã«ãã§ãããªãã§ããåœä»€ã¯0ã«èšå®ãããŸãã
-XX:AllocatePrefetchInstr=0
Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
ã³ã³ãã€ã«æžã³ãŒãã§çæãããããªãã§ããåœä»€ã䜿çšããŠãæåŸã®ãªããžã§ã¯ãã®å²åœãŠåŸã«ããŒãããããã£ãã·ã¥è¡æ°ãèšå®ããŸãã ããã©ã«ãå€ã¯ãæåŸã«å²ãåœãŠããããªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹ã®å Žåã¯1ã§ãé åã®å Žåã¯3ã«ãªããŸãã
次ã®äŸã¯ãããŒãããããã£ãã·ã¥è¡æ°ã5ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:AllocatePrefetchLines=5
Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
é£ç¶ããããªãã§ããåœä»€ã®ã¹ãããã»ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ã¯ãã¹ãããã»ãµã€ãºã¯16ãã€ãã«èšå®ãããŸãã
-XX:AllocatePrefetchStepSize=16
Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
ããªãã§ããåœä»€ã®çæãããã³ãŒãã»ã¹ã¿ã€ã«ãèšå®ããŸãã styleåŒæ°ã¯0ãã3ã®æŽæ°ã§ãã
ããªãã§ããåœä»€ãçæããŸããã
åå²åœãŠåŸã«ããªãã§ããåœä»€ãå®è¡ããŸãã ããã¯ããã©ã«ãã®ãã©ã¡ãŒã¿ã§ãã
ã¹ã¬ããããŒã«ã«å²åœãŠãããã¯(TLAB)ãŠã©ãŒã¿ãŒããŒã¯ã»ãã€ã³ã¿ã䜿çšããŠãããªãã§ããåœä»€ãå®è¡ããã¿ã€ãã³ã°ã決å®ããŸãã
SPARCã§å²åœãŠããªãã§ããã«ã¯BISåœä»€ã䜿çšããŸãã
Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
ããã¯ã°ã©ãŠã³ãã»ã³ã³ãã€ã«ãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã ããã¯ã°ã©ãŠã³ãã»ã³ã³ãã€ã«ãç¡å¹ã«ããã«ã¯ã-XX:-BackgroundCompilationãæå®ããŸã(ããã¯-Xbatchãæå®ããã®ãšåçã§ã)ã
ã³ã³ãã€ã«ã«äœ¿çšããã³ã³ãã€ã©ã»ã¹ã¬ããæ°ãèšå®ããŸãã ããã©ã«ãã§ãã¹ã¬ããæ°ã¯ãµãŒããŒJVMã®å Žåã«2ã«èšå®ãããã¯ã©ã€ã¢ã³ãJVMã®å Žåã«1ã«èšå®ãããéå±€åã³ã³ãã€ã«ã䜿çšãããå Žåã¯ã³ã¢æ°ãŸã§æ¡å€§ãããŸãã æ¬¡ã®äŸã¯ãã¹ã¬ããæ°ã2ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:CICompilerCount=2
ã³ã³ãã€ã«ã«å¿
èŠãªæå°ç©ºãé å(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã æ®ããæå°ç©ºãé åããå°ãªããªããšãã³ã³ãã€ã«ã¯åæ¢ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯500Kãã€ãã«èšå®ãããŸãã æ¬¡ã®äŸã¯ãæå°ç©ºãé åã1024Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:CodeCacheMinimumFreeSpace=1024m
ã¡ãœããã§å®è¡ããã³ãã³ããæå®ããŸãã ããšãã°ãStringã¯ã©ã¹ã®indexOf()ã¡ãœãããã³ã³ãã€ã«ããé€å€ããã«ã¯ã次ã䜿çšããŸãã
-XX:CompileCommand=exclude,java/lang/String.indexOf
ã¹ã©ãã·ã¥(/)ã§åºåããããã¹ãŠã®ããã±ãŒãžãšãµãããã±ãŒãžãå«ãå®å
šã¯ã©ã¹åãæå®ããããšã«æ³šæããŠãã ããã ååãããã³è²Œä»ãæäœãç°¡åã«ããããã-XX:+PrintCompilationããã³-XX:+LogCompilationãªãã·ã§ã³ã«ãã£ãŠçæãããã¡ãœããå圢åŒã䜿çšããããšãã§ããŸãã
-XX:CompileCommand=exclude,java.lang.String::indexOf
ã¡ãœããã眲åãªãã§æå®ããå Žåãã³ãã³ãã¯æå®ããååãæã€ãã¹ãŠã®ã¡ãœããã«é©çšãããŸãã ãã ããã¯ã©ã¹ã»ãã¡ã€ã«åœ¢åŒã§ã¡ãœããã®çœ²åãæå®ããããšãã§ããŸãã ãã®å ŽåãåŒæ°ãåŒçšç¬Šã§å²ãã§ãã ãããããããªããšãã·ã§ã«ã§ã¯ã»ãã³ãã³ãã³ãã³ãã®çµäºãšããŠæ±ããŸãã ããšãã°ãStringã¯ã©ã¹ã®indexOf(String)ã¡ãœããã®ã¿ãã³ã³ãã€ã«ããé€å€ããå Žåã¯ã次ã䜿çšããŸãã
-XX:CompileCommand="exclude,java/lang/String.indexOf,(Ljava/lang/String;)I"
ã¯ã©ã¹ããã³ã¡ãœããåã«ã¯ã€ã«ãã«ãŒããšããŠã¢ã¹ã¿ãªã¹ã¯(*)ã䜿çšããããšãã§ããŸãã ããšãã°ããã¹ãŠã®ã¯ã©ã¹ã®ãã¹ãŠã®indexOf()ã¡ãœãããã³ã³ãã€ã«ããé€å€ããã«ã¯ã次ã䜿çšããŸãã
-XX:CompileCommand=exclude,*.indexOf
ã«ã³ããšããªãªãã¯ã¹ããŒã¹ã®å¥åã§ãã·ã§ã«çµç±ã§ã³ã³ãã€ã©ã»ã³ãã³ããç°¡åã«æž¡ããããã«ãªããŸãã åŒæ°ãåŒçšç¬Šã§å²ãã§ãã»ãã¬ãŒã¿ãšããŠã¹ããŒã¹ã䜿çšããŠã-XX:CompileCommandã«åŒæ°ãæž¡ãããšãã§ããŸãã
-XX:CompileCommand="exclude java/lang/String indexOf"
-XX:CompileCommandãªãã·ã§ã³ã䜿çšããŠãã³ãã³ãè¡ã«æž¡ãããã³ãã³ããè§£æããããšãJITã³ã³ãã€ã©ã¯.hotspot_compilerãã¡ã€ã«ããã³ãã³ããèªã¿åããŸãã ãã®ãã¡ã€ã«ã«ã³ãã³ãã远å ãããã-XX:CompileCommandFileãªãã·ã§ã³ã䜿çšããŠå¥ã®ãã¡ã€ã«ãæå®ã§ããŸãã
è€æ°ã®ã³ãã³ãã远å ããã«ã¯ã-XX:CompileCommandãªãã·ã§ã³ãè€æ°åæå®ããããååŒæ°ãæ¹è¡ã»ãã¬ãŒã¿(\n)ã§åºåããŸãã æ¬¡ã®ã³ãã³ãã䜿çšã§ããŸãã
ãããã°æã«æå®ããã¡ãœããã®ã³ã³ãã€ã«ã®éå§æã«JVMã忢ãããã¬ãŒã¯ãã€ã³ããèšå®ããŸãã
æå®ããã¡ãœãããé€ããã¹ãŠã®ã¡ãœãããã³ã³ãã€ã«ããé€å€ããŸãã ãããã«ã-XX:CompileOnlyãªãã·ã§ã³ã䜿çšã§ããããã«ããè€æ°ã®ã¡ãœãããæå®ã§ããŸãã
æå®ããã¡ãœããã®ã€ã³ã©ã€ã³åã劚ããŸãã
æå®ããã¡ãœãããã³ã³ãã€ã«ããé€å€ããŸãã
-XX:CompileCommandãªãã·ã§ã³ã®ãã«ãã»ã¡ãã»ãŒãžãåºåããŸãã
æå®ããã¡ãœããã®ã€ã³ã©ã€ã³åã詊ã¿ãŸãã
æå®ããã¡ãœãããé€ããã¹ãŠã®ã¡ãœããã®ã³ã³ãã€ã«ã®ãã®ã³ã°ãé€å€ããŸã(-XX:+LogCompilationãªãã·ã§ã³ã䜿çšããŠ)ã ããã©ã«ãã§ããã®ã³ã°ã¯ãã¹ãŠã®ã³ã³ãã€ã«æžã¡ãœããã«å¯ŸããŠå®è¡ãããŸãã
ãã®ã³ãã³ãã¯ãæåŸã®åŒæ°(option)ã®ä»£ããã«ãæå®ããã¡ãœããã«JITã³ã³ãã€ã«ã»ãªãã·ã§ã³ãæž¡ãããã«äœ¿çšã§ããŸãã ãã®ã³ã³ãã€ã«ã»ãªãã·ã§ã³ã¯ãã¡ãœããåã®åŸã®æåŸã«èšå®ããŸãã ããšãã°ãStringBufferã¯ã©ã¹ã®append()ã¡ãœããã®BlockLayoutByFrequencyãªãã·ã§ã³ãæå¹ã«ããã«ã¯ã次ã䜿çšããŸãã
-XX:CompileCommand=option,java/lang/StringBuffer.append,BlockLayoutByFrequency
ã«ã³ããŸãã¯ã¹ããŒã¹ã§åºåã£ãè€æ°ã®ã³ã³ãã€ã«ã»ãªãã·ã§ã³ãæå®ã§ããŸãã
æå®ããã¡ãœããã®ã³ã³ãã€ã«åŸã«çæãããã¢ã»ã³ãã©ã»ã³ãŒããåºåããŸãã
ã³ã³ãã€ã«ã»ã³ãã³ããåºåããŸããã ããã©ã«ãã§ã-XX:CompileCommandãªãã·ã§ã³ã§æå®ããã³ãã³ããåºåãããŸããããšãã°ãStringã¯ã©ã¹ã®indexOf()ã¡ãœãããã³ã³ãã€ã«ããé€å€ããå Žåã¯ãæ¬¡ãæšæºåºåã«åºåãããŸãã
CompilerOracle: exclude java/lang/String.indexOf
ãããæå¶ããã«ã¯ãä»ã®-XX:CompileCommandãªãã·ã§ã³ã®åã«-XX:CompileCommand=quietãªãã·ã§ã³ãæå®ããŸãã
JITã³ã³ãã€ã©ã»ã³ãã³ããèªã¿åããããã¡ã€ã«ãèšå®ããŸãã ããã©ã«ãã§ã.hotspot_compilerãã¡ã€ã«ã¯ãJITã³ã³ãã€ã©ã«ãã£ãŠå®è¡ãããã³ãã³ããæ ŒçŽããããã«äœ¿çšãããŸãã
ã³ãã³ãã»ãã¡ã€ã«ã®åè¡ã¯ãã³ãã³ããã¯ã©ã¹åãããã³ã³ãã³ãã䜿çšãããã¡ãœããåã衚ããŸãã ããšãã°ããã®è¡ã¯ãStringã¯ã©ã¹ã®toString()ã¡ãœããã®ã¢ã»ã³ããªã»ã³ãŒããåºåããŸãã
print java/lang/String toString
ã¡ãœããã§å®è¡ããJITã³ã³ãã€ã©ã®ã³ãã³ããæå®ãã詳现ã«ã€ããŠã¯ã-XX:CompileCommandãªãã·ã§ã³ãåç
§ããŠãã ããã
ã³ã³ãã€ã«ãå¶éãã¹ãã¡ãœããã®ãªã¹ã(ã«ã³ãåºåã)ãèšå®ããŸãã æå®ããã¡ãœããã®ã¿ãã³ã³ãã€ã«ããŸãã ããã±ãŒãžãšãµãããã±ãŒãžãå«ãå®å
šã¯ã©ã¹åã§åã¡ãœãããæå®ããŸãã ããšãã°ãStringã¯ã©ã¹ã®length()ã¡ãœãããšListã¯ã©ã¹ã®size()ã¡ãœããã®ã¿ãã³ã³ãã€ã«ããã«ã¯ã次ã䜿çšããŸãã
-XX:CompileOnly=java/lang/String.length,java/util/List.size
ã¹ã©ãã·ã¥(/)ã§åºåããããã¹ãŠã®ããã±ãŒãžãšãµãããã±ãŒãžãå«ãå®å
šã¯ã©ã¹åãæå®ããããšã«æ³šæããŠãã ããã ååãããã³è²Œä»ãæäœãç°¡åã«ããããã-XX:+PrintCompilationããã³-XX:+LogCompilationãªãã·ã§ã³ã«ãã£ãŠçæãããã¡ãœããå圢åŒã䜿çšããããšãã§ããŸãã
-XX:CompileOnly=java.lang.String::length,java.util.List::size
ã¯ã€ã«ãã«ãŒãã¯ãµããŒããããŠããŸããããã¯ã©ã¹ãŸãã¯ããã±ãŒãžåã®ã¿ãæå®ããŠããã®ã¯ã©ã¹ãŸãã¯ããã±ãŒãžå ã®ãã¹ãŠã®ã¡ãœãããã³ã³ãã€ã«ããããšããã¡ãœããã®ã¿ãæå®ããŠããããã®ã¯ã©ã¹å ã®ãã®ååãæã€ã¡ãœãããã³ã³ãã€ã«ããããšãã§ããŸãã
-XX:CompileOnly=java/lang/String -XX:CompileOnly=java/lang -XX:CompileOnly=.length
ã³ã³ãã€ã«åã«è§£æå¯Ÿè±¡ã¡ãœããã®åŒåºãã®æ°ãèšå®ããŸãã ããã©ã«ãã§ããµãŒããŒJVMã§ã¯ãJITã³ã³ãã€ã©ã¯10,000åã®è§£æå¯Ÿè±¡ã¡ãœããã®åŒåºããå®è¡ããŠãå¹ççãªã³ã³ãã€ã«ã®ããã®æ
å ±ãåéããŸãã ã¯ã©ã€ã¢ã³ãJVMã®å Žåãããã©ã«ãã®èšå®ã¯1,500åã®åŒåºãã§ãã å±€ã³ã³ãã€ã«ãæå¹ãªå Žåããã®ãªãã·ã§ã³ã¯ç¡èŠãããŸãããªãã·ã§ã³-XX:+TieredCompilationãåç
§ããŠãã ããã æ¬¡ã®äŸã¯ãè§£æå¯Ÿè±¡ã¡ãœããã®åŒåºãæ°ã5,000ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:CompileThreshold=5000
-Xcompãªãã·ã§ã³ãæå®ããŠãã³ã³ãã€ã«åã«Javaã¡ãœããã®è§£æãå®å
šã«ç¡å¹ã«ã§ããŸãã
ãšã¹ã±ãŒãè§£æã®äœ¿çšãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã ãšã¹ã±ãŒãè§£æã®äœ¿çšãç¡å¹ã«ããã«ã¯-XX:-DoEscapeAnalysisãæå®ããŸãã Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
åæã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãå€ã¯500Kãã€ãã«èšå®ãããŸãã åæã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãºãã·ã¹ãã ã®æå°ã¡ã¢ãªãŒã»ããŒãžã»ãµã€ãºããå°ããããªãã§ãã ããã æ¬¡ã®äŸã¯ãåæã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãºã32Kãã€ãã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:InitialCodeCacheSize=32k
ã¡ãœããã®ã€ã³ã©ã€ã³åãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ãŒãã³ã¹åäžã®ãããããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã ã¡ãœããã®ã€ã³ã©ã€ã³åãç¡å¹ã«ããã«ã¯ã-XX:-Inlineãæå®ããŸãã
ã€ã³ã©ã€ã³åãã¹ãã³ã³ãã€ã«æžã¡ãœããã®æå€§ã³ãŒãã»ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã æå®ãããµã€ãºããå°ãããµã€ãºãæã€ã³ã³ãã€ã«æžã¡ãœããã®ã¿ãã€ã³ã©ã€ã³åãããŸãã ããã©ã«ãã§ã¯ãæå€§ã³ãŒãã»ãµã€ãºã¯1000ãã€ãã«èšå®ãããŸãã
-XX:InlineSmallCode=1000
çŸåšã®äœæ¥ãã£ã¬ã¯ããªå
ã®hotspot.logãšãããã¡ã€ã«ãžã®ã³ã³ãã€ã«ã»ã¢ã¯ãã£ããã£ã®ãã®ã³ã°ãæå¹ã«ããŸãã -XX:LogFileãªãã·ã§ã³ã䜿çšããŠãå¥ã®ãã°ã»ãã¡ã€ã«ã»ãã¹ãšååãæå®ã§ããŸãã
ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããã³ã³ãã€ã«ã»ã¢ã¯ãã£ããã£ã¯ãã°ã«èšé²ãããŸããã -XX:+LogCompilationãªãã·ã§ã³ã¯ã蚺æJVMãªãã·ã§ã³ã®ããã¯ãè§£é€ãã-XX:+UnlockDiagnosticVMOptionsãªãã·ã§ã³ãšãšãã«äœ¿çšããå¿
èŠããããŸãã
-XX:+PrintCompilationãªãã·ã§ã³ã䜿çšããŠãã¡ãœãããã³ã³ãã€ã«ããããã³ã«ãã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžãåºåããã詳现蚺æåºåãæå¹ã«ã§ããŸãã
ã€ã³ã©ã€ã³ããã¡ãœããã®æå€§ãã€ãã³ãŒãã»ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ã¯ãæå€§ãã€ãã³ãŒãã»ãµã€ãºã¯35ãã€ãã«èšå®ãããŸãã
-XX:MaxInlineSize=35
åäžã®ã¡ãœããã®ã³ã³ãã€ã«æã«äœ¿çšãããããŒãã®æå€§æ°ãèšå®ããŸãã ããã©ã«ãã§ã¯ãããŒãã®æå€§æ°ã¯65,000ã«èšå®ãããŸãã
-XX:MaxNodeLimit=65000
ã€ã³ã©ã€ã³åããç°¡æã¡ãœããã®æå€§ãã€ãã³ãŒãã»ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãã§ã¯ãç°¡æã¡ãœããã®æå€§ãã€ãã³ãŒãã»ãµã€ãºã¯6ãã€ãã«èšå®ãããŸãã
-XX:MaxTrivialSize=6
Stringé£çµæäœã®æé©åãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã Stringé£çµæäœã®æé©åãæå¹ã«ããã«ã¯ã-XX:-OptimizeStringConcatãæå®ããŸãã Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
å€éšdisassembler.soã©ã€ãã©ãªã䜿çšããŠããã€ãã»ã³ãŒãåãããã¡ãœããããã³ãã€ãã£ãã»ã¡ãœããçšã®ã¢ã»ã³ããªã»ã³ãŒãã®åºåãæå¹ã«ããŸãã ããã«ãããçæãããã³ãŒãã衚瀺ã§ãããããããã©ãŒãã³ã¹åé¡ã®èšºæã«åœ¹ç«ã€ããšããããŸãã
ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããã¢ã»ã³ããªã»ã³ãŒãã¯åºåãããŸããã -XX:+PrintAssemblyãªãã·ã§ã³ã¯ã蚺æJVMãªãã·ã§ã³ã®ããã¯ãè§£é€ãã-XX:+UnlockDiagnosticVMOptionsãªãã·ã§ã³ãšãšãã«äœ¿çšããå¿
èŠããããŸãã
ã¡ãœãããã³ã³ãã€ã«ããããã³ã«ãã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžãåºåããããšã«ãã£ãŠãJVMããã®è©³çŽ°èšºæåºåãæå¹ã«ããŸãã ããã«ãããå®éã«ã³ã³ãã€ã«ãããã¡ãœããã確èªã§ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããã蚺æåºåã¯åºåãããŸããã
-XX:+LogCompilationãªãã·ã§ã³ã䜿çšããŠãã³ã³ãã€ã«ã»ã¢ã¯ãã£ããã£ããã¡ã€ã«ã«èšé²ããããšãã§ããŸãã
ã€ã³ã©ã€ã³åã®åºåã®æ±ºå®ãæå¹ã«ããŸãã ããã«ãããã€ã³ã©ã€ã³åãããã¡ãœããã確èªã§ããŸãã
ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããã€ã³ã©ã€ã³åæ
å ±ã¯åºåãããŸããã -XX:+PrintInliningãªãã·ã§ã³ã¯ã蚺æJVMãªãã·ã§ã³ã®ããã¯ãè§£é€ãã-XX:UnlockDiagnosticVMOptionsãªãã·ã§ã³ãšäžç·ã«äœ¿çšããå¿
èŠããããŸãã
JITã§ã³ã³ãã€ã«ãããã³ãŒãã®æå€§ã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãã®æå€§ã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãºã¯240MBã§ãããªãã·ã§ã³-XX:-TieredCompilationã䜿çšããŠéå±€åã³ã³ãã€ã«ãç¡å¹ã«ããå Žåãããã©ã«ãã®ãµã€ãºã¯48MBã§ãã ãã®ãªãã·ã§ã³ã¯2GBã®å¶éããããŸããããã§ãªãå Žåã¯ããšã©ãŒãçæãããŸãã æå€§ã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãºãåæã³ãŒãã»ãã£ãã·ã¥ã»ãµã€ãºããå°ããããªãã§ãã ããã-XX:InitialCodeCacheSizeãªãã·ã§ã³ãåç
§ããŠãã ããã ãã®ãªãã·ã§ã³ã¯-Xmaxjitcodesizeãšåçã§ãã
RTMäžæ¢çã¯ããã¹ãŠã®å®è¡æžRTMãã©ã³ã¶ã¯ã·ã§ã³ã«å¯ŸããããŒã»ã³ããŒãž(%)ãšããŠæå®ãããŸãã äžæ¢ããããã©ã³ã¶ã¯ã·ã§ã³æ°ããã®çãè¶
ããå Žåãã³ã³ãã€ã«ãããã³ãŒããéæé©åãããŸãã ãã®çã¯ã-XX:+UseRTMDeoptãªãã·ã§ã³ãæå¹ãªå Žåã«äœ¿çšãããŸãã ãã®ãªãã·ã§ã³ã®ããã©ã«ãå€ã¯50ã§ãã ã€ãŸãããã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ã®50%ãäžæ¢ãããå Žåãã³ã³ãã€ã«ãããã³ãŒããéæé©åãããŸãã
äžæ¢ãŸãã¯ããžãŒã®å ŽåãRTMããã¯ã»ã³ãŒãã¯ãæšæºã®ããã¯ã»ã¡ã«ããºã ã«ãã©ãŒã«ããã¯ããåã«ãã®ãªãã·ã§ã³ã«ãã£ãŠæå®ãããåæ°å詊è¡ãããŸãã ãã®ãªãã·ã§ã³ã®ããã©ã«ãå€ã¯5ã§ãã -XX:UseRTMLockingãªãã·ã§ã³ãæå¹åããå¿
èŠããããŸãã
éå±€åã³ã³ãã€ã«ã®äœ¿çšãç¡å¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ãæå¹ã«ãªã£ãŠããŸãã Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
IntelãAMDããã³SPARCããŒããŠã§ã¢ã«å¯ŸããŠãããŒããŠã§ã¢ããŒã¹ã®AESçµèŸŒã¿ãæå¹åããŸãã Intel Westmere (2010以é)ãAMD Bulldozer (2011以é)ããã³SPARC (T4以é)ãããµããŒããããŠããããŒããŠã§ã¢ã§ãã UseAESã¯ãUseAESIntrinsicsãšãšãã«äœ¿çšããŸãã
UseAESãšUseAESIntrinsicsãã©ã°ã¯ããã©ã«ãã§æå¹åãããŠãããJava HotSpot Server VM 32ãããããã³64ãããã«å¯ŸããŠã®ã¿ãµããŒããããŠããŸãã ããŒããŠã§ã¢ããŒã¹ã®AESçµèŸŒã¿ãç¡å¹åããã«ã¯ã-XX:-UseAES -XX:-UseAESIntrinsicsãæå®ããŸãã ããšãã°ãããŒããŠã§ã¢AESãæå¹åããã«ã¯ã次ã®ãã©ã°ã䜿çšããŸãã
-XX:+UseAES -XX:+UseAESIntrinsics
32ãããããã³64ãããã«å¯ŸããŠUseAESããã³UseAESIntrinsicsãã©ã°ããµããŒãããã«ã¯ã-serverãªãã·ã§ã³ã䜿çšããŠJava HotSpot Server VMãéžæããŸãã ãããã®ãã©ã°ã¯ãã¯ã©ã€ã¢ã³ãVMã§ã¯ãµããŒããããŠããŸããã
ã³ã³ãã€ã©ã®ã·ã£ããããŠã³åã«ãã³ãŒãã»ãã£ãã·ã¥ã®ãã©ãã·ã¥ãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã ã³ã³ãã€ã©ã®ã·ã£ããããŠã³åã«ãã³ãŒãã»ãã£ãã·ã¥ã®ãã©ãã·ã¥ãç¡å¹ã«ããã«ã¯ã-XX:-UseCodeCacheFlushingãæå®ããŸãã
ã«ãŒãè¡šãæŽæ°ããåã«ãã«ãŒãããã§ã«ããŒã¯ãããŠãããã©ããã®ãã§ãã¯ãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§ç¡å¹ã«ãããŠãããè€æ°ã®ãœã±ãããæã€ãã·ã³ã§ã®ã¿äœ¿çšããŠãã ãããããã«ãã£ãŠãåææäœã«å€§ããäŸåããJavaã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸãã Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
äžæ¢çã«å¿ããŠãRTMããã¯ãèªå調æŽããŸãã ãã®çã¯ã-XX:RTMAbortRatioãªãã·ã§ã³ã«ãã£ãŠæå®ãããŸãã äžæ¢ããããã©ã³ã¶ã¯ã·ã§ã³æ°ãäžæ¢çãè¶
ããå Žåãããã¯ãå«ãã¡ãœããããã¹ãŠã®ããã¯ã§æšæºã®ããã¯ãšããŠéæé©åããã³åã³ã³ãã€ã«ãããŸãã ãã®ãªãã·ã§ã³ã¯ããã©ã«ãã§ã¯ç¡å¹ã§ãã -XX:+UseRTMLockingãªãã·ã§ã³ãæå¹åããå¿
èŠããããŸãã
ãã©ãŒã«ããã¯ã»ãã³ãã©ãšããŠæšæºã®ããã¯ã»ã¡ã«ããºã ã䜿çšããŠãå±éããããã¹ãŠã®ããã¯ã«å¯ŸããŠRestricted Transactional Memory (RTM)ããã¯ã»ã³ãŒããçæããŸãã ãã®ãªãã·ã§ã³ã¯ããã©ã«ãã§ã¯ç¡å¹ã§ãã RTMã«é¢é£ãããªãã·ã§ã³ã¯ãTransactional Synchronization Extensions (TSX)ããµããŒãããx86 CPUäžã®Java HotSpot Server VMã«å¯ŸããŠã®ã¿äœ¿çšå¯èœã§ãã
RTMã¯ãx86åœä»€ã»ããæ¡åŒµã§ãã«ãã¹ã¬ããã»ã¢ããªã±ãŒã·ã§ã³ã®äœæã容æã«ããIntelã®TSXã®äžéšã§ãã RTMã§ã¯ãæ°ããåœä»€ XBEGINãXABORTãXENDããã³XTESTãå°å
¥ãããŠããŸãã XBEGINããã³XENDåœä»€ã¯ããã©ã³ã¶ã¯ã·ã§ã³ãšããŠå®è¡ããããã®åœä»€ã»ãããå²ã¿ãŸãã ãã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡æã«ç«¶åãèŠã€ãããªãã£ãå Žåãã¡ã¢ãªãŒãšã¬ãžã¹ã¿ã®å€æŽããXENDåœä»€ã§åæã«ã³ããããããŸãã XABORTåœä»€ã§ã¯ãã©ã³ã¶ã¯ã·ã§ã³ãæç€ºçã«äžæ¢ã§ããXENDåœä»€ã§ã¯åœä»€ã»ããããã©ã³ã¶ã¯ã·ã§ã³å
ã§å®è¡äžãã©ããã確èªã§ããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã®ããã¯ã¯ãå¥ã®ã¹ã¬ãããåããã©ã³ã¶ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹ããããšãããšãã«å±éãããŸãããããã£ãŠããã®ãã©ã³ã¶ã¯ã·ã§ã³ãžã®ã¢ã¯ã»ã¹ãæåã«ãªã¯ãšã¹ãããªãã£ãã¹ã¬ããã¯ãããã¯ãããŸãã RTMã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ãäžæ¢ãŸãã¯å€±æããå Žåã®ããã«ããã©ãŒã«ããã¯ã®æäœã»ãããæå®ããå¿ èŠããããŸãã RTMããã¯ãšã¯ãTSXã®ã·ã¹ãã ã«å§è²ãããŠããããã¯ã§ãã
RTMã«ãããéèŠãªãªãŒãžã§ã³ã«ãããŠè¡çªãå°ãªãç«¶å床ã®é«ãããã¯ã®ããã©ãŒãã³ã¹ãåäžãããŸã(ããã¯ãè€æ°ã®ã¹ã¬ããã«ãã£ãŠåæã«ã¢ã¯ã»ã¹ã§ããªãã³ãŒãã§ã)ã ãŸããRTMã«ãããç²ç²åºŠããã¯ã®ããã©ãŒãã³ã¹ãåäžãããŸãããäžè¬çã«ãã«ãã¹ã¬ããã»ã¢ããªã±ãŒã·ã§ã³ã§ã®ããã©ãŒãã³ã¹ã¯ãããããŸããã (ç²ç²åºŠããã¯ãšã¯ãããã¯ã®ååŸããã³è§£æŸã®ãªãŒããŒããããæå°åããããã«é·ãæéããã¯ãä¿æããæŠç¥ã§ãããäžæ¹ã现ç²åºŠããã¯ãšã¯å¿ èŠãªå Žåã®ã¿ããã¯ãå¯èœãªãããæ©æã«ããã¯è§£é€ããããšã§æå€§éã®äžŠè¡åŠçã®éæã詊ã¿ãæŠç¥ã§ãã) ããã«ãç°ãªãã¹ã¬ããã«ãã£ãŠäœ¿çšãããŠãã軜床ãªç«¶åããã¯ã®å ŽåãRTMã«ããã誀ã£ããã£ãã·ã¥ã»ã©ã€ã³å ±æ(ãã£ãã·ã¥ã»ã©ã€ã³ã»ãã³ãã³ãšãåŒã°ãã)ãåæžã§ããŸãã ããã¯ãç°ãªãããã»ããµããã®è€æ°ã®ã¹ã¬ãããç°ãªããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããŠããå Žåã«çºçããŸããããªãœãŒã¹ã¯åããã£ãã·ã¥ã»ã©ã€ã³ãå ±æããŸãã çµæãšããŠãããã»ããµã¯ä»ã®ããã»ããµã®ãã£ãã·ã¥ã»ã©ã€ã³ãç¹°ãè¿ãç¡å¹ã«ããããã«ããããã£ãã·ã¥ã§ã¯ãªãã¡ã€ã³ã»ã¡ã¢ãªãŒããã®èªåãã匷å¶ãããŸãã
SPARCããŒããŠã§ã¢ã®SHAæå·åããã·ã¥é¢æ°ã®ããŒããŠã§ã¢ããŒã¹ã®çµèŸŒã¿ãæå¹ã«ããŸãã UseSHAã¯ãUseSHA1IntrinsicsãUseSHA256Intrinsicsããã³UseSHA512Intrinsicsãªãã·ã§ã³ãšçµã¿åããŠäœ¿çšããŸãã
UseSHAããã³UseSHA*Intrinsicsãã©ã°ã¯ããã©ã«ãã§æå¹ã§ãããSPARC T4以äžã®Java HotSpot Server VM 64ãããã§ã®ã¿ãµããŒããããŸãã
SHAæäœã«å¯ŸããŠsun.security.provider.Sunãããã€ãã䜿çšããå Žåã®ã¿ããã®æ©èœãé©çšã§ããŸãã
ãã¹ãŠã®ããŒããŠã§ã¢ããŒã¹ã®SHAçµèŸŒã¿ãç¡å¹åããã«ã¯ã-XX:-UseSHAãæå®ããŠãã ããã ç¹å®ã®SHAçµèŸŒã¿ã®ã¿ç¡å¹åããã«ã¯ãé©åãªå¯Ÿå¿ãããªãã·ã§ã³ã䜿çšããŠãã ããã ããšãã°: -XX:-UseSHA256Intrinsicsã
SHA-1æå·åããã·ã¥é¢æ°ã®çµèŸŒã¿ãæå¹ã«ããŸãã
SHA-224ããã³SHA-256æå·åããã·ã¥é¢æ°ã®çµèŸŒã¿ãæå¹ã«ããŸãã
SHA-384ããã³SHA-512æå·åããã·ã¥é¢æ°ã®çµèŸŒã¿ãæå¹ã«ããŸãã
ã¹ã«ã©ãŒæäœã®ã¹ãŒããŒã¯ãŒãæäœãžã®å€æãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã ã¹ã«ã©ãŒæäœã®ã¹ãŒããŒã¯ãŒãæäœãžã®å€æãç¡å¹ã«ããã«ã¯ã-XX:-UseSuperWordãæå®ããŸãã Java HotSpot Server VMã®ã¿ãããã®ãªãã·ã§ã³ããµããŒãããŠããŸãã
ãããã®ãªãã·ã§ã³ã¯ãã·ã¹ãã æ å ±ãåéãã詳现ãããã°ãå®è¡ããæ©èœãæäŸããŸãã
java.lang.OutOfMemoryErroräŸå€ãã¹ããŒãããå Žåã«ãããŒãã»ãããã¡ã€ã©(HPROF)ã䜿çšããŠãJavaããŒãã®çŸåšã®ãã£ã¬ã¯ããªå
ã®ãã¡ã€ã«ãžã®ãã³ããæå¹ã«ããŸãã ããŒãã»ãã³ãã»ãã¡ã€ã«ã®ãã¹ãšååãæç€ºçã«èšå®ããã«ã¯ã-XX:HeapDumpPathãªãã·ã§ã³ã䜿çšããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããOutOfMemoryErroräŸå€ãã¹ããŒããããšãã«ããŒãããã³ããããŸããã
-XX:+HeapDumpOnOutOfMemoryErrorãªãã·ã§ã³ãèšå®ãããŠããå Žåã«ãããŒãã»ãããã¡ã€ã©(HPROF)ã«ãã£ãŠæäŸãããããŒãã»ãã³ããæžã蟌ããã¹ãšãã¡ã€ã«åãèšå®ããŸãã ããã©ã«ãã§ããã®ãã¡ã€ã«ã¯çŸåšã®äœæ¥ãã£ã¬ã¯ããªã«äœæãããjava_pidpid.hprofãšåä»ããããŸããããã§pidã¯ãšã©ãŒãçºçãããããã»ã¹ã®èå¥åã§ãã æ¬¡ã®äŸã§ã¯ãããã©ã«ãã®ãã¡ã€ã«ãæç€ºçã«èšå®ããæ¹æ³ã瀺ããŸã(%pã¯çŸåšã®ããã»ã¹ã®èå¥åã衚ããŸã)ã
-XX:HeapDumpPath=./java_pid%p.hprof
次ã®äŸã¯ãããŒãã»ãã³ãã»ãã¡ã€ã«ãC:/log/java/java_heapdump.logã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:HeapDumpPath=C:/log/java/java_heapdump.log
ãã°ã»ããŒã¿ãæžã蟌ãŸãããã¹ãšãã¡ã€ã«åãèšå®ããŸãã ããã©ã«ãã§ã¯ããã¡ã€ã«ã¯çŸåšã®äœæ¥ãã£ã¬ã¯ããªã«äœæãããhotspot.logãšåä»ããããŸãã
次ã®äŸã¯ããã°ã»ãã¡ã€ã«ãC:/log/java/hotspot.logã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:LogFile=C:/log/java/hotspot.log
Control+Breakã€ãã³ãåŸã®ã¯ã©ã¹ã»ã€ã³ã¹ã¿ã³ã¹ã»ãã¹ãã°ã©ã ã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
ãã®ãªãã·ã§ã³ãèšå®ããããšã¯ãjmap -histoã³ãã³ããŸãã¯jcmd pid GC.class_histogramã³ãã³ããå®è¡ããããšãšåçã§ãpidã¯çŸåšã®Javaããã»ã¹èå¥åã§ãã
Control+Breakã€ãã³ãåŸã®java.util.concurrentããã¯ã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
ãã®ãªãã·ã§ã³ãèšå®ããããšã¯ãjstack -lã³ãã³ããŸãã¯jcmd pid Thread.print -lã³ãã³ããå®è¡ããããšãšåçã§ãpidã¯çŸåšã®Javaããã»ã¹èå¥åã§ãã
JVMã®èšºæç®çã®ãªãã·ã§ã³ãããã¯è§£é€ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããã蚺æãªãã·ã§ã³ã䜿çšã§ããŸããã
ãããã®ãªãã·ã§ã³ã¯Java HotSpot VMã«ãã£ãŠå®è¡ãããã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³(GC)ãå¶åŸ¡ããŸãã
ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ãForkJoinPoolãªã©ã®æ§ã ãªæäœã«äœ¿çšããã¹ã¬ããã»ããŒã«ã®ãµã€ãºãèšç®ããããã«ãVMã䜿çšããCPUã®æ°ããªãŒããŒã©ã€ãããŸãã
éåžžãVMã¯ãªãã¬ãŒãã£ã³ã°ã»ã·ã¹ãã ãã䜿çšå¯èœãªããã»ããµã®æ°ã決å®ããŸãã ãã®ãã©ã°ã¯ãDockerã³ã³ããå
ã§è€æ°ã®Javaããã»ã¹ãå®è¡ãããšãã«ãCPUãªãœãŒã¹ãããŒãã£ã·ã§ã³åããããã«åœ¹ç«ã¡ãŸãã UseContainerSupportãæå¹ã«ãªã£ãŠããªãå Žåã§ãããã®ãã©ã°ã䜿çšãããŸãã ã³ã³ããã®ãµããŒãã®æå¹åããã³ç¡å¹åã®èª¬æã¯ã-XX:-UseContainerSupportãåç
§ããŠãã ããã
JavaããŒãæé©åãæå¹ã«ããŸãã ããã«ãããã³ã³ãã¥ãŒã¿ã®æ§æ(RAMããã³CPU)ã«åºã¥ããŠãã¡ã¢ãªãŒãéäžçã«å²ãåœãŠãããé·æéå®è¡ãžã§ãã«æé©ã«ãªãããã«ãåçš®ãã©ã¡ãŒã¿ãèšå®ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããããŒãã¯æé©åãããŸããã
JVMåæåæã«JavaããŒãäžã®ãã¹ãŠã®ããŒãžã®ã¢ã¯ã»ã¹ãæå¹ã«ããŸãã ããã«ãããmain()ã¡ãœããã«å
¥ãåã«ããã¹ãŠã®ããŒãžãã¡ã¢ãªãŒã«å
¥ããããŸãã ãã®ãªãã·ã§ã³ã¯ããã¹ãŠã®ä»®æ³ã¡ã¢ãªãŒãç©çã¡ã¢ãªãŒã«ãããã³ã°ããŠãé·æéå®è¡ã·ã¹ãã ãã·ãã¥ã¬ãŒããããã¹ãã§äœ¿çšã§ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããJVMããŒãé åããã£ã±ãã«ãªããšããã¹ãŠã®ããŒãžãã³ããããããŸãã
ã³ã³ã«ã¬ã³ãã»ããŒã¯ã»ã¹ã€ãŒã(CMS)ã¬ããŒãžã»ã³ã¬ã¯ã¿ã䜿çšããå Žåã«ãã¯ã©ã¹ã®ã¢ã³ããŒããæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã CMSã¬ããŒãžã»ã³ã¬ã¯ã¿ã®ã¯ã©ã¹ã®ã¢ã³ããŒããç¡å¹ã«ããã«ã¯ã-XX:-CMSClassUnloadingEnabledãæå®ããŸãã
䞊è¡åŠçã³ã¬ã¯ã·ã§ã³ã®çµ±èšã®ããã®ææ°å¹³åã®èšç®æã«ãçŸåšã®ãµã³ãã«ã®éã¿ä»ãã«äœ¿çšãããæéã®ããŒã»ã³ããŒãž(0ãã100)ãèšå®ããŸãã ããã©ã«ãã§ãææ°å¹³åä¿æ°ã¯25%ã«èšå®ãããŸãã æ¬¡ã®äŸã¯ãä¿æ°ã15%ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:CMSExpAvgFactor=15
CMSã³ã¬ã¯ã·ã§ã³ã»ãµã€ã¯ã«ãéå§ããOldäžä»£ã®å æç(0ãã100)ãèšå®ããŸãã ããã©ã«ãå€ã¯-1ã«èšå®ãããŸãã ãã€ãã¹ã®å€(ããã©ã«ããå«ã)ã¯-XX:CMSTriggerRatioã䜿çšããŠãéå§ã®å æå²åã®å€ãå®çŸ©ããããšãæå³ããŸãã
次ã®äŸã¯ãå æã®å²åã20%ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:CMSInitiatingOccupancyFraction=20
CMS remarkã¹ãããã®åã«æž æã®è©Šã¿ãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
CMSã³ã¬ã¯ã·ã§ã³ã»ãµã€ã¯ã«ã®éå§åã«å²ãåœãŠããã-XX:MinHeapFreeRatioã«ãã£ãŠæå®ãããå€ã®ããŒã»ã³ããŒãž(0ãã100)ãèšå®ããŸãã ããã©ã«ãå€ã¯80%ã«èšå®ãããŸãã
次ã®äŸã¯ãå æã®å²åã75%ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:CMSTriggerRatio=75
䞊è¡GCã«äœ¿çšãããã¹ã¬ããæ°ãèšå®ããŸãã ããã©ã«ãå€ã¯ãJVMã«äœ¿çšå¯èœãªCPUã®æ°ã«ãã£ãŠç°ãªããŸãã
ããšãã°äžŠè¡GCã®ã¹ã¬ããæ°ã2ã«èšå®ããã«ã¯ã次ã®ãªãã·ã§ã³ãæå®ããŸãã
-XX:ConcGCThreads=2
System.gc()ãžã®åŒåºãã®åŠçãç¡å¹ã«ãããªãã·ã§ã³ãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ããã©ã«ãã§ç¡å¹ã«ãããSystem.gc()ã®åŒåºããåŠçãããããšãæå³ããŸãã System.gc()ãžã®åŒåºãã®åŠçãç¡å¹ã«ãããŠããå ŽåãJVMã¯åŒãç¶ãå¿
èŠã«å¿ããŠGCãå®è¡ããŸãã
System.gc()èŠæ±ã䜿çšããŠã䞊è¡GCã®åŒåºããæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ããã©ã«ãã§ç¡å¹ã«ãããŠããã-XX:+UseConcMarkSweepGCãªãã·ã§ã³ãšäžç·ã®å Žåã®ã¿æå¹ã«ã§ããŸãã
System.gc()èŠæ±ã䜿çšããŠã䞊è¡GCã®åŒåºããšäžŠè¡GCãµã€ã¯ã«æã®ã¯ã©ã¹ã®ã¢ã³ããŒããæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ããã©ã«ãã§ç¡å¹ã«ãããŠããã-XX:+UseConcMarkSweepGCãªãã·ã§ã³ãšäžç·ã®å Žåã®ã¿æå¹ã«ã§ããŸãã
ã¬ããŒãžãã¡ãŒã¹ã(G1)ã³ã¬ã¯ã¿ã䜿çšããå Žåã«ãJavaããŒããååå²ãããé åã®ãµã€ãºãèšå®ããŸãã ãã®å€ã¯1Mãã€ããã32Mãã€ããŸã§ã§æå®ã§ããŸãã ããã©ã«ãã®é åãµã€ãºã¯ãããŒãã»ãµã€ãºã«åºã¥ããŠããšã«ãŽããã¯ã¹ã«åŸã£ãŠæ±ºå®ãããŸãã
次ã®äŸã¯ãååå²ã®ãµã€ãºã16Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:G1HeapRegionSize=16m
å²ãåœãŠãããé åãšG1ã³ã¬ã¯ã¿ã«ãã£ãŠåçãããé åã«é¢ããæ å ±ã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
G1ã³ã¬ã¯ã¿ã®ææ Œã®å€±æã®å¯èœæ§ãæžããããã«ã倱æã®äžéãšããŠäºçŽãããããŒãã®ããŒã»ã³ããŒãž(0ãã50)ãèšå®ããŸãã ããã©ã«ãã§ããã®ãªãã·ã§ã³ã¯10%ã«èšå®ãããŸãã
次ã®äŸã¯ãäºçŽãããããŒãã20%ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:G1ReservePercent=20
ã¡ã¢ãªãŒå²åœãŠããŒã«ã®åæãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãã®å€ã¯0ãŸãã¯1Mãã€ããã倧ãã1024ã®åæ°ã«ããå¿
èŠããããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãå€ã¯ãå®è¡æã«ã·ã¹ãã ã®èšå®ã«åºã¥ããŠéžæãããŸãã ãJava SE HotSpotä»®æ³ãã·ã³ã»ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã»ãã¥ãŒãã³ã°ã»ã¬ã€ã ã(http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html)ã®ãšã«ãŽããã¯ã¹ã«é¢ããé
ãåç
§ããŠãã ããã
次ã®äŸã§ã¯ãæ§ã ãªåäœã䜿çšããŠãå²ãåœãŠãããã¡ã¢ãªãŒã®ãµã€ãºã6Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŸãã
-XX:InitialHeapSize=6291456 -XX:InitialHeapSize=6144k -XX:InitialHeapSize=6m
ãã®ãªãã·ã§ã³ã0ã«èšå®ããå Žåãåæãµã€ãºã¯ãOldäžä»£ãšYoungäžä»£ã«å²ãåœãŠããããµã€ãºã®åèšãšããŠèšå®ãããŸãã Youngäžä»£ã®ããŒãã®ãµã€ãºã¯ã-XX:NewSizeãªãã·ã§ã³ã䜿çšããŠãèšå®ã§ããŸãã
-Xmsãªãã·ã§ã³ã¯ãããŒãã®æå°ããŒãã»ãµã€ãºãšåæããŒãã»ãµã€ãºã®äž¡æ¹ãèšå®ããŸãã ã³ãã³ãã©ã€ã³ã§-XX:InitialHeapSizeã®åŸã«-Xmsãæå®ãããŠããå ŽåãåæããŒãã»ãµã€ãºã¯-Xmsã§æå®ãããå€ã«èšå®ãããŸãã
-XX:InitialRAMPercentage=percent-XX:MaxRAMãªãã·ã§ã³ã§èª¬æãããŠãããšããã人éå·¥åŠã«åºã¥ããã¥ãŒãªã¹ãã£ãã¯ãæå€§éã®å²åãšããŠé©çšããåã«ãJVMãJavaããŒãã«äœ¿çšããåæã®ã¡ã¢ãªãŒéãèšå®ããŸãã ããã©ã«ãå€ã¯1.5625%ã§ãã
次ã®äŸã¯ãJavaããŒãã«äœ¿çšãããåæã¡ã¢ãªãŒéã®å²åãèšå®ããæ¹æ³ã瀺ããŠããŸã:
-XX:InitialRAMPercentage=5
ã¹ã«ãŒãããã»ã¬ããŒãžã»ã³ã¬ã¯ã¿(ããã¯-XX:+UseParallelGCããã³-XX:+UseParallelOldGCãªãã·ã§ã³ã«ãã£ãŠæå¹ã«ãã)ã«ãã£ãŠäœ¿çšãããåæSurvivoré åçãèšå®ããŸãã é©å¿åã®ãµã€ãºå€æŽã¯ã-XX:+UseParallelGCããã³-XX:+UseParallelOldGCãªãã·ã§ã³ã䜿çšããŠãã¹ã«ãŒãããã»ã¬ããŒãžã»ã³ã¬ã¯ã¿ã«ãã£ãŠããã©ã«ãã§æå¹ã«ãããSurvivoré åã¯ãåæå€ãããã¢ããªã±ãŒã·ã§ã³ã®åäœã«åŸã£ãŠãµã€ãºå€æŽãããŸãã é©å¿åã®ãµã€ãºå€æŽãç¡å¹ã«ãããŠããå Žå(-XX:-UseAdaptiveSizePolicyãªãã·ã§ã³ã䜿çšããŠ)ã-XX:SurvivorRatioãªãã·ã§ã³ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®å
šäœã®å®è¡ã®Survivoré åã®ãµã€ãºãèšå®ããŠãã ããã
次ã®å ¬åŒã䜿çšããŠãYoungäžä»£ã®ãµã€ãº(Y)ã«åºã¥ããŠãSurvivoré åã®åæãµã€ãº(S)ãšåæSurvivoré åç(R)ãèšç®ã§ããŸãã
S=Y/(R+2)
æ¹çšåŒã®2ã¯2ã€ã®Survivoré åã瀺ããŸãã åæSurvivoré åçãšããŠæå®ããå€ã倧ããã»ã©ãåæSurvivoré åã®ãµã€ãºãå°ãããªããŸãã
ããã©ã«ãã§åæSurvivoré åçã¯8ã«èšå®ãããŸãã Youngé åãµã€ãºã«ããã©ã«ãå€ã䜿çšããå Žå(2 MB)ãSurvivoré åã®åæãµã€ãºã¯0.2 MBã«ãªããŸãã
次ã®äŸã¯ãåæSurvivoré åçã4ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:InitialSurvivorRatio=4
䞊è¡GCãµã€ã¯ã«ãéå§ããããŒãå æç(0ãã100)ãèšå®ããŸãã ããã¯ããããã®äžä»£(G1ã¬ããŒãžã»ã³ã¬ã¯ã¿ãªã©)ã ãã§ãªããããŒãå šäœã®å æçã«åºã¥ããŠäžŠè¡GCãµã€ã¯ã«ãããªã¬ãŒããã¬ããŒãžã»ã³ã¬ã¯ã¿ã«ãã£ãŠäœ¿çšãããŸãã
ããã©ã«ãã§ã¯ãéå§å€ã¯45%ã«èšå®ãããŸãã 0ã®å€ã¯ç¡åæ¢ã®GCãµã€ã¯ã«ã瀺ããŸãã æ¬¡ã®äŸã¯ãéå§ããŒãå æçã75%ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:InitiatingHeapOccupancyPercent=75
GCã®æå€§äžæåæ¢æé(ããªç§åäœ)ã®ç®æšãèšå®ããŸãã ããã¯ãœããã»ãŽãŒã«ã®ãããJVMã¯ãã®å®çŸã®ããã«æåã®åªåãããŸãã ããã©ã«ãã§ã¯ãæå€§äžæåæ¢æéå€ã¯ãããŸããã
次ã®äŸã¯ãæå€§ç®æšäžæåæ¢æéã500msã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:MaxGCPauseMillis=500
ã¡ã¢ãªãŒå²åœãŠããŒã«ã®æå€§ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãã®å€ã¯ã1024ã®åæ°ã§ã2Mãã€ããã倧ãããªããã°ãªããŸããã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ããã©ã«ãå€ã¯ãå®è¡æã«ã·ã¹ãã ã®èšå®ã«åºã¥ããŠéžæãããŸãã ãµãŒããŒé
åã®å Žåã-XX:InitialHeapSizeãš-XX:MaxHeapSizeãåäžã®å€ã«èšå®ãããŠããããšããããããŸãã ãJava SE HotSpotä»®æ³ãã·ã³ã»ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã»ãã¥ãŒãã³ã°ã»ã¬ã€ã ã(http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html)ã®ãšã«ãŽããã¯ã¹ã«é¢ããé
ãåç
§ããŠãã ããã
次ã®äŸã§ã¯ãæ§ã ãªåäœã䜿çšããŠãå²ãåœãŠãããã¡ã¢ãªãŒã®æå€§èš±å®¹ãµã€ãºã80Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŸãã
-XX:MaxHeapSize=83886080 -XX:MaxHeapSize=81920k -XX:MaxHeapSize=80m
-XX:MaxHeapSizeãªãã·ã§ã³ã¯-Xmxãšåçã§ãã
GCã€ãã³ãåŸã®ç©ºãããŒãé åã®æå€§èš±å®¹ç(0ãã100)ãèšå®ããŸãã 空ãããŒãé åããã®å€ãè¶ ããŠæ¡å€§ããå ŽåãããŒããçž®å°ãããŸãã ããã©ã«ãã§ããã®å€ã¯70%ã«èšå®ãããŸãã
次ã®äŸã¯ãæå€§ç©ºãããŒãçã75%ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:MaxHeapFreeRatio=75
ã¯ã©ã¹ã»ã¡ã¿ããŒã¿ã«å²åœãŠå¯èœãªãã€ãã£ãã»ã¡ã¢ãªãŒã®æå€§éãèšå®ããŸãã ããã©ã«ãã§ã¯ããµã€ãºã¯ç¡å¶éã§ãã ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¿ããŒã¿ã®éã¯ãã¢ããªã±ãŒã·ã§ã³èªäœããã®ä»ã®å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ãããã³ã·ã¹ãã ã§äœ¿çšå¯èœãªã¡ã¢ãªãŒã®éã«ãã£ãŠç°ãªããŸãã
次ã®äŸã¯ãæå€§ã¯ã©ã¹ã»ã¡ã¿ããŒã¿ã»ãµã€ãºã256Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:MaxMetaspaceSize=256m
-XX:MaxRAMãªãã·ã§ã³ã§èª¬æãããŠãããšããã人éå·¥åŠã«åºã¥ããã¥ãŒãªã¹ãã£ãã¯ãæå€§éã®å²åãšããŠé©çšããåã«ãJVMãJavaããŒãã«äœ¿çšã§ããã¡ã¢ãªãŒã®æå€§éãèšå®ããŸãã ããã©ã«ãå€ã¯25%ã§ãã
ãã®ãªãã·ã§ã³ãæå®ãããšããã®ãªãã·ã§ã³ãšãã¡ã¢ãªãŒã®æå€§éã«åœ±é¿ããä»ã®ãªãã·ã§ã³ãçµã¿åããçµæããå§çž®oopsã§ã¢ãã¬ã¹æå®ãããã¡ã¢ãªãŒã®ç¯å²ããã倧ããå Žåã«ãå§çž®oopsã®èªå䜿çšãç¡å¹ã«ãªããŸãã å§çž®oopsã®è©³çްã¯ã-XX:UseCompressedOopsãåç
§ããŠãã ããã
次ã®äŸã¯ãJavaããŒãã«äœ¿çšãããã¡ã¢ãªãŒã®æå€§éã®å²åãèšå®ããæ¹æ³ã瀺ããŠããŸã:
-XX:MaxRAMPercentage=75
Youngäžä»£(ããŒãµãª)ã®ããŒãã®æå€§ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ããã©ã«ãå€ã¯ãšã«ãŽããã¯ã¹ã«åŸã£ãŠèšå®ãããŸãã
é©å¿åGCãµã€ãºå€æŽã«äœ¿çšããæå€§æ®¿å å ¥ããããå€ãèšå®ããŸãã æå€§å€ã¯15ã§ãã ããã©ã«ãå€ã¯ãã©ã¬ã«(ã¹ã«ãŒããã)ã³ã¬ã¯ã¿ã®å Žå15ã§ãCMSã³ã¬ã¯ã¿ã®å Žå6ã§ãã
次ã®äŸã¯ãæå€§æ®¿å å ¥ããããå€ã10ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:MaxTenuringThreshold=10
åããŠè¶ ãããšãã«ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ãããªã¬ãŒããããå²ãåœãŠãããã¯ã©ã¹ã»ã¡ã¿ããŒã¿é åã®ãµã€ãºãèšå®ããŸãã ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã®ãã®ãããå€ã¯ã䜿çšãããã¡ã¿ããŒã¿ã®éã«å¿ããŠå¢å ãŸãã¯æžå°ããŸãã ããã©ã«ãã®ãµã€ãºã¯ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªããŸãã
GCã€ãã³ãåŸã®ç©ºãããŒãé åã®æå°èš±å®¹ç(0ãã100)ãèšå®ããŸãã 空ãããŒãé åããã®å€ãäžåã£ãå ŽåãããŒããæ¡åŒµãããŸãã ããã©ã«ãã§ããã®å€ã¯40%ã«èšå®ãããŸãã
次ã®äŸã¯ãæå°ç©ºãããŒãçã25%ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:MinHeapFreeRatio=25
å°ããããŒãçšã®-XX:MaxRAMãªãã·ã§ã³ã§èª¬æãããŠãããšããã人éå·¥åŠã«åºã¥ããã¥ãŒãªã¹ãã£ãã¯ãæå€§éã®å²åãšããŠé©çšããåã«ãJVMãJavaããŒãã«äœ¿çšã§ããã¡ã¢ãªãŒã®æå€§éãèšå®ããŸãã å°ããããŒãã¯ãçŽ125 MBã®ããŒãã§ãã ããã©ã«ãå€ã¯50%ã§ãã
次ã®äŸã¯ãå°ããããŒãçšã®JavaããŒãã«äœ¿çšãããã¡ã¢ãªãŒã®æå€§éã®å²åãèšå®ããæ¹æ³ã瀺ããŠããŸã:
-XX:MinRAMPercentage=75
Youngäžä»£ã®ãµã€ãºãšOldäžä»£ã®ãµã€ãºã®æ¯çãèšå®ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯2ã«èšå®ãããŸãã æ¬¡ã®äŸã¯ãYoung/Oldã®æ¯çã1ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:NewRatio=1
Youngäžä»£(ããŒãµãª)ã®ããŒãã®åæãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã
ããŒãã®Youngäžä»£é åã¯æ°ãããªããžã§ã¯ãã«äœ¿çšãããŸãã ãã®é åã§ã¯ä»ã®é åãããé »ç¹ã«GCãå®è¡ãããŸãã Youngäžä»£ã®ãµã€ãºãå°ããããå Žåã¯ã倿°ã®ãã€ããŒGCãå®è¡ãããŸãã ãµã€ãºãé«ãããå Žåãå®å šGCã®ã¿ãå®è¡ãããŸãããããã¯å®äºãŸã§ã«é·ãæéããããããšããããŸãã Oracleã§ã¯ãYoungäžä»£ã®ãµã€ãºãããŒãã»ãµã€ãºå šäœã®ååãã4åã®1ã®éã«ç¶æããããšããèŠãããŸãã
次ã®äŸã§ã¯ãæ§ã ãªåäœã䜿çšããŠãYoungäžä»£ã®åæãµã€ãºã256Mãã€ãã«èšå®ããæ¹æ³ã瀺ããŸãã
-XX:NewSize=256m -XX:NewSize=262144k -XX:NewSize=268435456
-XX:NewSizeãªãã·ã§ã³ã¯-Xmnãšåçã§ãã
Youngäžä»£ãšOldäžä»£ã®ããã©ã¬ã«ã»ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã«äœ¿çšãããã¹ã¬ããæ°ãèšå®ããŸãã ããã©ã«ãå€ã¯ãJVMã«äœ¿çšå¯èœãªCPUã®æ°ã«ãã£ãŠç°ãªããŸãã
ããšãã°ãã©ã¬ã«GCã®ã¹ã¬ããæ°ã2ã«èšå®ããã«ã¯ã次ã®ãªãã·ã§ã³ãæå®ããŸãã
-XX:ParallelGCThreads=2
ãã©ã¬ã«åç §åŠçãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
é©å¿åäžä»£ãµã€ãºå€æŽã«é¢ããæ å ±ã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
ãã¹ãŠã®GCã§ã¡ãã»ãŒãžã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
æåŸã®äžæåæ¢(GCã®äžæåæ¢ãªã©)ããçµéããæéã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
äžæåæ¢(GCã®äžæåæ¢ãªã©)ãç¶ããæéã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
ãã¹ãŠã®GCã§æ¥ä»ã¹ã¿ã³ãã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
ãã¹ãŠã®GCã§è©³çްã¡ãã»ãŒãžã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
åã ã®ãã¹ãŠã®GCã¯ãŒã«ãŒã»ã¹ã¬ããã»ã¿ã¹ã¯ã®ã¿ã€ã ã»ã¹ã¿ã³ãã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
ãã¹ãŠã®GCã§ã®ã¿ã€ã ã¹ã¿ã³ãã®åºåãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
詳现ãªéè€é€å€çµ±èšãå°å·ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã -XX:+UseStringDeduplicationãªãã·ã§ã³ãåç
§ããŠãã ããã
殿å å ¥ãã®å¹Žéœ¢æ å ±ã®åºåãæå¹ã«ããŸãã æ¬¡ã¯ãåºåäŸã§ãã
Desired survivor size 48286924 bytes, new threshold 10 (max 10) - age 1: 28992024 bytes, 28992024 total - age 2: 1366864 bytes, 30358888 total - age 3: 1425912 bytes, 31784800 total ...
幎霢1ã®ãªããžã§ã¯ãã¯ãã£ãšãè¥ãSurvivorã§ã(ãããã¯ååã®æž æåŸã«äœæããããã®ãæåŸã®æž æã§æ®ã£ããã®ãEdenããSurvivoré åã«ç§»åããããã®ã§ã)ã 幎霢2ã®ãªããžã§ã¯ãã¯2åã®æž æã§æ®ã£ããã®ã§ã(2åç®ã®æž æã§ããããã¯ããSurvivoré åããæ¬¡ã®é åã«ã³ããŒãããŸãã)ã ãã®ä»ã
åã®äŸã§ã28 992 024ãã€ãã1åã®æž æã§æ®ããEdenããSurvivoré åã«ã³ããŒããã1 366 864ãã€ãã幎霢2ã®ãªããžã§ã¯ãã§å æãããŠãããšããããã«ãªããŸããåè¡ã®3çªç®ã®å€ã¯å¹Žéœ¢n以äžã®ãªããžã§ã¯ãã®çޝç©ãµã€ãºã§ãã
ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã
åãã«GCã®åã«Youngäžä»£ã®GCãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã ãã«GCã®åã«Youngäžä»£ãæž
æããããšã«ãã£ãŠãOldäžä»£ã®é åããYoungäžä»£ã®é åã«å°éå¯èœãªãªããžã§ã¯ãæ°ãåæžã§ãããããOracleã§ã¯ãããç¡å¹ã«ããªãããšããèŠãããŸãã åãã«GCã®åã«Youngäžä»£ã®GCãç¡å¹ã«ããã«ã¯ã-XX:-ScavengeBeforeFullGCãæå®ããŸãã
ãœããã«å°éå¯èœãªãªããžã§ã¯ããæåŸã«åç
§ãããåŸã«ããŒãã§æå¹ãªãŸãŸç¶æãããæéã®é(ããªç§åäœ)ãèšå®ããŸãã ããã©ã«ãå€ã¯ãããŒãå
ã®ç©ºãã¡ã¬ãã€ãåœãã1ç§ã®å¯¿åœã§ãã -XX:SoftRefLRUPolicyMSPerMBãªãã·ã§ã³ã¯ãçŸåšã®ããŒãã»ãµã€ãº(Java HotSpot Client VMã®å Žå)ãŸãã¯æå€§èš±å®¹ããŒãã»ãµã€ãº(Java HotSpot Server VMã®å Žå)ã®1ã¡ã¬ãã€ãåœããã®ããªç§ãè¡šãæŽæ°å€ãåãä»ããŸãã ãã®éãã¯ãClient VMãããŒããæ¡å€§ããããããœããåç
§ããã©ãã·ã¥ããåŸåããããServer VMããœããåç
§ããã©ãã·ã¥ãããããããŒããæ¡å€§ããåŸåãããããšãæå³ããŸãã åŸè
ã®å Žåã-Xmxãªãã·ã§ã³ã®å€ã¯ããœããåç
§ãã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ãããéãã«å€§ãã圱é¿ããŸãã
次ã®äŸã¯ãå€ã2.5ç§ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:SoftRefLRUPolicyMSPerMB=2500
æå®ããæéã«å°éãã€ã€ããStringãªããžã§ã¯ãã¯ãéè€é€å€ã®åè£ãšã¿ãªãããŸãã ãªããžã§ã¯ãã®æéã¯ããªããžã§ã¯ããã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã§åç¶ããåæ°ã®æž¬å®å€ã§ãã ããã¯ã殿å å
¥ããšåŒã°ããå ŽåããããŸãã-XX:+PrintTenuringDistributionãªãã·ã§ã³ãåç
§ããŠãã ããã ãã®æéã«å°éããåã«å€ãããŒãã»ãªãŒãžã§ã³ã«ææ ŒãããStringãªããžã§ã¯ãã¯ãåžžã«éè€é€å€ã®åè£ãšã¿ãªãããŸãã ãã®ãªãã·ã§ã³ã®ããã©ã«ãå€ã¯3ã§ãã -XX:+UseStringDeduplicationãªãã·ã§ã³ãåç
§ããŠãã ããã
Edené åãµã€ãºãšSurvivoré åãµã€ãºã®æ¯çãèšå®ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯8ã«èšå®ãããŸãã æ¬¡ã®äŸã¯ãEden/Survivoré åçã4ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:SurvivorRatio=4
Youngã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³åŸã«äœ¿çšãããSurvivoré åã®ç®çã®ããŒã»ã³ããŒãž(0ãã100)ãèšå®ããŸãã ããã©ã«ãã§ããã®ãªãã·ã§ã³ã¯50%ã«èšå®ãããŸãã
次ã®äŸã¯ãã¿ãŒã²ããã®Survivoré åçã30%ã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:TargetSurvivorRatio=30
ã¹ã¬ããããŒã«ã«å²åœãŠãããã¡(TLAB)ã®åæãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãããã€ããæå®ããã«ã¯æåkãŸãã¯Kãã¡ã¬ãã€ããæå®ããã«ã¯æåmãŸãã¯Mãã®ã¬ãã€ããæå®ããã«ã¯æågãŸãã¯Gãä»ããŸãã ãã®ãªãã·ã§ã³ã0ã«èšå®ãããŠããå ŽåãJVMã¯åæãµã€ãºãèªåçã«éžæããŸãã
次ã®äŸã¯ãåæTLABãµã€ãºã512Kãã€ãã«èšå®ããæ¹æ³ã瀺ããŠããŸãã
-XX:TLABSize=512k
é©å¿åäžä»£ãµã€ãºå€æŽã®äœ¿çšãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã é©å¿åäžä»£ãµã€ãºå€æŽãç¡å¹ã«ããã«ã¯ã-XX:-UseAdaptiveSizePolicyãæå®ããã¡ã¢ãªãŒå²åœãŠããŒã«ã®ãµã€ãºãæç€ºçã«èšå®ããŸã(-XX:SurvivorRatioãªãã·ã§ã³ãåç
§)ã
CMSã³ã¬ã¯ã¿ã®éå§ã®å¯äžã®åºæºãšããŠãå æçå€ã®äœ¿çšãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããããã®ä»ã®åºæºã䜿çšã§ããŸãã
Oldäžä»£ã®CMSã¬ããŒãžã»ã³ã¬ã¯ã¿ã®äœ¿çšãæå¹ã«ããŸãã ã¹ã«ãŒããã(-XX:+UseParallelGC)ã¬ããŒãžã»ã³ã¬ã¯ã¿ã«ãã£ãŠã¢ããªã±ãŒã·ã§ã³ã®åŸ
æ©æéèŠä»¶ãæºããããšãã§ããªãå ŽåãOracleã§ã¯CMSã¬ããŒãžã»ã³ã¬ã¯ã¿ã䜿çšããããšããèŠãããŸãã G1ã¬ããŒãžã»ã³ã¬ã¯ã¿(-XX:+UseG1GC)ã¯å¥ã®ä»£æ¿æ¹æ³ã§ãã
ããã©ã«ãã§ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãããŠããããã·ã³ã®æ§æãšJVMã®ã¿ã€ãã«åºã¥ããŠãã³ã¬ã¯ã¿ãèªåçã«éžæãããŸãã ãã®ãªãã·ã§ã³ãæå¹ã«ãããŠããå Žåã-XX:+UseParNewGCãªãã·ã§ã³ãèªåçã«èšå®ãããŸãããããã¯ç¡å¹ã«ããªãã§ãã ããã-XX:+UseConcMarkSweepGC -XX:-UseParNewGCã®ãªãã·ã§ã³ã®çµåããã¯JDK 8ã§éæšå¥šã«ãªã£ãããã§ãã
ã¬ããŒãžãã¡ãŒã¹ã(G1)ã»ã¬ããŒãžã»ã³ã¬ã¯ã¿ã®äœ¿çšãæå¹ã«ããŸãã ããã¯ã倧容éã®RAMãæèŒãããã«ãããã»ããµã»ãã·ã³ã察象ãšããããµãŒããŒã¹ã¿ã€ã«ã»ã¬ããŒãžã»ã³ã¬ã¯ã¿ã§ãã GCäžæåæ¢æéç®æšãé«ã確çã§æºãããªãããåªããã¹ã«ãŒããããç¶æããŸãã 倧ããªããŒã(ããã6Gãã€ã以äžã®ãµã€ãº)ãå¿ èŠãšããGCåŸ æ©æéã®å¶éã®èŠä»¶(0.5ç§æªæºã®å®å®ããäºæž¬å¯èœãªäžæåæ¢æé)ã®ããã¢ããªã±ãŒã·ã§ã³ã«ã¯ãG1ã³ã¬ã¯ã¿ããèŠãããŸãã
ããã©ã«ãã§ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãããŠããããã·ã³ã®æ§æãšJVMã®ã¿ã€ãã«åºã¥ããŠãã³ã¬ã¯ã¿ãèªåçã«éžæãããŸãã
OutOfMemoryErroräŸå€ãã¹ããŒããããŸã§ã«ãGCãžã®JVMã«ãã£ãŠè²»ããããæéã®å²åãå¶éããããªã·ãŒã䜿çšã§ããŸãã ãã®ãªãã·ã§ã³ã¯ããã©ã«ãã§æå¹ã«ãããåèšæéã®98%ãã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã§è²»ãããã埩å
ãããããŒãã2%æªæºã§ããå Žåã«ããã©ã¬ã«GCã¯OutOfMemoryErrorãã¹ããŒããŸãã ããŒããå°ããå Žåããã®æ©èœã¯ãã¢ããªã±ãŒã·ã§ã³ãé·æéã»ãšãã©ãŸãã¯ãŸã£ãã鲿ãªãã§å®è¡ããããšãé²ãããã«äœ¿çšã§ããŸãã ãã®ãªãã·ã§ã³ãç¡å¹ã«ããã«ã¯ã-XX:-UseGCOverheadLimitãæå®ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®åŸ
æ©æéã®çãã¡ã¢ãªãŒã®äœ¿çšãå¢ããããšã§ãNUMA (Non-Uniform Memory Architecture)ã䜿çšãããã·ã³äžã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®æé©åãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠãããNUMAã®æé©åã¯è¡ãããŸããã ãã®ãªãã·ã§ã³ã¯ããã©ã¬ã«ã»ã¬ããŒãžã»ã³ã¬ã¯ã¿ã䜿çšãããŠããå Žå(-XX:+UseParallelGC)ã«ã®ã¿äœ¿çšã§ããŸãã
è€æ°ã®ããã»ããµãå©çšããããšã«ãã£ãŠã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã«ãParallel Scavengeã¬ããŒãžã»ã³ã¬ã¯ã¿(ã¹ã«ãŒãããã»ã³ã¬ã¯ã¿ãšãåŒã°ãã)ã®äœ¿çšãæå¹ã«ããŸãã
ããã©ã«ãã§ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãããŠããããã·ã³ã®æ§æãšJVMã®ã¿ã€ãã«åºã¥ããŠãã³ã¬ã¯ã¿ãèªåçã«éžæãããŸãã ãããæå¹ã«ãããšã-XX:+UseParallelOldGCãªãã·ã§ã³ãæç€ºçã«ç¡å¹ã«ããªããããã¯èªåçã«æå¹ã«ãªããŸãã
ãã«GCã®ãã©ã¬ã«ã»ã¬ããŒãžã»ã³ã¬ã¯ã¿ã®äœ¿çšãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã ãããèªåçã«æå¹ã«ãããšã-XX:+UseParallelGCãªãã·ã§ã³ãæå¹ã«ãªããŸãã
Youngäžä»£ã®ã³ã¬ã¯ã·ã§ã³ã«ãã©ã¬ã«ã»ã¹ã¬ããã®äœ¿çšãæå¹ã«ããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã -XX:+UseConcMarkSweepGCãªãã·ã§ã³ãèšå®ãããšããããèªåçã«æå¹ã«ãªããŸãã -XX:+UseConcMarkSweepGCãªãã·ã§ã³ã䜿çšããã«-XX:+UseParNewGCãªãã·ã§ã³ã䜿çšããããšã¯ãJDK 8ã§éæšå¥šã«ãªããŸããã
ã·ãªã¢ã«ã»ã¬ããŒãžã»ã³ã¬ã¯ã¿ã®äœ¿çšãæå¹ã«ããŸãã ããã¯äžè¬ã«ãã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ã®ç¹å¥ãªæ©èœãå¿ èŠãšããªãå°ããåçŽãªã¢ããªã±ãŒã·ã§ã³ã«ã¯æé©ãªéžæã§ãã ããã©ã«ãã§ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãããŠããããã·ã³ã®æ§æãšJVMã®ã¿ã€ãã«åºã¥ããŠãã³ã¬ã¯ã¿ãèªåçã«éžæãããŸãã
æååã®éè€é€å€ãæå¹åããŸãã ããã©ã«ãã§ã¯ããã®ãªãã·ã§ã³ã¯ç¡å¹ã«ãªã£ãŠããŸãã ãã®ãªãã·ã§ã³ã䜿çšããã«ã¯ãã¬ããŒãžãã¡ãŒã¹ã(G1)ã»ã¬ããŒãžã»ã³ã¬ã¯ã¿ãæå¹ã«ããå¿
èŠããããŸãã -XX:+UseG1GCãªãã·ã§ã³ãåç
§ããŠãã ããã
å€ãã®Stringãªããžã§ã¯ããåãã§ãããšããããšãããString deduplicationã«ãããJavaããŒãäžã®Stringãªããžã§ã¯ãã®ã¡ã¢ãªãŒã»ãããããªã³ããåæžãããŸãã åStringãªããžã§ã¯ããç¬èªã®æåé
åããã€ã³ãããã®ã§ã¯ãªããåäžã®Stringãªããžã§ã¯ãã¯åãæåé
åããã€ã³ããå
±æã§ããŸãã
Youngäžä»£ã®é åã§ãã¹ã¬ããããŒã«ã«å²åœãŠãããã¯(TLAB)ã®äœ¿çšãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯ãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã TLABã®äœ¿çšãç¡å¹ã«ããã«ã¯-XX:-UseTLABãæå®ããŸãã
ãããã®ãªãã·ã§ã³ã¯åã®ãªãªãŒã¹ã«å«ãŸããŠããŸãããããã®åŸäžèŠãšã¿ãªãããŸããã
ã€ã³ã¯ãªã¡ã³ã¿ã«ã»ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ã§éæšå¥šã«ãªããŸããã
æå®ãããããã°/ãããã¡ã€ãªã³ã°ã»ã©ã€ãã©ãªãããŒãããŸãã ãã®ãªãã·ã§ã³ã¯-agentlibãªãã·ã§ã³ã«ãã£ãŠçœ®ãæããããŸããã
䞊è¡ã³ã¬ã¯ã¿ãå®è¡ãèš±å¯ããããã€ããŒã»ã³ã¬ã¯ã·ã§ã³éã®æéã®ããŒã»ã³ããŒãž(0ãã100)ãèšå®ããŸãã -XX:+CMSIncrementalModeãªãã·ã§ã³ã®éæšå¥šã«ç¶ããŠããã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ã§éæšå¥šã«ãªããŸããã
-XX:+CMSIncrementalPacingãæå¹ã«ãããŠããå Žåã«ããã¥ãŒãã£ã»ãµã€ã¯ã«ã®äžéã§ãããã€ããŒã»ã³ã¬ã¯ã·ã§ã³éã®æéã®ããŒã»ã³ããŒãž(0ãã100)ãèšå®ããŸãã -XX:+CMSIncrementalModeãªãã·ã§ã³ã®éæšå¥šã«ç¶ããŠããã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ã§éæšå¥šã«ãªããŸããã
CMSã³ã¬ã¯ã¿ã®ã€ã³ã¯ãªã¡ã³ã¿ã«ã»ã¢ãŒããæå¹ã«ããŸãã CMSIncrementalããå§ãŸããã®ä»ã®ãªãã·ã§ã³ãšäžç·ã«ããã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ã§éæšå¥šã«ãªããŸããã
ã€ã³ã¯ãªã¡ã³ã¿ã«ã»ã¢ãŒãã»ãã¥ãŒãã£ã»ãµã€ã¯ã«ããã€ããŒã»ã³ã¬ã¯ã·ã§ã³éã®æéå
ã«å³åŽã«ç§»åãããæéã®ããŒã»ã³ããŒãž(0ãã100)ãèšå®ããŸãã -XX:+CMSIncrementalModeãªãã·ã§ã³ã®éæšå¥šã«ç¶ããŠããã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ã§éæšå¥šã«ãªããŸããã
JVMã®å®è¡äžã«åéãããçµ±èšæ
å ±ã«åºã¥ããã€ã³ã¯ãªã¡ã³ã¿ã«ã»ã¢ãŒãã»ãã¥ãŒãã£ã»ãµã€ã¯ã«ã®èªå調æŽãæå¹ã«ããŸãã -XX:+CMSIncrementalModeãªãã·ã§ã³ã®éæšå¥šã«ç¶ããŠããã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ã§éæšå¥šã«ãªããŸããã
ãã¥ãŒãã£ã»ãµã€ã¯ã«ã®èšç®æã«ãä¿å®æ§ã远å ããããã«äœ¿çšãããæé(0ãã100)ã®ããŒã»ã³ããŒãžãèšå®ããŸãã -XX:+CMSIncrementalModeãªãã·ã§ã³ã®éæšå¥šã«ç¶ããŠããã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ã§éæšå¥šã«ãªããŸããã
GCãèµ·åããPermanentäžä»£ã®å æç(0ãã100)ãèšå®ããŸãã ãã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ã§éæšå¥šã«ãªããŸããã
Permanentäžä»£é åã®æå€§ãµã€ãº(ãã€ãåäœ)ãèšå®ããŸãã ãã®ãªãã·ã§ã³ã¯JDK 8ã§éæšå¥šã«ãªãã-XX:MaxMetaspaceSizeãªãã·ã§ã³ã«ãã£ãŠçœ®ãæããããŸããã
è¶
ããå Žåã«ã¬ããŒãžã»ã³ã¬ã¯ã·ã§ã³ãããªã¬ãŒããããPermanentäžä»£ã«å²ãåœãŠãããé å(ãã€ãåäœ)ãèšå®ããŸãã ãã®ãªãã·ã§ã³ã¯JDK 8ã§éæšå¥šã«ãªãã-XX:MetaspaceSizeãªãã·ã§ã³ã«ãã£ãŠçœ®ãæããããŸããã
æ€èšŒããã»ã¹ã®åå²ãæå¹ã«ããŸãã ããã©ã«ãã§ããã®ãªãã·ã§ã³ã¯åã®ãªãªãŒã¹ã§æå¹ã«ãããŠãããæ€èšŒã¯ååç §(ã³ã³ãã€ã©ã«ãã£ãŠå®è¡)ãšåãã§ãã¯(JVMã©ã³ã¿ã€ã ã«ãã£ãŠå®è¡)ã®2ã€ã®ãã§ãŒãºã«åå²ãããŠããŸããã ãã®ãªãã·ã§ã³ã¯JDK 8ã§éæšå¥šã«ãªããæ€èšŒã¯ããã©ã«ãã§åå²ããããããç¡å¹ã«ããæ¹æ³ã¯ãªããªããŸããã
äžè¬çã«å²ãåœãŠãããæååã®ãã£ãã·ã¥ãæå¹ã«ããŸãã ãã®ãªãã·ã§ã³ã¯çœ®æããªãJDK 8ããåé€ãããŸããã
次ã®äŸã¯ãã¹ã«ãŒããããæé©åãããããŸãã¯ã¬ã¹ãã³ã¹æéãççž®ããããã®è©Šéšçãªãã¥ãŒãã³ã°ã»ãã©ã°ã®äœ¿ç𿹿³ã瀺ããŠããŸãã
ãã¥ãŒãžã»ããŒãžãšãåŒã°ããã©ãŒãžã»ããŒãžã¯ãæšæºã®ã¡ã¢ãªãŒã»ããŒãžã»ãµã€ãº(ããã»ããµããã³ãªãã¬ãŒãã£ã³ã°ã»ã·ã¹ãã ã«ãã£ãŠç°ãªããŸã)ããã¯ããã«å€§ããã¡ã¢ãªãŒã»ããŒãžã§ãã ã©ãŒãžã»ããŒãžã¯ãããã»ããµã®Translation-Lookaside Bufferãæé©åããŸãã
Translation-Lookaside Buffer (TLB)ã¯ãæè¿äœ¿çšãããä»®æ³ããç©çãžã®ã¢ãã¬ã¹å€æãä¿æããããŒãžå€æãã£ãã·ã¥ã§ãã TLBã¯ãå°ãªãã·ã¹ãã ã»ãªãœãŒã¹ã§ãã ããã»ããµãè€æ°ã®ã¡ã¢ãªãŒã»ã¢ã¯ã»ã¹ãå¿ èŠãªå Žåã®ããéå±€ããŒãžè¡šããèªã¿åãå¿ èŠããããããTLBãã¹ã¯è² è·ããããå¯èœæ§ããããŸãã 倧ããã¡ã¢ãªãŒã»ããŒãžã»ãµã€ãºã䜿çšããŠãåäžã®TLBãšã³ããªã§å€§ããã¡ã¢ãªãŒç¯å²ã衚ãããšãã§ããŸãã TLBäžè¶³ãå°ãªããªããã¡ã¢ãªãŒéçŽåã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããå¯èœæ§ããããŸãã
ãã ããã©ãŒãžã»ããŒãžã®ããŒãžã»ã¡ã¢ãªãŒã¯ãã·ã¹ãã ã®ããã©ãŒãã³ã¹ã«æªåœ±é¿ãäžããå ŽåããããŸãã ããšãã°ã倧éã®ã¡ã¢ãªãŒãã¢ããªã±ãŒã·ã§ã³ã§ç¢ºä¿ãããå Žåãéåžžã¡ã¢ãªãŒäžè¶³ãä»ã®ã¢ããªã±ãŒã·ã§ã³ã®éå°ãªããŒãžã³ã°ãçºçããã·ã¹ãã å šäœãé ããªãå¯èœæ§ããããŸãã ãŸããé·æé皌åããŠããã·ã¹ãã ã¯ãéå°ãªæçåãçºçããå¯èœæ§ããããŸããããã«ãããååãªå€§ããã®ããŒãžã»ã¡ã¢ãªãŒãäºçŽã§ããªãå¯èœæ§ããããŸãã ãããçºçããå ŽåãOSãŸãã¯JVMã®ãããããéåžžã®ããŒãžã®äœ¿çšã«æ»ããŸãã
Windows Server 2003ã®ã¿ãã©ãŒãžã»ããŒãžããµããŒãããŸãã ãã®æ©èœã䜿çšããããã管çè ã¯æåã«è¿œå ã®æš©éãã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠãŒã¶ãŒã«å²ãåœãŠãå¿ èŠããããŸãã
ãã³ã³ãããŒã«ã»ããã«ããâã管çããŒã«ãâãããŒã«ã«ã»ã»ãã¥ãªãã£ã»ããªã·ãŒããéžæããŸãã
ãããŒã«ã«ã»ããªã·ãŒãâããŠãŒã¶ãŒæš©å©ã®å²åœãŠããéžæããŸãã
ãLock Pages in Memoryããããã«ã¯ãªãã¯ããŠããŠãŒã¶ãŒãŸãã¯ã°ã«ãŒããããã¯ãã®äž¡æ¹ã远å ããŸãã
ã·ã¹ãã ãåèµ·åããŸãã
ããã©ã«ãã§ç®¡çè ã¯ã¡ã¢ãªãŒã®ããŒãžãããã¯ããæš©éããªããããã¢ããªã±ãŒã·ã§ã³ãå®è¡ãã管çè ã§ããããã®ã¹ããããå¿ èŠãªã®ã§æ³šæããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³ã»ã¯ã©ã¹ã»ããŒã¿å
±æ(AppCDS)ã¯ãCDS(https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.htmlãåç
§)ãæ¡åŒµããŠæšæºæ¡åŒµãã£ã¬ã¯ããªã®ã¯ã©ã¹ãæå¹åã(ã·ã¹ãã ã»ããããã£java.ext.dirsã§æå®ãhttps://docs.oracle.com/javase/8/docs/technotes/guides/extensions/spec.htmlãåç
§)ãã¢ããªã±ãŒã·ã§ã³ã»ã¯ã©ã¹ã»ãã¹ãå
±æã¢ãŒã«ã€ãã«é
眮ã§ããããã«ããŸã(ãã¯ã©ã¹ã»ãã¹ã®èšå®ããåç
§)ã AppCDSã¯ãçžåœæ°ã®ã¯ã©ã¹ãã¢ããªã±ãŒã·ã§ã³ã»ã¯ã©ã¹ã»ãã¹ããããŒãããããšããæ¡ä»¶äžã§ããããããªã³ããäœæžããã¢ããªã±ãŒã·ã§ã³èµ·åæéãççž®ããŸãã
ããã¯ã-XX:+UnlockCommercialFeaturesãªãã·ã§ã³ãåæã«æå®ããå¿
èŠãããåçšæ©èœã§ãã ããã¯å®éšçãªæ©èœã§ããããä»åŸã®ãªãªãŒã¹ã§å€æŽãããå ŽåããããŸãã
次ã®ã¹ãããã§ãtest.Helloã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããã¹ãŠã®ã¯ã©ã¹ãå«ãå
±æã¢ãŒã«ã€ãã»ãã¡ã€ã«ãäœæããŸãã æåŸã®ã¹ãããã§ãå
±æã¢ãŒã«ã€ãã»ãã¡ã€ã«ãæã€ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
test.Helloã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããã¹ãŠã®ã¯ã©ã¹ã®ãªã¹ããäœæããŸãã æ¬¡ã®ã³ãã³ãã¯ããã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããã¹ãŠã®ã¯ã©ã¹ã®ãªã¹ããå«ããhello.classlistãšããååã®ãã¡ã€ã«ãäœæããŸãã
java -Xshare:off -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp hello.jar test.Hello
-cpãã©ã¡ãŒã¿ãJARãã¡ã€ã«ã®ã¿ãå«ãå¿
èŠãããç¹ã«æ³šæããŠãã ããã-XX:+UseAppCDSãªãã·ã§ã³ã¯ããã£ã¬ã¯ããªåãå«ãã¯ã©ã¹ã»ãã¹ããµããŒãããŸããã
hello.classlistå
ã®ãã¹ãŠã®ã¯ã©ã¹ãå«ããhello.jsaãšããååã®å
±æã¢ãŒã«ã€ããäœæããŸãã
java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar
ã¢ãŒã«ã€ãäœææã«äœ¿çšããã-cpãã©ã¡ãŒã¿ã¯ãå®è¡æã«äœ¿çšããã-cpãšåäž(ãŸãã¯ããã®æ¥é èŸ)ã§ããå¿
èŠãããããšã«æ³šæããŠãã ããã
å
±æã¢ãŒã«ã€ãhello.jsaãæã€ã¢ããªã±ãŒã·ã§ã³test.Helloãå®è¡ããŸãã
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hello
ãªãã·ã§ã³-Xshare:onãŸãã¯-Xshare:autoãæå®ããããšã確èªããŸãã
test.Helloã¢ããªã±ãŒã·ã§ã³ããhello.jsaå
±æã¢ãŒã«ã€ãã«å«ãŸããã¯ã©ã¹ã䜿çšããŠããããšã確èªããŸãã
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar -verbose:class test.Hello
ãã®ã³ãã³ãã®åºåã¯ã次ã®ããã¹ããå«ãã§ããå¿ èŠããããŸãã
Loaded test.Hello from shared objects file by sun/misc/Launcher$AppClassLoader
æ£ç¢ºã«åãã¯ã©ã¹ã»ãã¹ãæã£ãŠããããå ±éã®ã¯ã©ã¹ã»ãã¹æ¥é èŸãå ±æãããè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã»ããã»ã¹å šäœã§ãåãã¢ãŒã«ã€ãã»ãã¡ã€ã«ãå ±æã§ããŸãã ã¢ãŒã«ã€ãã¯ããã»ã¹ã®ã¢ãã¬ã¹ç©ºéã«ã¡ã¢ãªãŒã»ãããããããããããã«ããã¡ã¢ãªãŒäœ¿çšéãäœäžããŸãã ãªãã¬ãŒãã£ã³ã°ã»ã·ã¹ãã ã¯ããããã®ããã»ã¹å šäœã§èªåãå°çšããŒãžãèªåçã«å ±æããŸãã
次ã®ã¹ãããã§ã¯ãã¢ããªã±ãŒã·ã§ã³Helloããã³Hiã䜿çšã§ããå
±æã¢ãŒã«ã€ããäœæããŸãã
Helloã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããã¹ãŠã®ã¯ã©ã¹ã®ãªã¹ããšãHiã¢ããªã±ãŒã·ã§ã³ã«é¢ããå¥ã®ãªã¹ããäœæããŸãã
java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp common.jar:hello.jar Hello
java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hi.classlist -XX:+UseAppCDS -cp common.jar:hi.jar Hi
Helloããã³Hiã¢ããªã±ãŒã·ã§ã³ã¯ãå
±éã®ã¯ã©ã¹ã»ãã¹æ¥é èŸãå
±æããŠãããã(ã¯ã©ã¹ã»ãã¹ã¯ã©ã¡ããcommon.jarã§å§ãŸããŸã)ããããã®2ã€ã®ã¢ããªã±ãŒã·ã§ã³ã¯1ã€ã®å
±æã¢ãŒã«ã€ãã»ãã¡ã€ã«ãå
±æã§ããŸãã
å ±æã¢ãŒã«ã€ãã»ãã¡ã€ã«ãå ±æãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããã¯ã©ã¹ã®åäžã®ãªã¹ããäœæããŸãã
次ã®ã³ãã³ãã¯ããã¡ã€ã«hello.classlistããã³hi.classlistãã1ã€ã®ãã¡ã€ã«common.classlistã«çµåããŸãã
type hello.classlist hi.classlist > common.classlist
common.classlistå
ã®ãã¹ãŠã®ã¯ã©ã¹ãå«ããcommon.jsaãšããååã®å
±æã¢ãŒã«ã€ããäœæããŸãã
java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -XX:SharedClassListFile=common.classlist -cp common.jar
-cpãã©ã¡ãŒã¿ã®å€ã¯ãHelloããã³Hiã¢ããªã±ãŒã·ã§ã³ã§å
±æãããå
±éã®ã¯ã©ã¹ã»ãã¹æ¥é èŸã§ãã
åäžã®å
±æã¢ãŒã«ã€ããæã€Helloããã³Hiã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hello.jar Hello
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hi.jar Hi
äžè¬ã«ã©ã³ãã£ããæ¬¡ã®çµäºå€ãè¿ãããã®ã¯ãéåžžãã©ã³ãã£ãäžæ£ãªåŒæ°ãæ·±å»ãªãšã©ãŒããŸãã¯JVMã«ãã£ãŠã¹ããŒãããäŸå€ã«ãã£ãŠåŒã³åºãããå Žåã§ãã ãã ããJavaã¢ããªã±ãŒã·ã§ã³ã¯APIåŒåºãSystem.exit(exitValue)ã䜿çšããŠä»»æã®å€ãè¿ãããšãã§ããŸãã å€:
0: æ£åžžçµäº
>0: ãšã©ãŒçºç