18๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์ Oracle์ OpenJDK ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ์ฐธ์กฐ ๊ตฌํ์ผ๋ก ์ฌ์ฉํ๋ Java SE 18(Java Platform, Standard Edition 18) ํ๋ซํผ์ ์ถ์ํ์ต๋๋ค. ์ฌ์ฉ๋์ง ์๋ ์ผ๋ถ ๊ธฐ๋ฅ์ด ์ ๊ฑฐ๋ ๊ฒ์ ์ ์ธํ๊ณ Java SE 18์ Java ํ๋ซํผ์ ์ด์ ๋ฆด๋ฆฌ์ค์์ ํ์ ํธํ์ฑ์ ์ ์งํฉ๋๋ค. ์ด์ ์ ์์ฑ๋ ๋๋ถ๋ถ์ Java ํ๋ก์ ํธ๋ ์ ๋ฒ์ ์์ ์คํ๋ ๋ ์์ ์์ด ๊ณ์ ์๋ํฉ๋๋ค. Java SE 86(JDK, JRE ๋ฐ Server JRE)์ ๋ฐ๋ก ์ค์น ๊ฐ๋ฅํ ๋น๋๋ Linux(x64_64, AArch86), Windows(x64_86) ๋ฐ macOS(x64_64, AArch18)์ฉ์ผ๋ก ์ค๋น๋์ด ์์ต๋๋ค. OpenJDK ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ Java 2 ์ฐธ์กฐ ๊ตฌํ์ ์์ฉ ์ ํ์ ๋ํ ๋์ ์ฐ๊ฒฐ์ ํ์ฉํ๊ธฐ ์ํด GNU ClassPath ์์ธ๊ฐ ์๋ GPLvXNUMX ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์์ ํ ๊ฐ๋ฐฉ๋ฉ๋๋ค.
Java SE 18์ ์ผ๋ฐ ์ง์ ๋ฆด๋ฆฌ์ค๋ก ๋ถ๋ฅ๋๋ฉฐ ๋ค์ ๋ฆด๋ฆฌ์ค ์ ์ ์ ๋ฐ์ดํธ๊ฐ ๋ฆด๋ฆฌ์ค๋ฉ๋๋ค. ์ฅ๊ธฐ ์ง์(LTS) ๋ถ๊ธฐ๋ Java SE 17์ด์ด์ผ ํ๋ฉฐ 2029๋ ๊น์ง ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ต๋๋ค. Java 10 ๋ฆด๋ฆฌ์ค๋ถํฐ ํ๋ก์ ํธ๊ฐ ์ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ก ์ ํ๋์ด ์ ๋ฆด๋ฆฌ์ค ํ์ฑ ์ฃผ๊ธฐ๊ฐ ๋ ์งง์์ก๋ค๋ ์ ์ ๊ธฐ์ตํ์ญ์์ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ด์ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ํ๋์ ๋ง์คํฐ ๋ธ๋์น์์ ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. ๋ง์คํฐ ๋ธ๋์น๋ ์ด๋ฏธ ์๋ฃ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํตํฉํ๊ณ ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์์ ํํ๊ธฐ ์ํด XNUMX๊ฐ์๋ง๋ค ๋ธ๋์น๊ฐ ๋ถ๊ธฐ๋ฉ๋๋ค.
Java 18์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ์ UTF-8์ ๋๋ค. ๋ฌธ์ ์ธ์ฝ๋ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ Java API๋ ์ด์ ์์คํ ์ค์ ๋ฐ ๋ก์ผ์ผ ์ค์ ์ ๊ด๊ณ์์ด ๋ชจ๋ ํ๋ซํผ์์ ๊ธฐ๋ณธ์ ์ผ๋ก UTF-8์ ์ฌ์ฉํฉ๋๋ค. ์์คํ ๋ก์ผ์ผ์ ๋ฐ๋ผ ์ธ์ฝ๋ฉ์ด ์ ํ๋๋ ์ด์ ๋์์ผ๋ก ๋๋๋ฆฌ๋ ค๋ฉด "-Dfile.encoding=COMPAT" ์ต์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํจํค์ง์๋ jwebserver ์ ํธ๋ฆฌํฐ์ ์ ์ ์ฝํ ์ธ ์ ๊ณต์ ์ํ ๊ฐ๋จํ http ์๋ฒ ๊ตฌํ๊ณผ ํจ๊ป ๋ผ์ด๋ธ๋ฌ๋ฆฌ API๊ฐ ํฌํจ๋ com.sun.net.httpserver ํจํค์ง๊ฐ ํฌํจ๋์ด ์์ต๋๋ค(CGI ๋ฐ ์๋ธ๋ฆฟ๊ณผ ์ ์ฌํ ํธ๋ค๋ฌ๋ ์ง์๋์ง ์์). ๋ด์ฅ๋ HTTP ์๋ฒ๋ ์ํฌ๋ก๋์ ์ต์ ํ๋์ด ์์ง ์์ผ๋ฉฐ ์ฃผ๋ก ํ๋ก์ ํธ ํ๋กํ ํ์ ์ ์, ๋๋ฒ๊น ๋ฐ ํ ์คํธ๋ฅผ ์ํ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ์ด๋ฏ๋ก ์ก์ธ์ค ์ ์ด ๋ฐ ์ธ์ฆ์ ์ง์ํ์ง ์์ต๋๋ค.
- JavaDoc์ ์ ํจ์ฑ ๊ฒ์ฌ ๋๊ตฌ, ๊ตฌ๋ฌธ ๊ฐ์กฐ ๋ฐ IDE ํตํฉ์ ์ฌ์ฉํ ์ ์๋ API ๋ฌธ์์ ์์ ์์ ์ ์ฝ๋ ์กฐ๊ฐ์ ํฌํจํ ์ ์๋ "@snippet" ํ๊ทธ์ ๋ํ ์ง์์ ์ ๊ณตํฉ๋๋ค.
- ํด๋์ค์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํ ์ก์ธ์ค๋ ๋ฌผ๋ก ๋ฉ์๋, ํ๋ ๋ฐ ํด๋์ค ์์ฑ์์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ์ค๊ณ๋ java.lang.reflect API(Core Reflection)์ ๊ตฌํ์ด ์ฌ์ค๊ณ๋์์ต๋๋ค. java.lang.reflect API ์์ฒด๋ ๋ณ๊ฒฝ๋์ง ์์์ง๋ง ์ด์ ๋ฐ์ดํธ์ฝ๋ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๋์ java.lang.invoke ๋ชจ๋์์ ์ ๊ณตํ๋ ๋ฉ์๋ ํธ๋ค์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ์ ํตํด ์ฐ๋ฆฌ๋ java.lang.reflect ๋ฐ java.lang.invoke์ ๊ตฌํ์ ํตํฉํ๊ณ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ ์ ์์์ต๋๋ค.
- x86_64 ๋ฐ AArch64 ํ๋ก์ธ์์์ ๋ฒกํฐ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์คํ๋๊ณ ์์ ์ ์ฌ๋ฌ ๊ฐ(SIMD)์ ๋์์ ์ ์ฉํ ์ ์๋ ๋ฒกํฐ ๊ณ์ฐ์ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Vector API์ ์ธ ๋ฒ์งธ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๊ฐ ์ ์๋์์ต๋๋ค. ์ค์นผ๋ผ ์์ ์ ์๋ ๋ฒกํฐํ๋ฅผ ์ํด HotSpot JIT ์ปดํ์ผ๋ฌ์์ ์ ๊ณต๋๋ ๊ธฐ๋ฅ๊ณผ ๋ฌ๋ฆฌ ์ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๋ ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ฒกํฐํ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค.
- ํธ์คํธ ์ด๋ฆ ๋ฐ IP ์ฃผ์๋ฅผ ํ์ธํ๊ธฐ ์ํ SPI ์ธํฐํ์ด์ค(์๋น์ค ์ ๊ณต์ ์ธํฐํ์ด์ค)๊ฐ ์ถ๊ฐ๋์ด ์ด์ ์ฒด์ ์์ ์ ๊ณตํ๋ ํธ๋ค๋ฌ์ ์ฐ๊ฒฐ๋์ง ์์ java.net.InetAddress์ ๋์ฒด ํ์ธ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Foreign Function & Memory API์ ๋ ๋ฒ์งธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ ๊ณต๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ด Java ๋ฐํ์ ์ธ๋ถ์ ์ฝ๋ ๋ฐ ๋ฐ์ดํฐ์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค. ์๋ก์ด API๋ฅผ ์ฌ์ฉํ๋ฉด JVM์ด ์๋ ํจ์๋ฅผ ํจ์จ์ ์ผ๋ก ํธ์ถํ๊ณ JVM์ด ๊ด๋ฆฌํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด JNI๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ธ๋ถ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํจ์๋ฅผ ํธ์ถํ๊ณ ํ๋ก์ธ์ค ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
- "์ค์์น" ํํ์์์ ํจํด ์ผ์น์ ๋ ๋ฒ์งธ ์คํ์ ๊ตฌํ์ด ์ถ๊ฐ๋์ด ์ ํํ ๊ฐ ๋์ "์ผ์ด์ค" ๋ ์ด๋ธ์ ์ ์ฐํ ํจํด์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ผ๋ฉฐ, ์ด์ ์๋ ์ฌ์ฉํด์ผ ํ๋ ์ผ๋ จ์ ๊ฐ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์์ต๋๋ค. "if...else" ํํ์์ ๋ฒ๊ฑฐ๋ก์ด ์ฒด์ธ. ๊ฐ์ฒด o = 123L; ๋ฌธ์์ด ํ์ = ์ค์์น (o) { ์ผ์ด์ค ์ ์ i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); ๊ธฐ๋ณธ๊ฐ -> o.toString(); };
- Object.finalize(), Enum.finalize(), Runtime.runFinalization() ๋ฐ System.runFinalization()๊ณผ ๊ฐ์ ๋ง๋ฌด๋ฆฌ ๋ฉ์ปค๋์ฆ ๋ฐ ๊ด๋ จ ๋ฉ์๋๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ํฅํ ๋ฆด๋ฆฌ์ค์์๋ ๋นํ์ฑํ๋ ์์ ์ ๋๋ค.
- ZGC(Z Garbage Collector), SerialGC ๋ฐ ParallelGC ๊ฐ๋น์ง ์์ง๊ธฐ๋ ํ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ง์ํฉ๋๋ค.
์ถ์ฒ : opennet.ru