šŸ“Javaćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ 

šŸ“Javaćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ 

January 17, 2023

tags. šŸ”–Java

Java ćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ  #

Java恧čؘčæ°ć•ć‚ŒćŸćƒ—ćƒ­ć‚°ćƒ©ćƒ ć®é–‹ē™ŗćŠć‚ˆć³å®Ÿč”Œć‚’č”Œć†ć“ćØć®ć§ćć‚‹ć‚½ćƒ•ćƒˆć‚¦ć‚§ć‚¢ē¾¤ć®ē·ē§°.

šŸ“Javaå®Ÿč”Œē’°å¢ƒ(JRE) #

Java Runtime Environment, JRE.

ć‚³ćƒ³ćƒ”ćƒ„ćƒ¼ć‚æ恧Javaćƒ—ćƒ©ćƒƒćƒˆćƒ•ć‚©ćƒ¼ćƒ ć‚’å‹•ć‹ć›ć‚‹ć‚ˆć†ć«ć™ć‚‹ćŸć‚ć®ćƒ„ćƒ¼ćƒ«ć‚»ćƒƒćƒˆ.

šŸ“Java SE悄šŸ“Javaä»®ęƒ³ćƒžć‚·ćƒ³(JVM)ćØć‚»ćƒƒćƒˆć§ęä¾›ć•ć‚Œć‚‹.


šŸ‘‰JVM #

šŸ“Javaä»®ęƒ³ćƒžć‚·ćƒ³(JVM)

šŸ“Java SE #

Java Platform, Standard Edition.

Java恧ä½æē”Ø恧恍悋StandardćŖAPIć‚’ć¾ćØć‚ćŸć‚‚ć®.

šŸ“Java開ē™ŗē’°å¢ƒ(JDK) #

Java Development Kit, JDK.

Javač؀čŖžć‚’ä½æć£ć¦Javać‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ć‚’é–‹ē™ŗć™ć‚‹ćŸć‚ć®ćƒ„ćƒ¼ćƒ«ć‚»ćƒƒćƒˆ, 開ē™ŗē’°å¢ƒ.

JDKć‚’ć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć™ć‚‹ćØJREć‚‚ć¤ć„ć¦ćć‚‹ćØ恓悍恌ē“›ć‚‰ć‚ć—恕悒ē”Ÿćæå‡ŗ恗恦恄悋.


šŸ“JAR #

JAR #

Java ARchive恮ē•„. Java Classćƒ•ć‚”ć‚¤ćƒ«ćØ惔ć‚æćƒ‡ćƒ¼ć‚æć‚’ć‚¢ćƒ¼ć‚«ć‚¤ćƒ–ć—ćŸć‚‚ć®.


UberJAR #

ē”Ÿē”£ē‰©ć®Jar恠恑恧ćŖćä¾å­˜é–¢äæ‚恮jarć‚‚å«ć‚€jarć®å”Š.

Javać‚’ć¤ć‹ć£ć¦ć‚¹ć‚æćƒ³ćƒ‰ć‚¢ćƒ­ćƒ³ć‚¢ćƒ—ćƒŖć‚±ćƒ¼ć‚·ćƒ§ćƒ³ćØć—ć¦čµ·å‹•ć™ć‚‹ć“ćØ恌恧恍悋.

java -jar exampleapp.jar

Javać®ć‚½ćƒ•ćƒˆć‚¦ć‚§ć‚¢ć‚’é…åøƒć—ć‚ˆć†ćØ恗恟ćØćć«ć‚µćƒ¼ćƒ‰ćƒ‘ćƒ¼ćƒ†ć‚£ć®ä¾å­˜ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖć‚‚å«ć‚ć¦ć¾ćØć‚ć¦é…åøƒ(all-in-one)恧恍悋ćØć„ć†ćƒ”ćƒŖćƒƒćƒˆćŒć‚ć‚‹ć‚‚ć®ć®, å†—é•·ćŒå¤šććŖć£ćŸć‚Šå®¹é‡ćŒå¤§ćććŖ悋ćŖć©ć®ćƒ‡ćƒ”ćƒŖ惃惈悂恂悋.

fat JAR, JAR with dependenciesćØ悂恄恆. UberćÆ惉悤惄čŖžć§Overć®ę„. UberEatsćØćÆē„”関äæ‚.


