java9 특징 훑어보기
TRANSCRIPT
Java 9
software campus
1. Java 버젼 히스토리 2. 알아두면 좋을 내용들 - JCP, JSR, JEP 3. Java 9 에서 변화된 부분 4. Jigsaw project (주요 프로젝트) 5. Java 9에서 자주 사용할만한 것들 6. Java 9, 그 이후
Java 9
software campus
1. Java 의 버젼 히스토리
1. Java의 버젼 히스토리
software campus
Java 9
Java 의 현재까지의 버젼 출시과정
참고, Arkadiusz Sokolwski 2015
1. Java의 버젼 히스토리
software campus
Java 9
http://openjdk.java.net/projects/jdk9/
연기
1. Java의 버젼 히스토리
software campus
Java 9
Java 9 릴리즈 되는 시점 - 연기이유https://www.infoq.com/news/2015/12/oracle-confirms-delayed-java9
Project Jigsaw
Java 9
software campus
2. 알아두면 좋을 내용들 - JCP, JSR, JEP
2. 알아두면 좋을 내용들 - JCP, JSR, JEP
software campus
Java 9
(Java 8 이후 일정) . Java 8 이후에는 2년 간격으로 새로운 버전을 내놓을 예정 . Java 8 에 Self-Tuning JVM, Native 지원 강화, Big Data (2GB 이상 지원), Tail Calls/Continuation, Meta-Object 프로토콜, Multi-Tenancy, 자원 관리 등 . Java 9의 JDK9에 대해 알고 싶으면 다음의 두 사이트를 참고하기 바란다.
- http://openjdk.java.net/projects/jdk9 - http://jdk9.java.net
2. 알아두면 좋을 내용들 - JCP, JSR, JEP
software campus
Java 9
(JDK 9) - JDK 9 프로젝트의 목적은 Java SE 9 플랫폼의 오픈소스 참조문서를 만들어 내는 것이다. 또한 JCP 체제하에서 이번의 JSR(Java 상세 명세서)을 정의하는 것이다.(The goal of this Project is to produce an open-source reference implementation of the Java SE 9 Platform, to be defined by a forthcoming JSR in the Java Community Process.)
이번 릴리즈 버젼의 스케쥴과 특징은 JEP 2.0의 제안에 의해 개정된 JEP 과정을 통해 제안되고, 추적된다. (The schedule and features of this release are proposed and tracked via the JEP Process, as amended by the JEP 2.0 proposal.)
2. 알아두면 좋을 내용들 - JCP, JSR, JEP
software campus
Java 9
(용어정리)*JCP(Java Community Process) : Java 기술의 표준 기술 명세서를 개발하는 체제(시스템)이다. (The JCP is the mechanism for developing standard technical specifications for Java technology.)
*JSR(Java Specification Requests Java 요구사항 상세 명세서) : Java 플랫폼에 제안된 실제 명세서와 최종결정된 명세서
(Java Specification Requests (JSRs) are the actual descriptions of proposed and final specifications for the Java platform.)
*JEP(JDK Enhancement Proposal) : Java Development Kit 과 OpenJDK을 향상시키기 위한 제안들을 모으는 오라클의 밑그림을 그리는 처리방법 이다. 오라클에서 JEP는 JDK 릴리즈 프로젝트와 연관된 노력에 대한 장기 로드맵 역할을 한다.
(The JDK Enhancement Proposal (or JEP) is a process drafted by Oracle Corporation for collecting proposals for enhancements to the Java Development Kit and OpenJDK. In the words of Oracle, the JEP serve as the long-term Roadmap for JDK Release Projects and related efforts.)
2. 알아두면 좋을 내용들 - JCP, JSR, JEP
software campus
Java 9
OpenJDK
Sun(현재 Oracle)이 JDK 7을 개발하기 시작할 때 이전과 다른 점이 하나 있었는데, Sun이 JDK를 오픈소스화 하기 위해 2007년 OpenJDK를 만들었다는 것이다. (OpenJDK는 완전한 Free의 오픈소스 코드를 기반으로 Fully buildable한 Java Development Kit을 배포하기 위한 Sun의 노력이다.)
Sun이 3rd-Party 라이브러리의 저작권자에게 오픈소스로 공개할 수 있도록 설득하고자 했으나 잘되지 않았고, 저작권자가 오픈소스화를 거부한 일부 컴포넌트를 제외한 나머지 JDK 소스코드 전부를 OpenJDK에 제공했고, OpenJDK는 이를 기반으로 이외의 컴포넌트들의 대안 코드를 마련하면서 JDK7 프로젝트를 시작했다.
참고 : http://stunstun.tistory.com/222
2. 알아두면 좋을 내용들 - JCP, JSR, JEP
software campus
Java 9
OpenJDK vs OracleJDK
Oracle JDK는 OpenJDK의 JDK7 기반에 추가로 OpenJDK에 포함되지 않은 Component까지 모두 갖춘 프로젝트이다.
아래와 같이 Vendor에 의한 분리된 Version이 존재하는데, . Oracle’s JDK (Commertial support from oracle) . OpenJDK, the open source java
JDK7 이전 OpenJDK는 Oracle JDK에 비해 누락된 기능 및 성능이슈가 존재 현재는 *java-web-plugin(http://en.wikipedia.org/wiki/IcedTea - 저작권이 있는 라이브러리의 대안으로 작성된)을 제외하고는 정확하게 같다고 볼 수 있다. 몇몇 사람들은 아직도 OpenJDK가 Oracle JDK에 비해 성능이 떨어진다고 하지만, 이것은 근거없는 말이다.
두 Version은 모두 Java SE 7 JSR(JSR 336) Spec 을 구현하였다.
*IcedTea : 개발자들이 OpenJDK를 좀 더 쉽게 빌드하고 배포하는데 초점을 맞춘 프로젝트이다.
참고 : http://stunstun.tistory.com/222
Java 9
software campus
3. Java 9 에서 변화된 부분
3. Java 9 에서 변화된 부분
software campus
Java 9
http://openjdk.java.net/projects/jdk9/
3. Java 9 에서 변화된 부분
software campus
Java 9
JEPs targeted to JDK 9, so far
3. Java 9 에서 변화된 부분
software campus
Java 9
JEPs targeted to JDK 9, so far
3. Java 9 에서 변화된 부분
software campus
Java 9
JEPs targeted to JDK 9, so far - 체크 해볼만한 내용들( Jigsaw Project ) 200 : The Modular JDK 201 : Modular Source Code 275 : Modular Java Application Packaging
110 : HTTP 2 Client
223 : New Version-String Scheme
( deprecated ) 289 : Deprecate the Applet API 211 : Elide Deprecation Warnings on Import Statements 214 : Remove GC Combinations Deprecated in JDK 8 277 : Enhanced Deprecation
224 : HTML5 javadoc 222 : jshell : The Java Shell ( Read-Eval-Print Loop)
Java 9
software campus
4. Jigsaw project (주요 프로젝트)
4. Jigsaw project (주요 프로젝트)
software campus
Java 9
Jigsaw Project
jigsaw 는 프로젝트로 따로 떨어져 있으며, JSR 번호 중에 옆에 적혀있는 것들을 체크해 보면 될것 같다.
4. Jigsaw project (주요 프로젝트)
software campus
Java 9
software campus
Java 9 Jigsaw 그림
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Eclipse Neon with Java 9 Jigsaw
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Java 8
4. Jigsaw project (주요 프로젝트) Java 9
Java 9
software campus
Motivation : . JAR/classpath hell reduction . unexpressed/transitive dependencies . manual dependencies management . hide some (private) packages; com.sun.misc.* . system instead of manual security . JRE size reduction
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw 자주 사용하는 라이브러리 그림
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Modules for Java - Jigsaw
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw example
module com.foo.app{ requires com.foo.bar; requires java.sql; }
module java.sql{ requires java.logging; requires java.xml; exports java.sql; exports javax.sql; exports javax.transaction.xa; }
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw example
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw - implied readabilitymodule java.sql{ requires public java.logging; requires public java.xml; exports java.sql; exports javax.sql; exports javax.transaction.xa;}
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw - implied readability
String url = …;Properties props = …;Driver d = DriverManager.getDriver(url);Connection c = d.connect(url,props);d.getParentLogger().info(“Connection acquired”);
4. Jigsaw project (주요 프로젝트) Java 9
software campus
implied readability
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw - services
module com.mysql.jdbc{ requires java.sql; requires org.slf4j; exports com.mysql.jdbc;}
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw - services
module java.sql{ requires public java.logging; requires public java.xml; exports java.sql; exports javax.sql; exports javax.transaction.xa; uses java.sql.Driver;}
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw - servicesmodule com.mysql.jdbc{ requires java.sql; requires org.slf4j; exports com.mysql.jdbc; provides java.sql.Driver with com.mysql.jdbc.Driver;}
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw - services
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw - qualified exportsmodule java.base{ … exports sun.reflect to java.corba, java.logging, java.sql, java.sql.rowset, jdk.scripting.nashorn;}
4. Jigsaw project (주요 프로젝트) Java 9
software campus
Jigsaw - qualified exports
4. Jigsaw project (주요 프로젝트) Java 9
Java 9
software campus
5. Java 9에서 자주 사용할만한 것들. 223 : New Version-String Scheme . 110 : HTTP 2 Client
( deprecated ) . 289 : Deprecate the Applet API . 211 : Elide Deprecation Warnings on Import Statements . 214 : Remove GC Combinations Deprecated in JDK 8 . 277 : Enhanced Deprecation
software campus
Java 9
. 223 : New Version-String Scheme -1
참고, Arkadiusz Sokolwski 2015
5. Java 9에서 자주 사용할만한 것들
software campus참고, Arkadiusz Sokolwski 2015
• MAJOR.MINOR.SECURITY
1.8.0 -> 8.0.01.8.0_05 -> 8.0.11.8.0_11 -> 8.0.21.8.0_20 -> 8.1.21.8.0_25 -> 8.1.3
Java 95. Java 9에서 자주 사용할만한 것들
. 223 : New Version-String Scheme -2
software campus
Java 95. Java 9에서 자주 사용할만한 것들
. 223 : New Version-String Scheme -3
http://openjdk.java.net/jeps/223
software campus
Java 9
참고, Arkadiusz Sokolwski 2015
HttpReponse response = HttpRequest .create(new URI(“http://www.ocado.com”)) .body(noBody()) .GET().send();int responseCode = response.responseCode();String responseBody = response.body(asString());System.out.println(responseBody);
. 110 : HTTP 2 Client -1
5. Java 9에서 자주 사용할만한 것들
software campus참고, Arkadiusz Sokolwski 2015
HttpReponse response = HttpRequest .create(new URI(“http://www.ocado.com”)) .body(noBody()) .GET();CompletableFuture<HttpResponse> asyncResp = req.sendAsync();Thread.sleep(10);if(!asyncResp.isDone()){ asyncResp.cancel(true); System.err.println(“timeout”); return;}HttpResponse réponse = asyncResp.get();
Java 95. Java 9에서 자주 사용할만한 것들
. 110 : HTTP 2 Client -2
software campus
( deprecated ) 289 : Deprecate the Applet API 211 : Elide Deprecation Warnings on Import Statements 214 : Remove GC Combinations Deprecated in JDK 8 277 : Enhanced Deprecation
Java 95. Java 9에서 자주 사용할만한 것들
software campus
( deprecated ) 289 : Deprecate the Applet API
Java 95. Java 9에서 자주 사용할만한 것들
웹 브라우저 업체들의 Java Browser Plug-in의 삭제로 인해, 앞으로 개발되는 Java 프로그램들은 Web Start 프로그램 형태나 Installable 어플리케이션 형태로 개발 유도
software campus
( deprecated ) 211 : Elide Deprecation Warnings on Import Statements
Java 95. Java 9에서 자주 사용할만한 것들
자바 SE 8에서, 자바 컴파일러는 사용되지 않는 유형이 이름으로 가져올 때 또는 사용되지 않는 멤버 (메서드, 필드, 중첩 된 유형) 정적으로 가져올 때 사용 중단 경고를하기 위해 Java 언어 사양의 합리적인 해석이 필요하다. 사용하지 않는 부분의 경고에 대한 부분이 Deprecate 되는 것 같다.
software campus
( deprecated ) 214 : Remove GC Combinations Deprecated in JDK 8
Java 95. Java 9에서 자주 사용할만한 것들
이전에 JEP 173를 통해 JDK 8에서 사용되지 않는 한 GC 조합을 제거한다.
software campus
( deprecated ) 277 : Enhanced Deprecation
Java 95. Java 9에서 자주 사용할만한 것들
사용되지 않는 주석을 개조하고, API 수명주기를 강화하는 도구를 제공
Java 9
software campus
6. Java 9, 그 이후
5. Java 9, 그 이후
software campus
Java 9
java 10 : value classes
value class Point{ int x; int y; Point(int x, int y){ this.x = x; this.y = y; }}
5. Java 9, 그 이후
software campus
Java 9
java 10 : generics
Reified GenericsGenerics with values
List<int> intList = new ArrayList<>();… int val = intList.get(0);class List$Point{ Point get(Point index); }
Java 9
software campus
감사합니다. ^^ Q & A