6. コンパイルに時間かかりすぎ class C<T> { C() {} C(T t) {} C(C<T> c) {} static <U> C<U> m(C<U> c) {return c;} public static void main(String... args) { C<String> c = m(new C<>(m(new C<>(m(new C<>())))); // 1秒以下 } }
Java SE 8で導入されたラムダ式は、どのような仕組みで実現されているのだろうか? ラムダ式をより深く理解したいと考える読者にとって、これは気になるテーマの1つだろう。その秘密をお教えしよう。 Java SE 8で導入されたラムダ式は、Javaの言語仕様の歴史において最大級の変更だとされている。ただし、これはあくまでもJava言語の文法レベルの話であり、Javaプログラムを実行するJava仮想マシン(JVM)に新たな仕組みが導入されたわけではない。つまり、言語仕様に関する旧バージョンとの相違はコンパイラとランタイムが吸収し、バイトコードレベルでの互換性は保たれているということだ。 それでは、このような大きな変更を、既存のJVMの仕組みの中でどのように実現したのだろうか。それを知ることは、ラムダ式をより深く理解する手助けとなるかもしれない。Java SE 8のラムダ式実現の経緯と仕組みに
諸般の都合でどうしてもメモリが潤沢ではない環境でのテストを行わなければならない場合があるかと思います。 また、Java7もすでにEOLということでJava8の開発も多くなっているかと思いますが、Java8になって初めて遭遇した問題がありました。 そんなわけでJava8で開発を始めた頃のお話です。 TomcatアプリがJava7以前では重いながらも動いていたのに、Java8ではスワップの重力を乗り越えたと思ったら急にアプリが応答しなくなってしまい、よく見たらTomcat(java)プロセスがいません。 アプリケーションやTomcatのログを見てもOutOfMemoryErrorが出ているわけでもなく、仕方なくTomcatを起動しなおしてテスト再開するとまたプロセスがふっと消えている…。 そんな怪談話みたいなことがあるかと思いながら/var/log/messagesを見ると Sep 17 01
NullPointerException 嫌いですよね!そんなときに頼りになるのが Java 8 から導入された Optional です。 でも、 null の代わりに Optional を積極的に使うとコードが Optional だらけになり、特に次のような場合に面倒くさいです。 Optional<Integer> a があるとき、 a の値を二乗したい。ただし、 a が empty の場合は empty を得たい。 Optional<Double> a があるとき、 a の平方根を計算したい。ただし、 a が empty または負の数の場合は empty を得たい。なお、 Math.sqrt を安全にした(負の数を渡すと empty を返す)関数 Optional<Double> safeSqrt(double) があるものとして考えて良い。 Optional<Integer> a と
テキストデータを読み込む場合、言語にかかわらず1行ずつ読み込んで処理します。ここではこのイディオムを"read-lines"と呼ぶことにします。 スクリプト言語なんかだと大抵、最初からforeachで済んでしまっていたりしますが、初期のJavaではちょっと面倒な手順が必要でした。 新しいバージョンではだいぶ簡単簡潔に書けるようになりましたが、今度はたくさんありすぎて、どれがなんなのかが良くわからなくなっています(大袈裟)。 そこで今回は、"read-lines"の変遷についてまとめてみました。 最近Javaを始めた方がバージョンが古い時に書かれたソースコードを読むときに役に立つ...かも知れません。 目次 基本 BufferedReader (Java1.1~) Scannerと拡張for文 (Java5~) java.nio.file.Filesとtry-with-resources(J
12/25 追記 JDK8でmaven releaseプラグイン経由でJARを生成するときにjavadocを作成しててエラーになった。 maven-javadoc-pluginのconfiguration <additionalparam>-Xdoclint:none</additionalparam> を追加した サーバ構成 インフラの構成ファイルはchefで管理 アプリケーションサーバ 約50台 jetty + Spring Framework 3.2.4 バッチサーバ 2台 Jenkins + Spring Framework 3.2.4 当初の予定 以前、他メンバーがJDK8にアップデートできるか検証してくれていて、NewRelicが対応していなかったため断念したという経緯があったので、そんなに変更が無いだろうと判断。 開発環境で軽く検証 JDK7でコンパイルしたwarをJDK8上
日本語 Java SE 8 API ドキュメント URL 変更につきまして 2015年3月10日 at 5:10 午後 皆様 いつも大変お世話になっております。 現在、Java SE 8 に関連したドキュメントを大幅に更新を掛けております。 http://docs.oracle.com/javase/jp/8/ その過程で、Java SE 8 API ドキュメントへのリンクが下記に変更されました。 旧:http://docs.oracle.com/javase/jp/8/api/ 新:http://docs.oracle.com/javase/jp/8/docs/api/ これは、USのオリジナルのドキュメントがディレクトリ構成を変更したためで、USに併せて日本でも今後、上記のURLが正しいURLとなります。つきましては、大変恐れ入りますが、上記に対して現在ブックマークされている場合は改め
Java8 を使いこなそうとすると、やはり Date and Time API も使いこなす必要がでてくる。 我々 Perl 畑出身の人間からすると、Perl の世界では DateTime/Time::Piece というモジュールが一般的に日付の計算に使われており、iandeth.さんのブログエントリがチートシートとしてよく知られている。このいつも見慣れたエントリの体裁で、一般的な日時の操作を実用的に教えてくれるエントリが欲しくて書いた。 junit のテストケースとして書いてあるので、適当にコピペして QuickJUnit で動作確認するとよい(assertはしてないけど)。 なにかあれば教えていただけるとありがたいです。
渡辺です。 2014年3月18日にJava8がリリースされ、半年以上が経過しました。 そろそろプロダクション環境でもJava8が採用されているかと思います。 また、先日、AWS環境(Amazon Linux)でも、yumでJava8がインストールできるようになりました。 早速、Java8/Tomcat8で環境を構築しようとしたところ、ビミョーな所ではまってしまいました。 EC2インスタンスの作成 Amazon Linux AMI 2014.09.1 x86_64 HVM EBS(ami-4985b048) を利用しました。 インスタンスタイプはt2.small以上とするのが無難でしょう。 セットアップ Tomcat8とJava8をインストールする手順は以下の通りです。 $ sudo yum -y install java-1.8.0-openjdk-devel tomcat8 $ sudo
8. Optionalを用意する ● 値がある Optional.of(str) – nullを渡すとぬるぽ ● 値がない Optional.empty() ● 値があるかどうかわからない Optional.ofNullable(str) 9. 値の取得 ● get() – 値がないときNoSuchElementException ● orElse(defaultValue) – 値がないときdefaultValue ● orElseGet(() -> defaultValue) – 値がないときにdefaultValue取得処理 ● orElseThrow(() -> new Exception()) – 値がないとき例外を生成して投げる
Java 8時代の開発者のためのデバッグ/トラブル解決の基本・応用テクニック~JJUG CCC 2014 Springまとめリポート(後編)(1/3 ページ) Java開発における3大トラブルと対策、IDEのデバッガー活用の必要性、Java 8より導入された新しいメモリ領域を使いこなすためのテクニック、独自のトランザクショナルメモリ機構を実装した有効性などをお伝えする。 日本Javaユーザーグループは2014年5月18日、「JJUG Cross Community Conference 2014 Spring」を開催した。「JJUG Cross Community Conference」(以下、JJUG CCC)は毎年春と秋に開催されるカンファレンス。初心者向けからエキスパート向けまで、Java/JVMに少しでも関連すればいいという広いテーマでさまざまな講演が行われている。 前編では、「S
結論 Java8のOptionalは超すっきり扱えるよ、そう、Groovyならね。 Optionalって何? Java 8で導入される新規クラスの一つ、java.util.Optionalは、メソッドの実行結果で成功する場合と失敗する場合があるときに、その返り値で成功と失敗を表現するためのものです。 Opitonalは単一要素を保持するコンテナ型。成功した場合は返り値をコンテナで保持させたものを返す。(成功時の返り値をラッピングする) 「失敗」は固定のシングルトン(Optional.empty())として扱う まあ、それだけの話といえばそれだけなのですが、効果は、 失敗のある可能性のあるメソッドと無いメソッドをコメントではなくプログラムの一部として明示し、両者の違いをコーディング上も区別する 失敗のある可能性のあるメソッドと無い混在・混同することのないようにコンパイル時チェックをできるよう
今年はDropwizardが盛り上がる、という話をチラホラ聞きます。 今年流行るかもしれないDropwizardフレームワークを使ってみる 2014ブレイク確実!JavaベースのポータブルなWebフレームワーク Dropwizard DropwizardでWebアプリケーションを作る リリースノートをみるとバージョンとしては2013年3月に0.6.2が出て、2014年6月現在0.7.x系のようです。 0.7.0-SNAPSHOTのリリースノートみると、「Upgraded to Java 7」とあって、Java 8出たんだけどなぁと思ったり。 そこで思い出したのですが、Java 8が出たとき話題になっていたSparkってどんななんだろう?と触ってみました。 Spark Micro Web Framework トップページの作りがうまい感じで http://www.sparkjava.com/
Ktz @ktz_alias えーJavaって、List<Hoge> list = Arrays.asList(new Hoge {{ ... }})できないのー? 2013-09-03 14:00:37
7. たまにみる実装 static Map<BigInteger, List<BigInteger>> cache = new HashMap<>; void doGet(…) { BigInteger n = …; List<BigInteger> result = cache.get(n); if (result == null) { result = PrimeFactor.divide(n); // 素因数分解 cache.put(n, result); } // … } 8. たまにみる実装 static Map<BigInteger, List<BigInteger>> cache = new HashMap<>; void doGet(…) { BigInteger n = …; List<BigInteger> result = cache.get(n); if (resu
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く