JDK開ē™ŗćƒ„ćƒ¼ćƒ«ć¾ćØ悁 #

開ē™ŗć‚’č£œåŠ©ć™ć‚‹ćƒ„ćƒ¼ćƒ«ćŒć„ć‚ć„ć‚ć‚ć‚‹. ćć‚Œć‚‰ć®ć‚³ćƒžćƒ³ćƒ‰ćƒ©ć‚¤ćƒ³ćƒ„ćƒ¼ćƒ«ćÆ(恟ćØ恈恰Manjaro Linux恠ćØ), /usr/lib/jvm//default/bin ć®é…äø‹ć«ć†ć˜ć‚ƒć†ć˜ć‚ƒć‚¤ćƒ³ć‚¹ćƒˆćƒ¼ćƒ«ć•ć‚Œć¦ć„ć‚‹.

JDK恮開ē™ŗćƒ„ćƒ¼ćƒ«

  • jps: Javaćƒ—ćƒ­ć‚»ć‚¹IDē¢ŗčŖ.
  • jstack: ć‚¹ć‚æ惃ć‚Æęƒ…å ±å‡ŗ力.

jps #

JVMäøŠć§å‹•ä½œć—恦恄悋Javaćƒ—ćƒ­ć‚°ćƒ©ćƒ ć®PID悒ē¢ŗčŖ. ä»–ć®ć‚³ćƒžćƒ³ćƒ‰ć‚‚ćŸć„ć¦ć„PIDć‚’ęŒ‡å®šć—ć¦ęƒ…å ±ć‚’ē¢ŗčŖć™ć‚‹ć®ć§, ć¾ćšć“ć®ć‚³ćƒžćƒ³ćƒ‰ć‚’å©ććØć“ć‚ć‹ć‚‰ćŒčµ·ē‚¹ć«ćŖ悋.


ē¾åœØå‹•ć„ć¦ć„ć‚‹JVM恮ć‚Ŗćƒ—ć‚·ćƒ§ćƒ³ć‚’ēŸ„悋恫ćÆ,

$ jps -lvm

jcmd/jmap #

ćƒ’ćƒ¼ćƒ—ćƒ€ćƒ³ćƒ—å–å¾—.

$ jcmd <pid> GC.heap_dump heapdmp.hprof

# jmapćÆå¤ć„ć‚‰ć—ć„.
$ jmap -dump:format=b,file=./heapdump.hprof <pid>

jstat #

JVMć®ćƒ”ćƒ¢ćƒŖä½æē”Ø量čŖæęŸ».

仄äø‹ć§, 1ē§’恔ćØ恫ä½æē”Ø量悒č”Øē¤ŗ. -hć§ćƒ˜ćƒƒćƒ€ęƒ…å ±ć‚’é–“ć«ęŒŸć‚€é–“éš”ć‚’ęŒ‡å®š.

# -gc: å®Ÿéš›ć«ä½æē”Øć—ć¦ć„ć‚‹ę•°å€¤ć‚’KB恧č”Øē¤ŗ.
$ jstat -gc -h 3 <jpid> 1000
# -gcutil: å®Ÿéš›ć«ä½æē”Øć—ć¦ć„ć‚‹ę•°å€¤ć®ä½æē”ØēŽ‡(ļ¼…)悒č”Øē¤ŗ
$ jstat -gcutil -h 3 <jpid> 1000

ćƒ’ćƒ¼ćƒ—é ˜åŸŸć®ä½æē”Ø量 = (S0C + S1C + EC + OC) / 1024.

JDKć¾ćØ悁 #

OpenJDK #

Javać®ćƒ•ćƒŖćƒ¼ć‹ć¤ć‚Ŗćƒ¼ćƒ—ćƒ³ć‚½ćƒ¼ć‚¹ć®å®Ÿč£…. Oracle恌äø­åæƒć«ćŖć£ć¦é–‹ē™ŗć•ć‚Œć¦ć„ć‚‹.

åƾē¾©čŖžćÆOracle Java.


OpenJDK - Wikipedia

Zing JVM #

GCć«ć‚ˆć‚‹ć„ć‚ć‚†ć‚‹ “stop-the-world pause"恌ćŖ恄ćØ恄恆, é©šćć®GCć‚¢ćƒ«ć‚“ćƒŖć‚ŗ惠(C4)ćŒč©±é”Œć®JVM.

References #