Java SE 23 ๋ฐ OpenJDK 23 ์ถœ์‹œ

์˜ค๋ผํด์€ 6๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ์˜คํ”ˆ ์†Œ์Šค OpenJDK ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐ ๊ตฌํ˜„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Java SE 23(Java ํ”Œ๋žซํผ, ํ‘œ์ค€ ์—๋””์…˜ 23)๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ฑฐ๋œ ๊ฒƒ์„ ์ œ์™ธํ•˜๋ฉด, Java SE 23๋Š” ์ด์ „ Java ํ”Œ๋žซํผ ๋ฆด๋ฆฌ์Šค์™€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ „์— ์ž‘์„ฑ๋œ ๋Œ€๋ถ€๋ถ„์˜ Java ํ”„๋กœ์ ํŠธ๋Š” ์ƒˆ ๋ฒ„์ „์—์„œ ๋ณ€๊ฒฝ ์—†์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. Java SE 22(JDK, JRE ๋ฐ ์„œ๋ฒ„ JRE)์˜ ์„ค์น˜ ์ค€๋น„ ์™„๋ฃŒ ๋นŒ๋“œ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Linux (x86_64, AArch64) Windows (x86_64) ๋ฐ macOS (x86_64, AArch64). OpenJDK ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ Java 23 ์ฐธ์กฐ ๊ตฌํ˜„์€ GPLv2 ๋ผ์ด์„ ์Šค ํ•˜์— ์™„์ „ํ•œ ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ, GNU ClassPath ์˜ˆ์™ธ ์กฐํ•ญ์ด ์ ์šฉ๋˜์–ด ์ƒ์šฉ ์ œํ’ˆ๊ณผ์˜ ๋™์  ๋งํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Java SE 23์€ ์ •๊ธฐ ์ง€์› ๋ฆด๋ฆฌ์Šค๋กœ ๋ถ„๋ฅ˜๋˜๋ฉฐ, ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๊นŒ์ง€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์žฅ๊ธฐ ์ง€์›(LTS) ๋ฆด๋ฆฌ์Šค๋Š” Java SE 21 ๋˜๋Š” Java SE 17์ด๋ฉฐ, ๊ฐ๊ฐ 2031๋…„๊ณผ 2029๋…„๊นŒ์ง€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ 2028๋…„๊ณผ 2026๋…„๊นŒ์ง€ ์ œ๊ณต). Java SE 8 LTS ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์—ฐ์žฅ ์ง€์›์€ 2030๋…„๊นŒ์ง€, Java SE 11์€ 2032๋…„๊นŒ์ง€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

