JavaRush /Java Blog /Random-KO /Java ๋ฐ”์ดํŠธ์ฝ”๋“œ ์†Œ๊ฐœ
billybonce
๋ ˆ๋ฒจ 29
ะœะพัะบะฒะฐ

Java ๋ฐ”์ดํŠธ์ฝ”๋“œ ์†Œ๊ฐœ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
IntellijIDEA์—๋Š” JRE๊ฐ€ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ๊ถ๊ทน์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ‘œ์‹œ๋ผ๋Š” ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.(๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์ฝ๊ธฐ ์‰ฝ๋„๋ก ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ธฐ๊ณ„ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ผ๋ถ€ ํ•ด์„ํ•œ ๊ฒƒ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.) ๋ฐ”์ดํŠธ ์ฝ”๋“œ ํ‘œ์‹œ ๊ธฐ๋Šฅ์€ ์ปดํŒŒ์ผ๋œ .class ํŒŒ์ผ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์— ๋Œ€ํ•œ ์„ค๋ช…์€ Wikipedia ๋งํฌ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

๋”ฐ๋ผ์„œ ๋™์ผํ•œ ๋ผ์ธ์„ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์™œ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•˜๋ ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋–  ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ์˜ต์…˜ 1: (str1==str2๋ฅผ ๋น„๊ตํ•˜๋ฉด false๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.) ์˜ต์…˜ 2 : (str3== str4 ๋ฅผ ๋น„๊ตํ•˜๋ฉด public static void main(String[] args){ String str1 = new String("test"); String str2 = new String("test"); } true๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.) public static void main(String[] args){ String str3 = "test"; String str4 = "test"; } ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(๋Œ€๊ด„ํ˜ธ [] ์•ˆ์—๋Š” ๋ช…๋ น์ด ์‹คํ–‰๋œ ํ›„ ์Šคํƒ ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(์˜ค๋ฅธ์ชฝ ์Šคํƒ ์ƒ๋‹จ)). ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ: ์ž์„ธํ•œ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋งํฌ: src1: http://cs.au.dk/~mis /dOvs/jvmspec/ref--33.html src2: http://mihaimoldovan.com/download/Inside- Java-Virtual-Machine.pdf src3: http://en.wikipedia.org/wiki/Java_class_file#The_constant_pool src4: http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings src5: http://stackoverflow.com/questions /10209952/java-constant-pool src6: http://stackoverflow.com/questions/14150628/string-constant -pool-java ๊ทธ๋Ÿฌ๋ฉด ์™œ ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ž์—ด์ด ๊ฐ™๊ณ  ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? new String์˜ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ํ’€์ด ๋ฌด์‹œ๋˜๊ณ  ๋ฌธ์ž์—ด์˜ ์ƒˆ ๋ณต์‚ฌ๋ณธ์ด ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์ด์— ๋Œ€ํ•œ ๋งํฌ src6). ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์ด๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๋ฐ ์‹ค์ œ๋กœ ๋„์›€์ด ๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ๋” ์ ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ด ์˜ต์…˜์ด ๋” ๋‚ซ๋‹ค๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. public static main([Ljava/lang/String;)V L0 LINENUMBER 5 L0 NEW java/lang/String //ะฝะพะฒะฐั ัั‚ั€ะพะบะฐ - ะบะปะฐะดะตะผ ััั‹ะปะบัƒ ะฝะฐ ะบะปะฐัั "String "ะฝะฐ ะฒะตั€ัˆะธะฝัƒ ัั‚ะตะบะฐ: [value_string] DUP //ะบะพะฟะธั€ัƒะตะผ ััั‹ะปะบัƒ ะฝะฐ ะฒะตั€ัˆะธะฝะต ัั‚ะตะบะฐ: [value_string, value_string] LDC "test" //ะบะปะฐะดั‘ะผ ะฒ ัั‚ะตะบ ััั‹ะปะบัƒ ะฝะฐ "test" ะธะท constant pool(ะฐ ะตัะปะธ ะฒ ะฝั‘ะผ ะตั‰ะต ะฝะตั‚ ััั‹ะปะบะธ ะฝะฐ "test", //ั‚ะพ ะพะฝะฐ ั‚ะฐะบะถะต ะพัั‚ะฐะตั‚ัั ะฒ constant pool'e): [value_string, value_string, value_test] INVOKESPECIAL java/lang/String. (Ljava/lang/String;)V //ะฒั‹ะทะพะฒ new ะดะปั String ั ะฐั€ะณัƒะผะตะฝั‚ะฐะผะธ ั ะฒะตั€ัˆะธะฝั‹ ัั‚ะตะบะฐ - //ะฟะพัะปะต ะฒั‹ะทะพะฒะฐ ะธะฝะธั†ะธะฐะปะธะทะธั€ัƒัŽั‰ะตะณะพ ะผะตั‚ะพะดะฐ ะดะปั ัั‚ั€ะธะฝะณ(ะธ ะตะณะพ ะฒะฝัƒั‚ั€ะตะฝะฝะธั… ะผะฐะฝะธะฟัƒะปัั†ะธะน ัะพ ัั‚ะตะบะพะผ, //ะบะพั‚ะพั€ั‹ะต ะฐะฝะฐะปะพะณะธั‡ะฝะพ ะผะพะถะฝะพ ะฟะพัะผะพั‚ั€ะตั‚ัŒ ะฒ bytecodeะต java.lang.String ) //- ะฒ ัั‚ะตะบะต ะฑัƒะดะตั‚ link ะฝะฐ ะฟั€ะพะธะฝะธั†ะธะฐะปะธะทะธั€ะพะฒะฐะฝะฝัƒัŽ ัั‚ั€ะพะบัƒ: [value_result_string] //ะŸะพั‡ะตะผัƒ ะดะปั ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธะธ String(String) ะฝัƒะถะฝะพ ั‚ั€ะธ ะฐั€ะณัƒะผะตะฝั‚ะฐ ะฒ ัั‚ะตะบะต: //1)link ะฝะฐ ะฒั…ะพะดะฝะพะน ะฐั€ะณัƒะผะตะฝั‚ 2)ะฝะพะฒะฐั ัั‚ั€ะพะบะฐ, 3)ั…ะตัˆcode ัั‚ั€ะพะบะธ ASTORE 1 //ัะพั…ั€ะฐะฝัะตะผ ััั‹ะปะบัƒ ั ะฒะตั€ัˆะธะฝั‹ ัั‚ะตะบะฐ ะฒ ะปะพะบะฐะปัŒะฝัƒัŽ ะฟะตั€ะตะผะตะฝะฝัƒัŽ(1) ั ะฒะตั€ัˆะธะฝั‹ ัั‚ะตะบะฐ: [ ] L1 LINENUMBER 6 L1 NEW java/lang/String //ะฐะฝะฐะปะพะณะธั‡ะฝะพ ะฟะตั€ะฒะพะน ัั‚ั€ะพะบะต DUP LDC "test" INVOKESPECIAL java/lang/String. (Ljava/lang/String;)V ASTORE 2 L2 LINENUMBER 7 L2 RETURN //return void - ะบะพะผะฟะธะปัั‚ะพั€ ะดะพะฟะธัั‹ะฒะฐะตั‚ ะทะฐ ะฝะฐั ะตัะปะธ ะผะตั‚ะพะด ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ void L3 LOCALVARIABLE args [Ljava/lang/String; L0 L3 0 // ัะฟะธัะพะบ ะปะพะบะฐะปัŒะฝั‹ั… ะฟะตั€ะตะผะตะฝะฝั‹ั… ะผะตั‚ะพะดะฐ LOCALVARIABLE str3 Ljava/lang/String; L1 L3 1 // L1(ะผะตั‚ะบะฐ ะณะดะต ะพะฟะตั€ะฐั†ะธะธ ั ะปะพะบะฐะปัŒะฝะพะน ะฟะตั€ะตะผะตะฝะฝะพะน) L3(ะผะตั‚ะบะฐ ะณะดะต ะพะฟะธัะฐะฝะธะต ั‡ั‚ะพ ัั‚ะพ ะทะฐ ะปะพะบะฐะปัŒะฝะฐั ะฟะตั€ะตะผะตะฝะฝะฐั) 1(ะฝะพะผะตั€ ะปะพะบะฐะปัŒะฝะพะน ะฟะตั€ะตะผะตะฝะฝะพะน) LOCALVARIABLE str4 Ljava/lang/String; L2 L3 2 // MAXSTACK = 3 //ะผะฐะบัะธะผะฐะปัŒะฝะฐั ะณะปัƒะฑะธะฝะฐ ัั‚ะตะบะฐ ะผะตั‚ะพะดะฐ MAXLOCALS = 3 //ะบะพะปะธั‡ะตัั‚ะฒะพ ะปะพะบะฐะปัŒะฝั‹ั… ะฟะตั€ะตะผะตะฝะฝั‹ั… ะผะตั‚ะพะดะฐ // //ะขะพ ะตัั‚ัŒ ัะฝะฐั‡ะฐะปะฐ JRE ะฑัƒะดะตั‚ ะฒั‹ะดะตะปัั‚ัŒ ะฟะฐะผัั‚ัŒ ะฟั€ะธ //ะฒั‹ะทะพะฒะต ะผะตั‚ะพะดะฐ ัƒั‡ะธั‚ั‹ะฒะฐั ะฒััŽ ะฒะปะพะถะตะฝะฝะพัั‚ัŒ ะฒั‹ะทะพะฒะพะฒ ะผะตั‚ะพะดะพะฒ ะธ new - ะธะฝะธั†ะธะฐะปะธะทะฐั†ะธะน //(ะธ ะตัะปะธ ะตั‘ ะฝะต ั…ะฒะฐั‚ะธั‚ - ั‚ะพ ะฒัั‘ ะฒั‹ะปะตั‚ะธั‚ ั Howะธะผ-ะฝะธะฑัƒะดัŒ OutOfMemory //ัะบัะตะฟัˆะฝะพะผ), ะฐ ั‚ะพะปัŒะบะพ ะฟะพั‚ะพะผ ะฑัƒะดัƒั‚ ะฟั€ะพะธะทะฒะพะดะธั‚ัŒัั ะพะฟะตั€ะฐั†ะธะธ public static main([Ljava/lang/String;)V L0 LINENUMBER 5 L0 LDC "test" //ะฑะตั€ะตะผ ััั‹ะปะบัƒ ะฝะฐ "test" ะธะท constant_pool ะธ ะบะปะฐะดะตะผ ะฝะฐ ะฒะตั€ัˆะธะฝัƒ ัั‚ะตะบะฐ: [value_test] ASTORE 1 //ะทะฐะฑะธั€ะฐะตะผ ััั‹ะปะบัƒ ั ะฒะตั€ัˆะธะฝั‹ ัั‚ะตะบะฐ ะฒ ะฟะตั€ะตะผะตะฝะฝัƒัŽ(1) str1 : [ ] L1 LINENUMBER 6 L1 LDC "test" //ะฑะตั€ะตะผ ััั‹ะปะบัƒ ะฝะฐ "test" ะธะท constant_pool ะธ ะบะปะฐะดะตะผ ะฝะฐ ะฒะตั€ัˆะธะฝัƒ ัั‚ะตะบะฐ: [value_test] ASTORE 2 //ะทะฐะฑะธั€ะฐะตะผ ััั‹ะปะบัƒ ั ะฒะตั€ัˆะธะฝั‹ ัั‚ะตะบะฐ ะฒ ะฟะตั€ะตะผะตะฝะฝัƒัŽ(2) str2: [ ] L2 LINENUMBER 7 L2 RETURN //return void (ะบะพั‚ะพั€ั‹ะน ะบะพะผะฟะธะปัั‚ะพั€ ะดะพะฟะธัั‹ะฒะฐะตั‚ ะทะฐ ะฝะฐั How ัƒัะฟะตัˆะฝั‹ะน ะบะพะฝะตั† ะผะตั‚ะพะดะฐ) L3 LOCALVARIABLE args [Ljava/lang/String; L0 L3 0 //ัะฟะธัะพะบ ะปะพะบะฐะปัŒะฝั‹ั… ะฟะตั€ะตะผะตะฝะฝั‹ั…, ะฟะพะด ะบะพั‚ะพั€ั‹ะต ะฒั‹ะดะตะปัะตั‚ัั ะฟะฐะผัั‚ัŒ LOCALVARIABLE str1 Ljava/lang/String; L1 L3 1 //ะฝะฐะฟั€ะธะผะตั€: L1(ะผะตั‚ะบะฐ ะณะดะต ะทะฐะฟะธัะฐะฝ code) L3(ะผะตั‚ะบะฐ ะณะดะต ะพะฟะธัะฐะฝ ั‚ะธะฟ an object ะธ ะฒั‹ะดะตะปัะตั‚ัั ะฟะฐะผัั‚ัŒ) 1(ะปะพะบะฐะปัŒะฝั‹ะน ะฝะพะผะตั€ an object) LOCALVARIABLE str2 Ljava/lang/String; L2 L3 2 // MAXSTACK = 1 //ะผะฐะบัะธะผะฐะปัŒะฝะฐั ะณะปัƒะฑะธะฝะฐ ัั‚ะตะบะฐ ะดะปั ะผะตั‚ะพะดะฐ MAXLOCALS = 3 //ะบะพะปะธั‡ะตัั‚ะฒะพ ะปะพะบะฐะปัŒะฝั‹ั… ะฟะตั€ะตะผะตะฝะฝั‹ั… ะผะตั‚ะพะดะฐ



์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION