이 기사는 곧 출시될 Java 9의 새로운 기능을 기반으로 동기적으로 업데이트됩니다(최종 업데이트: 2014년 9월 9일)
OpenJDK 개발 가속화: 출시 이후 Java 8은 2014년 3월에 출시되며 다음 2년 릴리스 주기에 돌입합니다. Java 9는 2016년에 출시될 예정이며 동시에 JEP(JDK Improvement Proposal)의 초기 목록도 발표되었습니다. JSR(Java 사양 요청)에 몇 가지 새로운 기능을 구성했으며, 새 버전에 포함되도록 제안된 다른 기능도 있습니다.
이러한 중요한 기능은 Jigsaw 프로젝트에 포함되어 있습니다. 상당한 성능 개선과 오랫동안 기다려온 API에는 다음이 포함됩니다. 프로세스 API 업데이트, JSON은 통화 처리 API인 java.util의 일부가 됩니다. 최첨단 기술을 사용하려는 사용자를 위해 여기에서 Java 9의 초기 버전을 사용할 수 있습니다. 🎜>
이 글은 Java 9의 새로운 기능을 기반으로 지속적으로 업데이트될 예정입니다. 기대해주세요! 1. Jigsaw 프로젝트, 모듈형 소스 코드 Jigsaw 프로젝트는 Java 코드를 모듈화하여 서로 협력할 수 있는 구성 요소로 나누는 것도 많은 기능 중 하나입니다. Java 9 중 하나입니다. JEP는 Jigsaw를 향한 네 단계 중 첫 번째 단계이며 JRE 및 JDK의 실제 구조를 변경하지 않습니다. JEP는 JDK 소스 코드를 모듈화하도록 설계되어 빌드 시스템이 빌드 시 모듈을 컴파일하고 모듈 경계를 확인할 수 있도록 합니다. 이 프로젝트는 원래 Java 8로 출시되었지만 지연으로 인해 Java 9에 추가될 예정입니다. 완료되면 프로젝트 요구에 따라 구성 요소를 사용자 정의하여 rt 크기를 줄일 수 있습니다. .jar . JDK 7, JDK 8의 rt.jar 패키지에는 약 20,000개의 클래스가 있지만, 그 중 다수가 일부 특정 환경에서 사용되지 않는다(Java 8의 컴팩트 배포 기능에 일부 솔루션이 포함되어 있음에도 불구하고). ). 이는 Java를 소형 컴퓨팅 장치(예: 네트워크 장치)에 쉽게 적용할 수 있도록 하고, 보안 및 성능을 향상시키며, 개발자가 이러한 클래스 라이브러리를 보다 쉽게 구축하고 유지 관리할 수 있도록 하기 위해 수행됩니다. 추가 JEP 201 콘텐츠 2. 단순화된 프로세스 API지금까지 Java의 시스템 프로세스 제어 및 관리 기능은 제한적이었습니다. 예를 들어 이제 프로그램의 프로세스 PID를 쉽게 얻으려면 기본 프로그램을 호출하거나 직접 해결 방법을 사용해야 합니다. 게다가 올바른 결과를 얻으려면 각 (시스템) 플랫폼마다 다른 구현이 필요합니다. Linux PIDS를 얻을 수 있는 코드로 예상되는데, 현재는 다음과 같습니다.public static void main(String[] args) throws Exception { Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" }); if (proc.waitFor() == 0) { InputStream in = proc.getInputStream(); int available = in.available(); byte[] outputBytes = new byte[available]; in.read(outputBytes); String pid = new String(outputBytes); System.out.println("Your pid is " + pid); } }Java 9에서는 다음과 같은 방식으로 변환 가능합니다. (모든 운영체제 지원) :
System.out.println("Your pid is " + Process.getCurrentPid());이 업데이트는 운영 체제와 상호 작용하는 Java의 기능을 확장합니다. 즉, PID, 프로세스 이름 및 상태 처리, 여러 JVM 및 프로세스 열거 등을 위한 새롭고 간단한 방법을 추가합니다. 3. 경량 JSON API 현재 JSON 처리를 위한 다양한 Java 도구가 있지만 JSON API의 고유한 점은 JSON API가 Java 언어의 일부가 될 것이라는 점입니다. Java 8의 새로운 기능을 사용합니다. java.util 패키지로 함께 출시됩니다(단, JSR 353의 JSON은 타사 패키지나 다른 방법을 사용하여 처리됩니다). **코드 예제는 나중에 나열됩니다! 4. 화폐 및 통화 APIJava 8에서 날짜 및 시간 API를 도입한 후 Java 9에서는 통화를 표현하고 통화 간 변환 및 다양한 복잡한 작업을 지원하는 새로운 통화 API를 도입했습니다. 이 프로젝트에 대한 자세한 내용은 지침과 예제가 제공되는 https://github.com/JavaMoney를 참조하세요. 다음은 몇 가지 중요한 예입니다.
//新的类型: Money & FastMoney Money amt1 = Money.of(10.1234556123456789, "USD"); // Money is a BigDecimal FastMoney amt2 = FastMoney.of(123456789, "USD"); // FastMoney is up to 5 decimal places Money total = amt1.add(amt2);
// 钱表达成各国货币的方法: MonetaryAmountFormat germanFormat = MonetaryFormats.getAmountFormat( Locale.GERMANY); System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD5. 잠금 경합 메커니즘을 개선합니다. 잠금 경합은 많은 Java 다중 스레드 애플리케이션의 성능을 제한하는 병목 현상입니다. 테스트 중에 Java 객체 모니터의 성능을 향상시키기 위해 새로운 메커니즘이 사용되었습니다. 통신 서버는 클라이언트에 연결하기 위해 많은 수의 프로세스를 열었으며 그 중 다수는 동일한 리소스에 적용되어 로드가 많은 일일 애플리케이션을 시뮬레이션했습니다.
이와 같은 스트레스 테스트를 통해 JVM의 최종 처리량(초당 메시지 수)을 추정할 수 있습니다. JEP는 22가지 테스트에서 새로운 메커니즘을 적용할 수 있다면 뛰어난 결과를 얻을 수 있습니다.
6. 코드 분할 캐싱
Java 9의 또 다른 성능 향상은 JIT(Just-in-time) 컴파일러에서 비롯됩니다. 대량으로 반복적으로 실행되면 가상 머신은 코드를 머신 코드(네이티브 코드)로 컴파일하여 코드 캐시에 저장한 다음 캐시에 있는 다양한 코드 세그먼트에 액세스하여 컴파일러의 효율성을 향상시킵니다.
원래의 싱글 캐시 영역과 달리 새로운 코드 캐시는 코드 자체의 라이프사이클에 따라 세 가지 유형으로 구분됩니다.
- 영구 코드(JVM 내장/비메서드 코드)
- 단기 코드(특정 조건에서만 적용되는 프로파일링된 코드)
- 장기 코드(프로파일링되지 않은 코드)
캐시 세그먼트는 다음과 같이 나뉩니다. 프로그램 성능 향상 측면에서는, 예를 들어 가비지 컬렉션 스캔을 할 때 메소드가 아닌 코드(영구 코드)를 직접 건너뛸 수 있어 효율성이 향상됩니다.
7. 지능형 자바 컴파일, 두 번째 stage
지능형 Java 컴파일 도구 sjavac의 첫 번째 단계는 멀티 코어 프로세서에서 JDK의 컴파일 속도를 향상시키는 데 사용된 JEP 139 프로젝트로 시작되었습니다. 이제 이 프로젝트는 두 번째 단계(JEP)에 들어갔습니다. 199), sjavac을 개선하고 이를 만들기 위한 목적으로 현재 JDK 컴파일 도구 javac를 대체하는 Java용 기본 범용 컴파일 도구가 될 것입니다.
기타 기대할 만한 콘텐츠:
8. HTTP 2.0 클라이언트
HTTP 2.0 표준은 아직 공식적으로 공개되지 않았지만 최종 검토 단계에 들어섰고 Java 9 출시 이전에 완료될 것으로 예상됩니다. JEP 110은 재정의할 것입니다. 현재 HttpURLConnection을 대체하기 위해 새로운 Java HTTP 클라이언트를 구현하고 HTTP 2.0 및 웹소켓도 구현합니다. 아직 JEP에서 공식적으로 인정하지는 않지만 이 프로젝트를 Java 9에 포함할 수 있기를 바랍니다.
공식 HTTP 2.0 RFC( 의견 요청, 공식 기술 토론/회의록 등)은 2015년 2월 공개 예정입니다. Google에서 출시한 SPDY(Speedy, fast) 프로토콜을 기반으로 하며, SPDY 프로토콜을 기반으로 한 네트워크는 11.81%입니다. HTTP 1.1 프로토콜을 기반으로 네트워크에 연결하여 47.7%의 상당한 속도 향상을 이루었으며 현재 이 프로토콜을 구현한 브라우저가 있습니다.
9. Kulla 프로젝트: Java의 REPL 구현
Kulla라는 프로젝트는 최근 2015년 4월에 통합 및 테스트를 완료했다고 발표했습니다. Java 9 릴리스를 따라잡을 가능성은 없지만 진행 속도가 빠르다면 공식적인 REPL은 따라잡을 수 없을 것입니다. 즉, 몇 줄의 Java 코드를 실행하여 빠른 테스트를 수행하려면 프로젝트나 메서드에서 이러한 코드 줄을 캡슐화해야 합니다. . 일부 인기 있는 IDE에는 Java REPL 도구가 있지만 공식적인 지원은 없으며 Kulla 프로젝트는 공식적으로 출시된 Java용 REPL 솔루션이 될 수 있습니다.
Kulla 프로젝트에 대한 추가 정보
이러한 새로운 기능은 어디에서 왔습니까?
JEP와 JSR은 무에서 생성된 것이 아닙니다. 다음은 Java 개발의 생태학적 환경에 대한 소개입니다.
그룹 - 공통 관심사를 가진 조직 및 개인 보안, 네트워크, Swing, HotSpot과 같은 특정 기술 콘텐츠
프로젝트 - 코드 작성, 문서 작성, 최근 Lambda 프로젝트, Jigsaw 프로젝트 등 적어도 한 그룹이 후원하고 지원하는 기타 작업 수마트라 프로젝트.
JDK 개선 제안(JEP) - 새로운 시도가 필요할 때마다 JEP는 JCP(Java Community Process) 이전 또는 동시에 비공식 사양을 제안할 수 있습니다. 이는 승인된 JEP JDK 개발 로드맵에 공식적으로 작성되어 할당됩니다.
JSR(Java 사양 제안) - 새로운 기능에 대한 사양이 이 단계에 나타나며 그룹/프로젝트, JEP, JCP 회원 또는 Java 커뮤니티(커뮤니티) 회원의 제안에서 나올 수 있습니다. 해당 JSR에서 지원되지만 Java 9는 아직 사용할 수 없습니다.