IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.
JavaSE8は、なんといってもストリームAPIとラムダ式。 いろいろとできることが増えたので どこから手をつければよいのか困ってしまうが、 導入経緯を探っていくと理解しやすい。 ここでは、ストリームAPIやラムダ式の周辺が どんな理由で必要になったかを考える。 並列処理にはそれが必要だった 導入経緯をまとめると、次のような話。 (個人の主観的なまとめです。詳細はご自身でお確かめ下さい。) CPUがマルチコア化しているのに プログラム側が対応しきれていないのはもったいない。 並行処理用のAPI(Concurrency Utilities)があるじゃないか。 粒度の大きな処理は問題ないが、 粒度の小さな処理を並列化する場合には使いにくい。 じゃあ、イテレータに注目しよう。 反復されている処理が、簡単に並列化できればうれしい。 イテレータを改良すればなんとかなるのでは。 でも、今の外部イテレー
Java 8 Lambdas: Pragmatic Functional Programming (English Edition) 作者:Richard Warburton出版社/メーカー: O'Reilly Media発売日: 2014/03/18メディア: Kindle版 前回 blog1.mammb.com からの続き Stream Stream は複雑なコレクション操作を関数型アプローチで構築するツールです。 外部あるいは内部の繰り返し ロンドン出身のアーティスとを数える旧来のコード int count = 0; for (Artist artist : allArtists) { if (artist.isFrom("London")) { count++; } } 繰り返し処理の抽象である Iterator を使ったコード int count = 0; Iterator<Ar
JDK8およびJDK8u20では、GCログに関連する2つの便利な機能が追加されている。いずれの機能も2014/8現在最新のJDK7 update 67 には含まれていないが、JDK7u80にてバックポートされる予定。 GCログにpidと日付を含める (JDK8より) JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/wildfly/gc_%p_%t.log" => 実際のファイル名例 : gc_pid31455_2014-08-31_14-20-16.log.0GCログのフォーマットに%pを入れるとpid形式のプロセスIDが付与される。また%tを付与すると"_2014-08-31_14-20-16"のようにGCログファイルを作成した日付時分秒が追加される。かつてGCログはJavaを再起動すると同じファイルが上書きされて消えてしまうため、出力先を-Xloggc:g
Java SE 7で導入されたNIO2のFilesクラスでreadAllLinesメソッドを使って大きなファイルを読むと、ヒープメモリを圧迫またはOutOfMemoryErrorを起こします。 List<String> lines = Files.readAllLines(Paths.get(args[0]), StandardCharsets.UTF_8); Windows 7 64bit(12GBメモリ)で、Java SE 8 64bit版上でヒープメモリサイズのオプションを指定せずに(デフォルト)実行し、8GBのファイルを上述コードで読み込ませたところOutOfMemoryErrorが発生しました。 Java SE 8で導入されたStream APIを使って大きなファイルを読み込むとどうか試してみました。 try (BufferedReader reader = Files.newB
Java SE 8 Development Kit(JDK 8)で新たに搭載されたコマンドjdepsは、JavaのクラスファイルやJARファイルから、JARファイルやパッケージやクラスの間の依存関係を解析します。ツールの結果はテキスト(標準出力)とdot形式ファイル(Graphvizでグラフィカルに表示)として生成できます。 http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdeps.html 今回は、JARファイル間の依存関係をjdepsコマンドで調べてみました。 GeoToolsのJARファイルの依存関係を調べる Javaのオープンソース地図ライブラリGeoToolsは、多数のJARファイルから構成されています。 http://www.geotools.org/ 次にGeoTools 11.1に含まれるJAR一覧を示し
昨日はJava読書会BOF主催のJava読書会「Java 8 Lambdas」を読む会の第2回を開催しました。洋書にも関わらず、10人を超える参加者が集まりました。 今回の読書範囲で感じたことなど ラムダ式の引数命名 ラムダ式の記述で、引数の変数名に著者は多少長くなっても意味を示す名前を付けています。 Example 3-16より引用 int count = Stream.of(1, 2, 3) .reduce(0, (acc, element) -> acc + element); たまにラムダ式の解説でみかける1文字変数のコード例だと int count = Stream.of(1, 2, 3) .reduce(0, (a, e) -> a + e); と短くなるものの、'a'って? 'e'って? となって可読性が下がります。 for文、分かりやすいではないか 上記のreduceを使っ
Java SE 8対応のFindBugs 3.0.0リリース候補版(rc2)が公開されています*1。 http://findbugs.sourceforge.net/ FindBugsサイトでは、3.0.0-rc2を組み込んだEclipseプラグインが合わせて公開されています。しかし、NetBeans向けのプラグイン(FindBugs Integration)はまだFindBugs 2.0系列のものしかありません。 NetBeansプラグイン(FindBugs Integration)のソースをいじってFindBugs 3.0.0-rc2対応版プラグインを作ろうとしましたが、敷居が高く挫折してしましました。そこで、プラグインとしてではなく、プラグインをインストール後一部ファイルを差し替えることでFindBugs 3.0.0-rc2対応をさせることにしました。 ちょうどJava読書会で現在読
Mockit.setUpMock(HogeMock.class); // ここでいねーよってコンパイラーさんがOKOKO new Expectations() { Fuga fuga; // これではMock化してくれないっぽい? { this.fuga = new Fuga(); // 動かすとMockじゃないってJVMがOKOKO } }; どうやら、基本的にMockUp使えってことらしくて、Expectitionsはテストクラスのフィールドやメソッドの引数にMockedアノテーション付ける以外にはダメっぽそう。 TestNG+jMockit+EclEmmaな環境だと、EclEmma2.3.1とかにしてしまうだけで、jMockitとぶつかって、テストの起動でコケてくれるので、jMockitのバージョンを上げるか、EclEmmaを2.2系に戻すほかないけど、Java8対応とかするにはEc
The Checker Framework Manual: Custom pluggable types for Javahttps://checkerframework.orgVersion 3.49.0 (3 Feb 2025) For the impatient: Section 1.3 describes how to install and use pluggable type-checkers. This manual is also available in PDF. Contents Chapter 1 Introduction 1.1 How to read this manual 1.2 How it works: Pluggable types 1.3 Installation 1.4 Example use: detecting a null pointer b
今回も前回の記事につづき、Java8による変更点で未だあまり紹介されていないポイントを記事にしようと思う。 今回はJava8のHotSpotVMの話。Java8ではJEP122が取り込まれ、VMのメモリモデルが変更された。JEP122のタイトル「Remove the Permanent Generation」から想像できるとおり、Java8のHotSpotVMからは従来のPermanent領域が無くなった。 なぜ、こういった変更が行われたのだろうか?また、元々Permanent領域に格納されていた情報は何処にいってしまったのか?JVM付属のツールにどういった影響があるのか? 今回の記事ではこの点をまとめていこうと思う。 なお、HotSpotVMのメモリモデルについて詳しくない方は、先にこちらの項番(「補足 – HotSpotVMのメモリ構造概説)を読んでいただくとスムーズに読み進められるだ
2014年3月18日、ついにJava8が正式にリリースを迎えた。 折角なので、今後、Java8の新機能に関する記事をいくつかアップしていきたい。 Java8といえばやはりラムダ式だけど、既に色々な方がブログ等々で紹介しているので、今回は、Java8にて導入されたインタフェースのデフォルト実装と多重継承、Mix-inの関係について書いていきたいと思う。 かなり長丁場になりそうだが、最後までお付き合いいただければ幸いである。 では、Java8の世界に飛びだそう! Java8のインタフェース実装とは? Java8では、インタフェースに実装を持てるようになった。 定義の方法は「default」句、または「static」句を利用する2パターンが存在する。 今回の記事では「default」句を利用した場合のメソッドの振る舞いから多重継承とmix-inについて考えていく。 default句を使用したイン
java.lang.Object#hashCode()の性質という記事で書いたのですが、Java の Object#hashCode() の値はただの乱数となっています。 この乱数のアルゴリズムが、Java SE 8 で「線形合同法」から「XORシフト方式」に変更になっていました。 といっても、変更されたのはたった1文字。 VMオプションのデフォルト設定が -XX:hashCode=0 から -XX:hashCode=5 に変わっただけでした。 hotspot-rt Udiff hotspot/src/share/vm/runtime/globals.hpp どういうこと? もともと、Java の以前の実装*1 *2から、Object#hashCode() のアルゴリズムはVMオプション -XX:hashCode=? で選べるようになっていました。 ですが、デフォルトは長いこと 0(=線形
Java SE 8 が日本時間の 3 月 19 日 午前 4 時頃にリリースされました。3 月 18 日リリースと聞いて JDK ダウンロードページが更新されるのを待機していたけれども、いつまで経っても更新されず、翌日見てみたら更新されていた、という経験をされた方も少なくないのではないでしょうか。今回は Java SE 8 のリリースがなぜ 3 月 18 日でなく 3 月 19 日になってしまったのか?という謎解きも含めて、「時」というものを振り返ってみようと思います。 1. 「時」の基本単位は「秒」 現在、「時」の基本単位は「秒」と定められています。「秒」は 7 つある SI 基本単位 (これ以上分解できない単位のこと) の 1 つであり、SI 単位系においては非常に重要な存在です。 SI 基本単位は、m (メートル; 長さ)、kg (キログラム; 質量)、s (秒; 時刻・時間)、A
はじめに さる 5/30、今か今かと待ち望まれていた Spark 1.0 が 遂にリリース されましたね! その前日 5/29 には都内で 実際のところ Spark ソースコードリーディング だった Hadoop ソースコードリーディング #16 が開催されるなど、 Spark についての注目度が俄然高まってきているように思えます。 そんなわけで、0.9.1 からの変更点や機能追加について、Java と機械学習に携わるエンジニアの視点で 今回の 1.0 リリース内容をまとめてみました! 何が変わったのか? Spark : Java 8 のラムダ式サポート Java エンジニア的に今回の一番の変更点は、何と言っても Java 8 のラムダ式への対応、ですね。 今年 3 月の Java 8 正式リリース後、主に Stream API の周辺においてラムダ式を書く機会が徐々に増えつつあるかと思い
各技術の注目度・実用度を分析したTechnology raderというのを、Thought worksが半年ごとに発表してます。 で、これいつもJava嫌いなんだなーって思う感じの内容だったんですね。 たとえば、2011年1月には「Java language end of life」といって、JavaはVMは残るけど言語は終わるよねーみたいな感じになってました。 http://thoughtworks.fileburst.com/assets/technology-radar-january-2011.pdf これが、2011年7月では、「Future of Java」として、今後でてくるJavaなら評価していいんじゃねーのみたいに。 http://thoughtworks.fileburst.com/assets/technology-radar-july-2011.pdf そして、先日
以下のようなコードは、実行時エラーになる。 Stream<String> ss = Arrays.asList("hoge", "fuga").stream(); System.out.println(ss.count()); System.out.println(ss.count()); スタックトレースは以下のようになる。 stream has already been operated upon or closed java.lang.IllegalStateException at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203) at java.util.stream.LongPipeline.<init>(LongPipeline.java:91) at java.util.stream.Lo
夏のJAWS-UG 三都物語 2014というイベントで「そろそろJavaみなおしてもええんやで」というプレゼンしてきました。 Javaのイベントではなかったので、Javaを使ってない人を想定したプレゼンでしたが、実際会場のほとんどがJavaメインではなかったようです。 for(int num : nums){ if(num > 10) continue; sum += num * 2; } というコードが、NetBeansの「関数操作を使用」というリファクタリングで sum = nums.stream().filter((num) -> !(num > 10)).map((num) -> num * 2).reduce(sum, Integer::sum); になったところがハイライト。 ここまでできるとは思ってなかった。 そろそろJavaみなおしてもええんやで from なおき きしだ
毎年 6 月恒例の Eclipse メジャーリリースとなる Eclipse 4.4 Luna (ルナ) がリリースされた。ラムダなど Java 8 に正式対応した初のバージョンだ。これに合わせて日本語化された Eclipse と便利なプラグインや Java 8 実行環境を含む全部入りの Pleiades All in One もリリースした。 Pleiades All in One Eclipse 4.4 Luna ダウンロード http://mergedoc.sourceforge.jp/pleiades_distros4.4.html 起動時のスプラッシュは月食 (Lunar Eclipse) のときに月から地球を見たときに発生しているであろう日食イメージにした。地球の所々光っている部分は実際の街明かりで、韓国の北側の国が真っ暗で話題になった NASA の映像。背景は銀河中心方向の S
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く