Java SE์—์„œ ์ œ์•ˆ๋œ 23๊ฐ€์ง€ ํ˜์‹  ์ค‘:

  • ZGC(Generational Z Garbage Collector) ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์ƒ์„ฑ ๋ชจ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ๋Š” "์˜ค๋ž˜๋œ" ๊ฐ์ฒด์™€ "์ƒˆ๋กœ์šด" ๊ฐ์ฒด๋ฅผ ๋ณ„๋„๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ˆ˜๋ช…์ด ์งง์€ ์ตœ๊ทผ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ •๋ฆฌํ•˜๋Š” ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. Generational ZGC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ํ• ๋‹น ์ค‘ ์ผ์‹œ ์ค‘๋‹จ ์œ„ํ—˜์„ ์ค„์ด๊ณ  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ค‘ CPU ๋ถ€ํ•˜์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Apache Cassandra 4์—์„œ Generational ZGC๋ฅผ ํ…Œ์ŠคํŠธํ•œ ๊ฒฐ๊ณผ, ๊ณ ์ •๋œ ํž™ ํฌ๊ธฐ์—์„œ๋Š” ์ฒ˜๋ฆฌ๋Ÿ‰์ด 4๋ฐฐ ์ฆ๊ฐ€ํ–ˆ๊ณ , ์ฒ˜๋ฆฌ๋Ÿ‰์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ํž™ ํฌ๊ธฐ์—์„œ๋Š” XNUMX๋ถ„์˜ XNUMX๋กœ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.
  • JavaDoc์€ HTML๊ณผ JavaDoc @ ํƒœ๊ทธ๋ฅผ ํ˜ผํ•ฉํ•˜๋Š” ๋Œ€์‹  Markdown ๋งˆํฌ์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์„์— ์ฝ”๋“œ๋ฅผ ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
     Java SE 23 ๋ฐ OpenJDK 23 ์ถœ์‹œ
  • ํŒจํ„ด ๋งค์นญ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ…œํ”Œ๋ฆฟ, instanceof ์—ฐ์‚ฐ์ž ๋ฐ switch ๋ธ”๋ก์—์„œ ๊ธฐ๋ณธ ์œ ํ˜•(int, byte, char ๋ฐ ๊ธฐํƒ€ ๊ธฐ๋ณธ์ ์ธ ๋น„๊ฐ์ฒด ์œ ํ˜•)์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ๋น„ ์ง€์›์œผ๋กœ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { โ€ฆ b โ€ฆ }
  • ๋‹จ์ผ "import module M" ๋ช…๋ น๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ชจ๋“ˆ์—์„œ ๋‚ด๋ณด๋‚ธ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์ „ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํด๋ž˜์Šค๋ฅผ ํŒจํ‚ค์ง€ ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๋ชจ๋“ˆํ˜• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์žฌ์‚ฌ์šฉ์„ ํฌ๊ฒŒ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "import module java.base"๋ฅผ ์ง€์ •ํ•˜๋ฉด java.base ๋ชจ๋“ˆ์— ํฌํ•จ๋œ 54๊ฐœ์˜ ๋ชจ๋“  ํŒจํ‚ค์ง€๊ฐ€ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋ฉฐ, ์ด์ „์—๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฐธ์กฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค("import java.io.*", "import java.util.*" ๋“ฑ).

    Java ํด๋ž˜์Šค ํŒŒ์ผ์„ ๊ตฌ๋ฌธ ๋ถ„์„, ์ƒ์„ฑ ๋ฐ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค ํŒŒ์ผ API์˜ ๋‘ ๋ฒˆ์งธ ์ดˆ์•ˆ์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce instanceof MethodModel mm && mm.methodName().stringValue().startsWith(ยซdebugยป))) { classBuilder.with(ce); } } });

  • ์ด๋Š” x86_64 ๋ฐ AArch64 ํ”„๋กœ์„ธ์„œ์˜ ๋ฒกํ„ฐ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋˜๋Š” ๋ฒกํ„ฐ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์—ฌ๋Ÿฌ ๊ฐ’์— ๋™์‹œ์— ์—ฐ์‚ฐ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”(SIMD) ๋ฒกํ„ฐ API์˜ XNUMX๋ฒˆ์งธ ์˜ˆ๋น„ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. HotSpot JIT ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์Šค์นผ๋ผ ์—ฐ์‚ฐ ์ž๋™ ๋ฒกํ„ฐํ™”์™€ ๋‹ฌ๋ฆฌ, ์ƒˆ๋กœ์šด API๋Š” ๋ณ‘๋ ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ฒกํ„ฐํ™”๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • java.io.Console ํด๋ž˜์Šค๊ฐ€ ์„ ํƒ๋œ ๋กœ์บ˜์— ๋”ฐ๋ผ ํ…์ŠคํŠธ๋ฅผ ํฌ๋งทํ•˜๊ณ , ํ‘œ์‹œํ•˜๊ณ , ์ฝ์„ ์ˆ˜ ์žˆ๋Š” format, printf, readPassword, readLine ๋ฉ”์„œ๋“œ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. System.console().printf(Locale.FRANCE, "%1$tY-%1$tB-%1$te %1$tA", new Date()) 2024๋…„ 16์›” XNUMX์ผ ๋ชฉ์š”์ผ
  • ์‚ฌ์šฉ์ž ์ •์˜ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ๋œ Stream API์˜ ๋‘ ๋ฒˆ์งธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด ๋‚ด์žฅ ์ค‘๊ฐ„ ์—ฐ์‚ฐ์œผ๋กœ๋Š” ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ƒˆ๋กœ์šด ์ค‘๊ฐ„ ์—ฐ์‚ฐ Stream::gather(Gatherer)๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜๋ฉฐ, ์ด ์—ฐ์‚ฐ์€ ์‚ฌ์šฉ์ž ์ •์˜ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ŠคํŠธ๋ฆผ ์š”์†Œ์— ์ ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
  • "main" ๋ฉ”์„œ๋“œ์˜ ์•”๋ฌต์ ์œผ๋กœ ์„ ์–ธ๋œ ํด๋ž˜์Šค์™€ ๋ช…๋ช…๋˜์ง€ ์•Š์€ ์ธ์Šคํ„ด์Šค์˜ ์„ธ ๋ฒˆ์งธ ์˜ˆ๋น„ ๊ตฌํ˜„์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌํ˜„์—์„œ๋Š” public/static ์„ ์–ธ์ด ํ•„์š” ์—†๊ณ  ์ธ์ˆ˜ ๋ฐฐ์—ด๊ณผ ํด๋ž˜์Šค ์„ ์–ธ๊ณผ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. // was public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // ์ด์ œ void main() { System.out.println("Hello, World!"); }
  • ํŒŒ์ƒ ํด๋ž˜์Šค ์ƒ์„ฑ์ž์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด super(โ€ฆ)๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ƒ์„ฑ์ž๊ฐ€ ํ‘œํ˜„์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ๋‘ ๋ฒˆ์งธ ์ดˆ์•ˆ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ํ•ด๋‹น ํ‘œํ˜„์‹์ด ์ƒ์„ฑ์ž๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); super(); } } }
  • ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ ๊ฐ’์˜ ์„ธ ๋ฒˆ์งธ ์˜ˆ๋น„ ๊ตฌํ˜„์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๊ณต์œ ํ•˜๊ณ  ์ž์‹ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๊ฐ’์ด ์ƒ์†๋จ). ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ ๊ฐ’์€ ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ๋ณ€์ˆ˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋งค์šฐ ๋งŽ์€ ์ˆ˜์˜ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ(์ˆ˜์ฒœ, ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋”์šฑ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ ๊ฐ’๊ณผ ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ๋ณ€์ˆ˜์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ ๊ฐ’์€ ํ•œ ๋ฒˆ๋งŒ ์ž‘์„ฑ๋˜๊ณ  ๋‚˜์ค‘์— ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๊ตฌ์กฐ์  ๋™์‹œ์„ฑ API์˜ ์„ธ ๋ฒˆ์งธ ์ดˆ์•ˆ์ด ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๊ณต๊ฐœ๋˜์—ˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋‹จ์ผ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • sun.misc.Unsafe ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์™ธ๋ถ€(JVM ์™ธ๋ถ€) ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฉ”์„œ๋“œ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์‚ญ์ œ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์˜คํ”„ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ณ  ์™ธ๋ถ€ ์ฝ”๋“œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋ ค๋ฉด VarHandle API์™€ FFM(Foreign Function & Memory) API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค JavaFX 23์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ๊ณ , ์ฃผ์š” Oracle JDK 23์— GraalVM JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌํ•จ๋˜์—ˆ๋‹ค๋Š” ์ ๋„ ์ฃผ๋ชฉํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค.

๋ฒ”์šฉ ๊ฐ€์ƒ ๋จธ์‹  GraalVM์˜ ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค๋„ ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฆด๋ฆฌ์Šค๋Š” JavaScript(Node.js), Python, Ruby, R, JVM์šฉ ์–ธ์–ด(Java, Scala, Clojure, Kotlin) ๋ฐ LLVM ๋น„ํŠธ์ฝ”๋“œ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•œ ์–ธ์–ด(C, C++, Rust)๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. JDK 23์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„, ์ƒˆ ๋ฒ„์ „์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์‹คํ–‰ ์ฝ”๋“œ ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ณ , JIT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ Python ๋ฐ WebAssembly๋ฅผ Java ์ฝ”๋“œ์— ์ž„๋ฒ ๋“œํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster