タグ

javaに関するkamipoのブックマーク (49)

  • Optionalの取り扱いかた - 日々常々

    JavaSE8で追加されたjava.util.Optionalにはnullとの戦いに終止符を打ってもらいたいと思っているんですが、思ってるだけだと何も起こらないので、使い方とか思ったこととかを一通り書いておきます。 Optionalのファクトリメソッド Optionalのインスタンスメソッド 値を取得するもの 値を使用するもの Optionalのまま扱うもの まとめ なお、一通りと言いつつOptionalIntとかはスルーしています。機会と書くことがあればそのうち書くかもしれません。 Optionalについては諸事情(遅筆とか理解不足とか分量とか)によりJavaエンジニア養成読では軽い紹介にとどまっておりましたので、補足としてお読みいただけると幸いです。あと、この辺も参考にどうぞ。 OptionalのJavadoc 一通り触って適当にコメント書いたコード(GitHub/sandbox)

    Optionalの取り扱いかた - 日々常々
    kamipo
    kamipo 2015/05/08
  • Javaでヒープ領域を余らせたままOutOfMemoryErrorを出す方法 - 西尾泰和のはてなダイアリー

    先日、こんな問題を見かけたのだけども、JavaのGCにはあまり詳しくないので答えがわからなかった。 OutOfMemoryErrorが発生しました。(中略)ヒープメモリは足りているようです。原因として何が考えられますか? http://d.hatena.ne.jp/iad_otomamay/20130318/1363596244 なんでだろうなぁと思っていたところid:moriyoshiが「Permanent領域があふれたんじゃないの」と一言。「Permanent領域」で検索してみると、なるほど、そういうことなのかー。 というわけで早速それを再現させるコードを書いてみた。ヒープの大部分ががら空きなのにPermanent領域だけ99%になっているのがわかるかと思う。 Exception in thread "main" [Full GC [Tenured: 515K->515K(56896K

    Javaでヒープ領域を余らせたままOutOfMemoryErrorを出す方法 - 西尾泰和のはてなダイアリー
  • 第1回 JVMはどのようにメモリ空間を利用するのか | gihyo.jp

    あのWebサービスもJVMを利用している 「Javaは大規模なエンタープライズシステムにしか使われない」 それが常識だと思っていませんか? たしかに、これまでJava Virtual Machine(JVM)は、他の言語を実行すると遅く、Javaのプログラムを実行する環境にすぎないものでした。ところが、Java 7から実装されたInvokeDynamicにより、JVM上で、RubyPHPなどさまざまなコンピュータ言語で記述されたプログラムをより高速に実行できるようになりました。 これにより、今までエンタープライズでJava言語で記述されたプログラムを実行するだけの環境であったJVMが、汎用的な実行環境になったと言えます。また、これまでJavaの実行環境として使用されていたノウハウが、他の言語で記述されたプログラムを実行する際にも利用できます。 最近では、TwitterがJVMをアプリケー

    第1回 JVMはどのようにメモリ空間を利用するのか | gihyo.jp
  • “Stop the World”を防ぐコンカレントGCとは? (1/2) - @IT

    “Stop the World”を防ぐコンカレントGCとは?:現場から学ぶWebアプリ開発のトラブルハック(2)(1/2 ページ) 連載は、現場でのエンジニアの経験から得られた、APサーバをベースとしたWebアプリ開発における注意点やノウハウについて解説するハック集である。現在起きているトラブルの解決や、今後の開発の参考として大いに活用していただきたい。(編集部) Full GC問題の時代が再び到来! それまで順調に動いていたはずのWebアプリケーションが、ある時突然、応答を返さなくなる。そして、運用者があたふたしている間に、何事もなかったかのように再び動き出す。 Javaで構築したシステムにかかわる者ならば誰しもが体験するであろう事象、そうFull GC(ガベージ・コレクション)だ。Full GCが行われている間、すべてのアプリケーションスレッドは停止する。この事象は“Stop the

    “Stop the World”を防ぐコンカレントGCとは? (1/2) - @IT
  • @IT:事例に学ぶWebシステム開発のワンポイント(6)APサーバからの応答がなくなった、なぜ?

    今回のワンポイント アプリケーション・サーバから応答がない、いわゆる無応答状態は、ベンダのサポートセンターに寄せられる質問でも数が多いといわれている。無応答状態の原因の多くはGC(ガベージ・コレクション)にあり、これはGCチューニングにより解消可能だ。今回の記事では、GCチューニングにより無応答状態を解決する道のりを紹介していく。 サーバから応答がない、なぜ? あるとき、長時間レスポンスが返ってこないという事象が発生した。定期的な応答時間の監視から、無応答状態はアプリケーション・サーバを起動してから数時間経過すると発生し、数分間無応答状態が続いた後に再び正常に処理を開始することが分かった。 無応答の原因を探る 筆者はこの現象を見て、無応答が数分間で終わっていることからガベージ・コレクション(GC)が原因であるとの仮説を立てた。GC実行中、アプリケーション・サーバのCPUはGCのためだけに使

    @IT:事例に学ぶWebシステム開発のワンポイント(6)APサーバからの応答がなくなった、なぜ?
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
    kamipo
    kamipo 2011/11/29
  • MessagePack for Java ついに 0.6 リリース! - Blog by Sadayuki Furuhashi

    先日の fluent に引き続き、新しいソフトウェアのリリースです。 満を持して、MessagePack for Java 0.6 をリリースしました! 9ヶ月ぶりのメジャーバージョンアップです。 以前のバージョン 0.5 の API をすべて見直し、互換性を維持しながらも、数多くの機能を新たに搭載しました。動的オブジェクトAPI や リフレクション機能の強化、JRubyとの連携、JSONサポート などなど。もちろん、性能も大きく向上しています。 このバージョン 0.6 のリリースによって、MessagePack の応用範囲は大きく広がります。MessagePackは、クラウドシステムからモバイルデバイスデバイスまで、多種多様なシステムの連携と統合をサポートする、新しいデータ表現形式です。 さて、新機能の詳細をご覧下さい: JSONシリアライザ・デシリアライザを統合 MessagePack

    MessagePack for Java ついに 0.6 リリース! - Blog by Sadayuki Furuhashi
  • Javaのhello worldの読み方 | mwSoft

    前書き お馴染み、hello worldのソース。 class Hello { public static void main(String[] args) { System.out.println("hello world"); } } このコードはコンパイルされると、こんなバイトコードになります。 ca fe ba be 00 00 00 32 00 22 07 00 02 01 00 05 48 65 6c 6c 6f 07 00 04 01 00 10 6a 61 76 61 2f 6c 61 6e 67 2f 4f 62 6a 65 63 74 01 00 06 3c 69 6e 69 74 3e 01 00 03 28 29 56 01 00 04 43 6f 64 65 0a 00 03 00 09 0c 00 05 00 06 01 00 0f 4c 69 6e 65 4e

    kamipo
    kamipo 2011/08/26
  • 学校では教えてくれない System.out.println() - 郡山からHello World

    実際に学校で教えてくれるかは別として System.out.println()について考えてみよう。System.out.println()は、Javaを勉強しようとする人が初期の段階から利用するメソッドである。が、しかし、実は謎だらけなのである。 まずは、System.out.println()を分解して考えてみる。 Systemjava.lang.Systemである。 outはjava.lang.Systemのフィールドである。 Systemクラスのjavadocを眺めると、outの型はPrintStreamであることがわかる。 PrintStreamのjavadocを眺めると、printlnメソッドが存在する。 つまり、System.outにPrintStreamのオブジェクトが代入されていて、そのオブジェクトのprintlnメソッドを呼んでいるだけでる。このメソッドを実行すること

    学校では教えてくれない System.out.println() - 郡山からHello World
    kamipo
    kamipo 2011/08/19
  • Lucene/SolrをJava 7で使うときの注意(あるいはJava 6以前でもホットスポットのバグを踏む可能性あり) | 関口宏司のLuceneブログ

    一定期間更新がないため広告を表示しています

    Lucene/SolrをJava 7で使うときの注意(あるいはJava 6以前でもホットスポットのバグを踏む可能性あり) | 関口宏司のLuceneブログ
  • Jetty 8が最速 - Servletコンテナ起動時間比較 | エンタープライズ | マイコミジャーナル

    Java Servlet Technology Javaのアプリケーションサーバは年中無休で稼働し続けるタイプのシステムであるため、アプリケーションサーバそのものの起動時間が注目されることはあまりない。一度起動してしまえばJavaの高速化技術によって、稼働するごとに動作が速くなるし、動作速度が問題になることも少ない。 しかし、これが開発段階ということになると話が違ってくる。開発段階ではアプリケーションサーバの停止と起動を繰り返すというのはざらにある状況だ。起動が遅いアプリケーションサーバを使っていたのではストレスを感じてしまう。そうした場合に役立つデータが「Servlet containers, startup time」に掲載された。 Servlet containers, startup time - Afterburnerより抜粋 Glassfish 3.1、Jetty 8.0.0M

    kamipo
    kamipo 2011/07/20
  • HTTPサーバにJava NIOは必要か

    0x00. はじめに 筆者はJava製のWAF(Web Application Firewall)、Guardian@JUMPERZ.NETの開発とメンテナンスを行っている。元は自社のシステムを守るために(そして半分趣味で)作ったものだが、数年前にこれをコアのエンジンとしてさらに拡張し、SaaS型の商用サービス「Scutum(スキュータム)」を立ち上げた。 その後順調に顧客を獲得することができ、システムリソース的にも増強が必要となる段階などを経験した。Google、mixiやはてな等、さまざまな大規模サイトのインフラエンジニアの方々がインフラ設計に関する考え方などをインターネット上で公開してくれているおかげで、初期のシステム設計時に「将来的にスケールアウト可能なシステム構成にしておくこと」が重要であるということがわかっていた。その教えに従っていたおかげで、リソースの逼迫(ちなみに今回はCP

    HTTPサーバにJava NIOは必要か
  • Javaメモリ、GCチューニングとそれにまつわるトラブル対応手順まとめ - 日記のような何か

    GC周りでトラブルシューティングした際の経験や、Web等で調べたことをまとめてみる。 前提 ・JVMは、Sun Javaを想定。(他は使ったことないです。。。) ・Sun Java 1.5-1.6を想定。 目標 マイナーGC、Full GCそれぞれが頻発することなく、かつそれぞれの実行時間を1秒未満に抑えること。 マイナーGCは1秒未満どころではなく、もっと短くなるべき。どれくらいが理想かは?(0.1秒未満ぐらいを目指したい?) 連続した負荷状態(想定されるピークアクセス)でもOutOfMemoryErrorが発生しないこと。 理想的な状態は、上記に加えて、Full GCの発生が低頻度であること。 具体的には、できるだけマイナーGCで短命オブジェクト(1回使ったらもう使わないようなオブジェクト。逆にセッションオブジェクト等は長命オブジェクトとなる)を破棄させて、短命オブジェクトが、Tenu

    Javaメモリ、GCチューニングとそれにまつわるトラブル対応手順まとめ - 日記のような何か
  • Apache commonsが便利な件(commons-collections編-1) - 都元ダイスケ IT-PRESS

    http://d.hatena.ne.jp/daisuke-m/20080702/1214982943 再びユーティリティ系。ということで今回はcommons-collections。 commons-collections は、Javaコレクションフレームワーク(っていうと大仰だけど、要はListとかSetとかMap。以下JCF)まわりのユーティリティ。 ところで、JCFまわりは Java1.4から5.0へのバージョンアップにあたり、ジェネリクスが導入されて、非常に使いやすくなりました。今やジェネリクスのないコレクションなんて、怖くて触りたくない病に罹っている今日この頃です。 しかし、このcommons-collectionsは下位互換を理由にジェネリクス化されていません。ジェネリクス世代としては、敬遠せざるを得ません><。 が、どうやら家Apacheからフォークしてcommons-c

    Apache commonsが便利な件(commons-collections編-1) - 都元ダイスケ IT-PRESS
    kamipo
    kamipo 2010/08/02
  • Executing scripts on a remote machine - Marigan's Weblog

  • H2 Database Engine

    Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size

  • チームラボ天下一武道会 - 純粋関数型雑記帳

    チームラボ天下一武道会 ~コードGolf & F1レース!~ : ATND に参加してきました。普段Java使っていないのでどうなるかと思いましたが、なんとか優勝することができました。 問題は、ユーザデータと商品の購入データが与えられるので、全商品間のコサイン類似度を求めよというものでした。入力は <ユーザID>,<商品ID> のCSVで与えられ、出力は商品ID×商品IDの二次元配列をCSVで出します。購入データは1万件、ユーザ数は1000以下、商品数は500以下という制限です。 順位は、実行時間によるスコアとバイトコードのサイズによるスコアの和によって付けられます。それぞれ50点満点で、実行時間は 10秒 (50点) 60秒 (0点) バイトコードのサイズは、 1Kbyte (50点) 6Kbyte (0点) を基準として、線形補完されて決まります。50点満点ですが、基準値を超えた場合は

    チームラボ天下一武道会 - 純粋関数型雑記帳
  • AtomicLong と ReentrantReadWriteLock の速度比較 - Be an Idealistic Realist

    int などへのアクセスとは異なり、long へのアクセスはアトミックな処理ではないため、マルチスレッド環境では排他処理が必要になります。普通に処理排他処理をするのであれば ReentrantReadWriteLock を使いそうなものですが、純粋に long のみをアトミックに扱いたいだけであれば、AtomicLong が使えます。しかし、性能がどの程度異なるのでしょうか。ということで、ベンチマークしてみました。 処理概要 long への read と write を交互に合計100万回行うスレッドを10スレッド並行動作させた時間を計測。 long のテストは、long をフィールドとして持つクラスを作成し、get では ReadLock を使用、set では WriteLock を使用。 AtomicLong のテストは、AtmicLong#get() と AtomicLong#set

    AtomicLong と ReentrantReadWriteLock の速度比較 - Be an Idealistic Realist
    kamipo
    kamipo 2010/03/03
  • Javaバイトコードの読み方 - プログラマーの脳みそ

    Javaのデバッグをしていて、ステップ実行中にステップインを繰り返したらソースコードのないところに行き当たったことがあるだろう。あるいはEclipseでF3キーでクラスやメソッド・フィールドの宣言元を辿っていってソースコードのないところに行き当たったことがあるだろう。 Eclipseの場合、"Class File Editor"というものが開く。そこにはJavaのバイトコードのニーモニックがズラズラと並んでいて、「これは読めないや、ワケが分からない」と投げ出してしまったりしていないだろうか。 怖がることはない。ちょっとコツを掴めばすぐに読めるようになる。 Class File Editorの開き方 自前のJavaクラスの場合、ビルドして出来上がったclassファイルを開く必要がある。"Package Explorer"だとclassファイルは隠されていて見えないのでWindow -> Sh

    Javaバイトコードの読み方 - プログラマーの脳みそ
  • Java変態文法最速マスター - プログラマーの脳みそ

    Java基礎文法最速マスター - いろいろ解析日記をリスペクト。 Javaの変態文法・技法一覧です。Javaの基礎をある程度知っている人はこれを読めばJavaの変態をマスターしてJavaを書くことができるようになっています。簡易リファレンスとしても利用できると思いますので、これは足りないと思うものがあれば教えてください。 1.基礎 エンクロージング型内部classの作成 外部classのインスタンスに紐付くインスタンスを生成します。外部クラスのインスタンス - 内部クラスのインスタンス間に、クラス - インスタンスのような関係を持たせることができます。 public class Outer { public class Inner { } } というようなクラスを作った場合、 Outer o = new Outer(); Inner i = o.new Inner(); となります。new

    Java変態文法最速マスター - プログラマーの脳みそ
    kamipo
    kamipo 2010/02/03