Java EE developer’s report
HASUNUMA Kenji
Vice president of GlassFish Japan Users Group
E-mail: k.hasunuma@miracle.ocn.ne.jp
Twitter: @btnrouge
WebLogic Server 12c
is
Java SE 7
Java EE 6
Running WebLogic on JDK7
2012年4月26日
Java SE 7 Update 4
Java SE 6に替わる標準
Mac OS X 正式対応
HotSpotとJRockitの統合
✓
JITコンパイラー
✓
ヒープ領域管理
HotSpot VM
JRockit VM
設計思想 ネイティブコンパイル 汎用性重視 サーバーサイドに特化 実行頻度の高いコード コードの初回実行時 ネイティブコード最適化 概ね最適化されている 最適化されない場合あり インタープリター実行 実行頻度の低いコード インタープリターなしEden
Survive SurviveOld
Permanent Heap Permanent New OldNursery
Old
Heap New OldSun HotSpot VM
BEA JRockit VM
Eden
Survive SurviveOld
Heap New OldNursery
Old
Heap New OldOracle HotSpot VM (HotRockit)
ガベージ
JRockit VM HotSpot VM Concurrent GC レスポンス重視 Parallel GC スループット重視 Parallel GC Parallel Old GC Concurrent GC Garbage First GC Parallel GC Mostly Concurrent GC Deterministic GC Deterministic GC 移植予定
JDK7 Update 4
HotSpot v23
HotRockit最初の機能プレビュー
✓
jcmd
✓
Java Flight Recorder
JRockitの
jrcmd
を
HotSpotに移植
コマンド書式は同じ:
jcmd <pid> <command...>
コマンド名は
すべて変更
:
jcmd/jrcmd コマンド対応表(1/2)
jcmd jrcmd
ManagementAgent.stop kill_management_server
ManagementAgent.start_local start_management_server local ManagementAgent.start start_management_server remote Thread.print print_threads GC.class_histogram print_object_summary GC.heap_dump hprofdump GC.run_finalization runfinalization GC.run runsystemgc help help
jcmd/jrcmd コマンド対応表(2/2)
jcmd jrcmd VM.uptime timestamp VM.flags list_vmflags VM.system_properties print_properties VM.command_line command_line VM.version version VM.commercial_features ----JFR.stop stop_flightrecording JFR.start start_flightrecording JFR.dump dump_flightrecording JFR.check check_flightrecordingJava Flight Recorder
HotSpot版 JRockit Flight Recorder
フライト記録は
JRockit互換
JRockit
Mission Controlで読み込み可
Usage:
•
2つのVMオプションを設定
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
•
jcmdのJFR.*コマンドで開始・停
止・ダンプ取得などが可能
New JMX Agent
(MBean)
•
JRockit互換のMBeanを装備
•
HotSpotの状態を
JRockit Mission
Control
で監視可能
Java SE 7
JSR 336
• [VM] JSR 292: Support for dynamically-typed languages (InvokeDynamic)
• [VM] JSR 202: Strict class-file checking
• [Lang] JSR 334: Small language enhancements (Project Coin)
• [Core] Upgrade class-loader architecture • [Core] Method to close a URLClassLoader
• [Core] JSR 166y: Concurrency and collections updates (fork/join framework)
• [I18N] Unicode 6.0
• [I18N] Separate user locale and user-interface locale
• [I/O] JSR 203: More new I/O APIs for the Java platform (NIO.2)
• [I/O] TLS 1.2 - RFC 5246 • [DB] JSR 221: JDBC 4.1
• [Client] Create new platform APIs for 6u10 graphics features
• [Client] Nimbus look-and-feel for Swing • [Client] Swing JLayer component
• [Web] Upgrade the XML stack - JAXP (JSR 206), JAXB (JSR 222) and JAX-WS (JSR 224)
✓
More New I/O (NIO.2)
More new I/O
(a.k.a. NIO.2)
JSR 203
Project Coin
JSR 334
try-with-resources構文
multi-catch構文
安全な例外再スロー
ダイヤモンド演算子
switch構文の拡張
リテラル表現の改善
// try-with-resources サンプル
try (BufferedReader reader = Files.newBufferedReader( Paths.get("C:", "Windows", "win.ini"),
Charset.defaultCharset()) ) { while (reader.ready()) { System.out.println(reader.readLine()); } } catch (IOException e) { e.printStackTrace(); } reader.close() は不要 自動的に解放するリソースを書く finally も不要
// multi-catch サンプル // Paths は NIO.2 で追加されたクラス try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(
Paths.get("C:", "eclipse", "artifacts.xml").toFile()); System.out.println( document.getDocumentElement().getNodeName()); } catch (ParserConfigurationException | SAXException | IOException e ) { e.printStackTrace(); } 複数の例外をまとめてキャッチ&処理
// 安全な再スローのサンプル
// 前提:以下の例外が throws に指定されている
// ParserConfigurationException, SAXException, IOException try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance(); DocumentBuilder builder =
factory.newDocumentBuilder();
Document document = builder.parse(
Paths.get("C:", "eclipse", "artifacts.xml").toFile()); System.out.println(
document.getDocumentElement().getNodeName()); } catch (final Exception e) {
throw e; }
Java SE 6 まで
List<
String
> strings = new ArrayList<
String
>();
Java SE 7 から
List<
String
> strings = new ArrayList
<>
();
( 省略できるよ! ) (どうせ同じなのに…)
// switch 構文の仕様拡張(文字列による分岐)
switch (crossroad) {
case "ABLE": // 分岐条件に文字列が使える!
System.out.println("ABLE test was done in July 1st, 1946.");
break;
case "BAKER":
System.out.println("BAKER test was done in July 25th, 1946.");
break;
case "CHARLIE":
System.out.println("CHARLIE test is cancelled.");
break;
default:
System.out.println("N/A");
break; }