BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Java 8ニュース:新しいアトミックナンバーを含むRC版を公開、モジュール化は外れる

Java 8ニュース:新しいアトミックナンバーを含むRC版を公開、モジュール化は外れる

ブックマーク

原文(投稿日:2014/02/16)へのリンク

Java8の最初のRC版が2月の始めにリリースされた。第1版のb128は2月4日、第2版は1週間後にOpenJDKのメーリングリストで発表された

Java 8 RC2は、新しいComparator APIの重大な不具合を修正している。新しいthenComparing()に不要な型制限があり、不具合報告では次のように報告された。

java.util.Comparatorの以下のメソッドでは、型のUはjava.lang.Comparableを継承しなければなりません。
<U extends Comparable<? super U>> Comparator<T> thenComparing( 
  Function<? super T, ? extends U> keyExtractor, 
  Comparator<? super U> keyComparator);
しかし、keyComparatorは抽出されたkeyオブジェクトを比較するのに使われるため、この制限は不要です。

Java 8 RC2では、Mac OS Xのreadパーミッションの問題も修正されている。Java 8 RC版は、https://jdk8.java.net/download.htmlからダウンロードできる。

JDK 8のバグトラッカーによると、リリースは3月17日の聖パトリック祭の日だ。この記事を執筆している時点で、ドキュメントに関する3つの問題がまだ解決されていない。

もう1つのJava 8に関するニュースとして、Java 8のアトミックナンバーが相当速いことを示す数値を、最近、Drew Stephens氏が公表したことがある。また、Mark Reinhold氏は法律問題を引き合いに出し、モジュール化をJava 8から外すように提案した。

新しいアトミックナンバーの実装

Java 8のラムダ (335) と新しいDateとTimeのAPI (JSR 310) に加えて、マルチスレッドのアプリケーションの特定クラスにとって、とても重要なアトミックナンバーの実装がある。Palamino Labsの主任であるDrew Stephens氏は、最近、LongAdderとDoubleAdderについて追記した

マルチスレッドのアプリケーションのあまり目立たないが、とても重要なクラスは、LongAdderDoubleAdder、アトミックナンバーの実装です。AtomicIntegerAtomicLongは、マルチスレッドで競合が起きたときに、優れたパフォーマンスを提供します。

Intel Xeon E5-2670の8つのコアすべてにアクセスできるm3.2xlarge EC2 インスタンスを使ったベンチマークで、LongAdderとAtomicLongのパフォーマンスの違いを示します。

シングルスレッドでは、新しいLongAdderは3分の1遅くなりますが、スレッドがフィールドを増やそうと争っている場合、LongAdderはその価値を現します。各スレッドはただカウンタを増やそうとしているだけであり、これはもっとも極端な人工的とも言えるベンチマークです。実世界のアプリケーションで見られるよりも、差がはっきり示されていますが、このような共有カウンタは、時々、必要になるでしょう。そのような場合、LongAdderがとても役に立ちます。

Drew氏は、さらにAtomicLongがシングルスレッドでは少し速いことを示している。しかし、スレッドが2つの場合は4倍遅く、スレッド数がコア数と同じ場合は、ほぼ5倍遅くなる。そして、スレッド数が物理コアのCPU数を超えるまで、LongAdderのパフォーマンスは一定であると述べている。

モジュール化は外れる

モジュール化は、Java8で提案されていた機能であり、実行されるアプリケーションでパッケージ化されたJava SEの実装をカスタマイズ可能にする。アプリケーションが使う、コードに依存しない要素は取り除くことができる。このような実装は、家庭電化製品のようなデバイスにJavaを組み込む場合に役に立つだろう。

Mark Reinhold氏は、最近、Java SE 8からモジュール化を外すことを提案した。その原因として、法律的な問題を挙げた。

互換性とフラグメンテーションに対するガードを保護するために、Java SE 8のモジュール化の機能には、TCKライセンスにいくつかの重大な変更が必要です。

私は、これまでかなりの期間、これらの見直しに関して、Oracleの法務部と取り組んできました。その草稿はありますが、今の時点で、残念ながら、専門家グループ、JCP 執行委員会メンバ、その他関心のある人たちが、これらの変更をレビューしたり、コメントしたりする十分な時間がありません。

そのため、Java SE 8からモジュール化を外すように提案します。これは、仕様とTCKルールだけ変更すればよく、RIや実際のTCKテストの変更は必要ありません。

Reinhold氏は、モジュール化はJavaプラットフォームの将来のために重要であり、Java SE 9より前のリリースで追加されるかもしれないと述べた。

Java 8のリリースはもうすぐだ。もっと簡単なdateやクロージャ、より良いコンカレンシ、新しいJavaScriptエンジンまでわずか1カ月だ。あなたはアップグレードするだろうか? アップグレードしないならば、アップグレードしない技術的な問題があるのだろうか?

この記事に星をつける

おすすめ度
スタイル

BT