일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 코틀린
- 파이썬
- 인프라
- 자바
- 자바암호
- 고전역학
- kotlin
- 소프트웨어공학
- 자바네트워크
- write by chatGPT
- spring integration
- chatGPT's answer
- NIO
- android
- Java
- GPT-4's answer
- flet
- 데이터베이스
- spring data jpa
- 리눅스
- python
- oracle
- write by GPT-4
- 유닉스
- JVM
- 시스템
- jpa
- 웹 크롤링
- Database
- 역학
- Today
- Total
기억을 지배하는 기록
Introduction of JDK 7 본문
JDK 7 Version Plan
Project Coin (JSR TBD)
InvokeDynamic (JSR 292)
Fork/Join Framework
Mid 2011
Strict Verification
Parallel Class Loaders
Transfer Queues
Phasers
Unicode 6.0
Swing Nimbus
XRender Pipeline
ECC
Swing J Layer
More New I/O (J SR 203)
JDBC 4.1
TLS 1.2
Enhanced Locales
SDP & SCTP
JDK 8 Version Plan
Project Jigsaw
Project Lambda
Late 2012
Type Annotations (JSR 308)
Bulk-Data Operations
Swing J DatePicker
Collection Literals
오라클은 Lambda, Jigsaw, Coin의 일부 기능을 제거한 JDK 7를 2011년 중반에 출시하고 나머지 기능 + Alpha를 2012년에 JDK 8으로 출시한다는 계획이다.
JDK 7’s New Features
1. G1 Garbage First Collector
서버 측 JVM 에서 주로 사용되던 CMS (Concurrent Mark-Sweep) collector를 대신 할 새로운 방식의 collector. 기존 방법보다 GC에 의한 pause time을 줄이고 JVM 성능에 대한 예측을 더 정확하게 할 수 있도록 한다. 이 기능은 실험적으로 Java SE 6 u14 버전에 포함되었다.
2. Java외의 다른 언어 지원 (invokeDynamic)
이미 Java VM 에서 실행되는 여러 개발언어가 있다. JDK 7은 Java 언어 외 다른 개발언어도 Java 언어와 거의 같은 성능으로 Java VM 에서 수행될 수 있도록 한다.
JVM은 사실 java 언어와는 아무런 연관이 없다. JVM은 언어에 대해서는 아무것도 모르며 단지, byte 코드와 기타 정보를 가진 class 파일 포맷에 대해서만 알고 있다는 것이다. Java언어가 아니라도 JVM 스팩에서 정의한 클래스 포맷과 byte 코드 명령어 규칙을 따르기만 하면 JVM에서 실행할 수 있다.
현재 JDK 6에서 지원하고 있는 외부 언어
Jruby – Java로 구현한 Ruby
Jython – java로 구현한 Python
Groovy – JVM에서 실행되는 새로운 동적 스크립트 언어
Rhino – Java로 구현한 JavaScript
JavaFX – Oracle이 RIA를 위해 새로 만든 언어
Mirah – Ruby와 유사한 문법의 정적 타입 언어
기존 JVM에서의 동적 스크립트 언어 지원 문제
Java는 정적형 언어다. 객체든 변수든 사용하기 위해서는 프로그램 코드에 Type을 지정해 주어야 한다. 어떤 메쏘드를 호출하기 위해서는 메쏘드를 가진 객체, 메쏘드의 인자 값, 반환 값까지 어떤 Object Type인지 알고 있어야 한다. 이와 달리 Ruby와 같은 동적 스크립트 언어는 메쏘드를 호출하기 위해 객체의 Type이 무엇인지 몰라도 상관 없다.
JDK 7의 JVM에서는 “invokedynamic”명령어를 추가하여 동적 스크립트 언어가 Java 언어와 거의 같은 성능을 낼수 있도록 한다. “invokedynamic”은 기존의 “invokevirtual”,”invokeinterface”와 달리 메쏘드 호출을 위해 클래스 정보가 필요하지 않다. 호출할 메쏘드의 이름과 선언 형식만 제공하면 런타임에 적절한 메쏘드를 호출 할수 있다.
3. Java 프로그래밍 언어 사용을 편리하게 (Project Coin)
JDK 7은 Java 프로그래밍 언어에 코딩을 편하게 하는 기능들을 제공한다. Project Coin은 JDK 7추가될 작은 언어(Java)적 변화를 결정하는 프로젝트다.
Strings in switch
String Type Switch 문에 사용할수 있게
현재 String str = ... if (str.equals("name")) { } else if (str.equals("surname")) { } else if (str.equals("forename")) { } |
JDK 7 String str = ... switch (str) { case "name": break; case "surname": break; case "forename": break; } |
Map for-each
현재 Map<String, Integer> map = new HashMap<String, Integer>(); for (Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + "=" + entry.getValue()); } |
JDK 7 Map<String,Integer> map = new HashMap<String, Integer>(); for (String key, Integer value : map) { System.out.println(key + "=" + value); } |
For-each iteration control
현재 List<String> list = new ArrayList<String>(); for (String str : list) { if (str.length() > 100) { // str변수에 할당된 문자열을 제거하고자 한다. } } |
JDK 7 List<String> list = new ArrayList<String>(); for (String str : list : it) { if (str.length() > 100) { it.remove(); } } |
List/map access
현재 List<String> list = ... Map<String,Integer> map = ... Map<String,Map<String,Task>> combined = ... String str = list.get(0); list.set(0, "Hi"); Integer value = map.get(str); map.put("Hi", 56); Task task = combined.get("Test").get("Monitor"); |
JDK 7 List<String> list = ... Map<String,Job> map = ... Map<String,Map<String,Task>> combined = ... String str = list[0]; list[0] = "Hi"; Integer value = map[str]; map["Hi"] = 56; Task task = combined["Test"]["Monitor"]; |
Infer generics in declarations
현재 List<String> list = new ArrayList<String>(); Map<String,Job> map = new HashMap<String,Job>(); Map<String,Map<Channel,Job>> map = new HashMap<String,<Channel,Job>>(); |
JDK 7 List<String> list = new ArrayList<>(); Map<String,Job> map = new HashMap<>(); Map<String,Map<Channel,Job>> map = new HashMap<>(); |
String interpolation
현재 String name = ... int value = ... String out = "The value of "+ name + " is " + value; |
JDK 7 String name = ... int value = ... String out = $"The value of ${name} is ${value}"; |
Multi-catch of Exceptions
현재 try { doWork(file); } catch ( IOException ioe ) { logger.log(ioe); throws ioe; } catch ( SQLException sqle ) { logger.log(sqle); throws sqle; } |
JDK 7 try { doWork(file); } catch ( final IOException | SQLException ex ) { logger.log(ex); throws ex; } |
Multi-line Strings
현재 String sql = "SELECT surname, forename, title " + "FROM person"; |
JDK 7 String sql = """SELECT surname, forename, title FROM person"""; |
Resource management
현재 String sql = File file = ... FileReader in = null; try { in = new FileReader(file); processFile(in); } finally { try { if (in != null) { in.close(); } } catch (IOException ignored) {} } |
JDK 7 File file = ... try (FileReader in = new FileReader(file)) { processFile(in); } |
Null-handling
현재 Session sess = ... String code = null; if (sess != null) { if (sess.person() != null) { if (sess.person().address() != null) { code = sess.person().address().postcode(); } } } |
JDK 7 Session sess = ... String code = sess?.person()?.address()?.postcode(); |
4. Lambda (Closure) 지원
요즘 사용하는 대부분의 desktop, laptop 컴퓨터는 이미 멀티 코어 CPU가 기본으로 사용되고 있다. 앞으로는 모바일 장치에서도 멀티 코어 CPU가 사용될 수도 있을 것이다. Java 개발자들이 손쉽게 멀티 코어 CPU의 이점을 활용할 수 있도록 JDK 7에서는 Closure를 지원할 예정이다.
For loop – External Iteration double highestScore = 0.0; for (Student s : students) { if ((s.gradYear == 2010) { if(s.score > highestScore)){ highestScore = s.score; } } } |
Hypothetical Internal Iteration double highestScore = students .filter (new Predicate<Student>() { public boolean isTrue(Student s) { return s.gradYear == 2010; }}) .map (new Extractor<Student,Double>() { public Double extract(Student s) { return s.score; }}) .max (); |
Introducing Lambda expressions double highestScore = students .filter(#{ Student s -> s.gradYear == 2010 } ) .map(#{ Student s -> s.score } ) .max(); Lambda expressions introduced with #
Lambda expression are not syntactic sugar for anonymous inner class
|
5. SDP, SCTP 프로토콜 지원
Telco에서 많이 사용하는 SDP (Sockets Direct Protocol), SCTP (Stream Control Transmission Protocol)을 지원한다.
6. ECC (Ecliptic Curve Cryptography)
RSA 알고리즘보다 더 효율적인 ECC 알고리즘을 제공한다.
7. 새로운 Swing Look & Feel - Nimbus
Swing Look & Feel에 Nimbus L&F을 추가로 제공한다. Nimbus L&F은 정적인 비트맵을 사용하지 않고 2D 그래픽 API로 구현되어 어떤 해상도에서도 최적의 UI를 보여준다.
'오래된글 > Articles' 카테고리의 다른 글
Introduction to servlet 3 new features (0) | 2018.04.19 |
---|---|
SIP Servlet (0) | 2018.04.19 |
Inspecting HotSpot JVM Options (0) | 2018.04.19 |
RESTful Web Services with RESTeasy JAX-RS on Tomcat 7 – Eclipse and Maven project (0) | 2018.04.19 |
Three Common Application Performance Challenges for Developers (0) | 2018.04.19 |