タグ

Javaに関するmasudaKのブックマーク (186)

  • JVM オペコードのリファレンスビューアが便利 - 全力で怠けたい

    vim-ref-jvmis 使い方 " Vundle の場合 " vimrc に追記&再読込して :BundleInstall Bundle 'ebc-2in2crc/vim-ref-jvmis' " NeoBundle の場合 " vimrc に追記&再読込して :NeoBundleInstall NeoBundle 'ebc-2in2crc/vim-ref-jvmis' Jvmis というコマンドが勝手に定義されるので、調べたいオペコードの上にカーソルを置いて :Jvmis を実行すると ref.vim インタフェースでリファレンスを閲覧出来ます。 リファレンスは The Java Virtual Machine Instruction Set から引いて来るので環境によっては一瞬もたつきますが、デフォルトでキャッシュを有効にしているので2回目以降は素早く引くことが出来ます *1 これ

    JVM オペコードのリファレンスビューアが便利 - 全力で怠けたい
  • Javaのモックアップフレームワーク「mockito」でリクエスト/セッションを再現する

    しかし、開発推進セクションとしてリーダーを中心に「基的には必須ですが、相談には乗ります」と伝えてきました。もちろん、こちらとしても妥協することはありますが、基は書いてもらうように言い続けたことは良かったと思います。今ではテストケースは2,000ケース以上となり、毎日jenkinsからもallTestの結果が送られてくるようになったのですから。そんなやりとりをしていく中で、こんなFAQも生まれました。 Q:巨大なメソッドで1行だけ修正したのですが、そのメソッド内をすべてテストしないといけないの? A:基はテストしてください。 ただしトラブル対応など、どうしてもすぐにリリースしないといけない場合はその限りではありません。 結果的にこのようなFAQは、開発メンバーにJUnitの導入を受け入れてもらうために必要なことだったと思います。やはり、開発スピードを重視するチームにとって、やることが多

    Javaのモックアップフレームワーク「mockito」でリクエスト/セッションを再現する
  • JJUGナイトセミナー「Java解析ツールバトル」 - torutkのブログ

    今日は、JJUG主催のナイトセミナー「Java解析ツールバトル」が19:00〜21:00の時間帯で開催されました。日バトルに参加したツールとパネリストは次の3つです。 ENdoSnipe(谷氏) HeapStats(末永氏、久保田氏) Java Flight Recorder(杉氏) 今日は、パネルディスカッション形式でコーディネータが山裕介氏です。 Java Flight Recorder http://www.oracle.com/technetwork/java/javase/downloads/index.html 旧BEAシステムズのWebLogicサーバーで使われた独自のJavaVMであるJRockitに搭載されていた稼動情報収集機構のFlight Recorderと収集した情報を解析するMission Controlからなる解析ツールが、OracleのHotSpotVM

    JJUGナイトセミナー「Java解析ツールバトル」 - torutkのブログ
  • @IT Special PR: Javaプログラムの挙動を「すべて記録」 迅速な原因解析で障害リスクと対応コストを最小化

    いまやJavaは、企業の基幹業務を担うエンタープライズ・システムに使われることも珍しくなくなっている。こうしたミッションクリティカルな分野では迅速な障害対応が強く求められるが、Java特有の機構がその原因解析を妨げる場合もある。こうした原因解析を強力に支援する「JRockit Flight Recorder」を紹介しよう。 Javaの特徴として、プログラムがJava仮想マシン(JVM)上で動作することが挙げられる。JVMはガベージコレクション機能を備え、プログラムが使用するメモリを自動的に最適化する。そのため、プログラマはメモリの管理については気にすることなく、ロジックに集中できる。これはJavaを使ううえでの大きな利点だ。しかし、JVMのガベージコレクションも万能ではない。まれに、使わなくなったオブジェクトがそのまま解放されずにメモリをいつぶしていくなどしてメモリが不足する、アウト・オ

  • HotSpot JVMで動作するMission ControlとFlight Recorder

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    HotSpot JVMで動作するMission ControlとFlight Recorder
  • System.out を置き換えよう - にょきにょきブログ

    Java では System.out.println メソッドで hello world 等のメッセージを標準出力に出力できるが、この出力先は変更可能なのです。 System クラスには setOut メソッドがあり、このメソッドを用いて System.out を置き換える事ができる。 デフォルトでは標準出力になっているが、setOut でファイルに出力する PrintStream を渡せば以降 System.out.println や System.out.print メソッドの引数がファイルに出力される。 コード例 public class ReplaceStdOutTest { public static void main(String[] args) { try { // debug.log に出力する PrintStream を生成 PrintStream out = new

    System.out を置き換えよう - にょきにょきブログ
  • Java8時代の文字列連結まとめ - きしだのHatena

    文字列の配列やリストを[〜]で囲ってカンマで区切って連結するという話、String.joinだとどう?とwatermintさんから指摘があったので、試してみました。 シンプル! public static String stringJoin(){ return "[" + String.join("],[", strarray) + "]"; } でも、1847msでした。改めて前後の文字を文字列連結してるところで時間かかってる感じ。 で、昨日のStringBuilder版はもう少し最適化できるので書き直します。 public static String stringBuilderJoin(){ StringBuilder s = new StringBuilder("["); for(int i = 0; i < strarray.length; ++i){ if(i != 0){ s.

    Java8時代の文字列連結まとめ - きしだのHatena
  • JVM Operation Casual Talks #1でLTとパネルディスカッションしてきた - oinume journal

    JVM Operation Casual Talks #1でLTとパネルディスカッションしてきました(togetterまとめ)。 運用に効く!JVMオプション三選 from Kazuhiro Oinuma この日登壇した人でJVM好きな人っていたんだろうか?っていうぐらいLL寄りな人が多かった印象だった。パネルディスカッションというものは初めてだったんだけど(*1)、人の目の前でJVMをDISれてよかったなぁと思う。はてなさんの新しいサービスはScalaでできているらしくてそれがすごいビックリした。(LLで頑張る会社だと思ってたので) パネルディスカッション中に「JVMのプロセスはカジュアルに再起動するものじゃない」という意見が出て、理想はそうなんだろうけど現実はFullGCしたりするしじゃじゃ馬なんだよなぁと思ったりした。結局JVMの上に乗るものは人間が作るものでバグがあったり不完全だっ

    JVM Operation Casual Talks #1でLTとパネルディスカッションしてきた - oinume journal
    masudaK
    masudaK 2014/04/08
    激しく同意。「結局JVMの上に乗るものは人間が作るものでバグがあったり不完全だったりするので、危なくなったらLBから切り離して再起動する運用は全然アリだと思う。もちろん進んでやるものではないですが。」
  • StringBuilderを使ったクソコードはどこまで遅いか - きしだのHatena

    ※ 4/9 11:25 いろいろ計測しなおしてます。こちらも参照 Javaで文字列連結する場合には+演算子よりもStringBuilderを使うべき、という話があるのですが、よく sb.append("[" + data + "]"); みたいなコードをみかけて、あんまり意味ないなーと思ったりします。 あと、 sb.append("title:"); sb.append("[" + data + "]"); みたいに、+演算子を使った一行の式にして sb = "title:" + "[" + data + "]"; としておけば「title:」と「[」はコンパイル時点で最適化されたのに、ってコードもあります。 ということでTwitterJavaでの文字列連結は+を使うべき、ってやったほうが、StringBuilder使ったsb.append("[" + data + "]")みたいなク

    StringBuilderを使ったクソコードはどこまで遅いか - きしだのHatena
    masudaK
    masudaK 2014/04/08
  • G1GCのつかいどころメモ - nekop's blog

    以下の環境とテストでCMSとG1GCを比較してみた。かなり急ぎでやったので間違っている可能性が多少ある。 16 cores, 32GB mem -Xms24g -Xmx24g 8 instances Infinispan 6.0.3.Final DIST cache, put 4GB data (1KB entry * 2M, 2GB data with one backup copy, 2GB * 2 = 4GB) CMS: -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=30 G1GC: -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:InitiatingHeapOccupancyPercent=30 $ java -XX:+UseG1GC -XX:+PrintFlagsFinal

    G1GCのつかいどころメモ - nekop's blog
  • Java Day Tokyo 2013 Java The Night - G1GCVisualizer -

    This slide is introduction about the G1GC Visualizer at Java The Night, Java Day Tokyo 2013.Read less

    Java Day Tokyo 2013 Java The Night - G1GCVisualizer -
  • Commons DBCP

    Commons DBCP は、データベースのコネクション・プーリングを扱うライブラリです。 Tomcat で標準採用されています。 動作説明 動作を簡単に説明します。 クライアントから接続要求が発生した場合 … getConnection() 1. DBCPは、プール内に空き接続があるか確認 2. あればそれを返す。この時その接続は アクティブ となる 3. プール内に空き接続が無ければ、新たに接続を作って返す クライアントから切断要求が発生した場合 … conn.close() 1. 切断要求のあった接続をプール内に保管する。この時その接続は アイドル となる 2. もしプール内に maxIdle 以上の接続が溜まったら、それ以上にならないように接続を削除する 接続監視スレッド DBCPには接続監視スレッドというものが存在します。 これは一定時間毎にプール内のアイドル接続をチェックするも

  • Java8からはHashMapの性能のためにComparableを実装しておいた方がいい - interprism's blog

    こんにちは、andoです。 ついにJava8がリリースされたのでさっそくインストールしてみました。 Java8になってラムダ式を始め、多くの機能が追加されたのですが、既存機能についても性能改善が行われています。 人気がありそうな新機能の紹介は他の人にお任せして、今回はHashMapの変更点について確認したいと思います。 はたして既存のプログラムはJava8で実行するだけで、その恩恵を享受できるのでしょうか。 java.util.HashMap HashMapといえば使用頻度1、2を争うコレクションクラスでデータの検索、追加がO(1)で行え、 辞書的に使える事から簡易的なDTOやキャッシュ、データベースのレコード構造、さらにはListですむところでさえ数値をキーにして使う兵もいるというくらい良くも悪くも色々使えます。 それが速くなるのであれば、既存のプログラムも速くなるはず、ということでさっ

    Java8からはHashMapの性能のためにComparableを実装しておいた方がいい - interprism's blog
    masudaK
    masudaK 2014/04/05
  • 速いよ Java Play Framework - Y's note

    Play Framework 2徹底入門 JavaではじめるアジャイルWeb開発 作者:掌田 津耶乃,原 一浩翔泳社Amazon 言語とFrameworkの選定 phpにはあまり魅力を感じていない@yutakikuchi_です。題とは関係ありませんが4.25(金)@ヒカリエのイベントに登壇します。ネタは同窓会GrowthHackとログ集計/解析の2立てです。興味のある方はどうぞ。【ヒカ☆ラボ】同窓会GrowthHack!×データログ集計、解析!をテーマに事例をまじえお話します! 16年ぶりの再会でも参加率6割の同窓会を開くには?Yahoo出身のエンジニアが語る、アクセスログ可視化、 ユーザ属性解析を行うためのシステム設計のコツとは? Round 8 results - TechEmpower Framework Benchmarks さて、題に入ります。僕がphpを書き始めたのも前職

    速いよ Java Play Framework - Y's note
  • iteratorや拡張forよりStreamのforEachが速い? - きしだのHatena

    ちょっと気になったので、簡単にベンチマークしてみました。 最初は、ラムダ呼び出しが入る分forEachは遅いんじゃないかと思っていたら、倍の速さに。 もちろん、いろんな条件で変わるんだろうけど、ここまで差が出ることがあるのは驚き。 あと、Collectors.summingIntのような基型に対するCollectorを使うよりは、intStreamに変換してからsumなど専用メソッドを使うほうが圧倒的に速いことも確認できた。 とりあえず、0から10万件のListを用意。 array = IntStream.range(0, 100_000).boxed().collect(Collectors.toList()); それからベンチマーク用のメソッドを用意。 public static void bench(String name, Supplier<Integer> proc){ ben

    iteratorや拡張forよりStreamのforEachが速い? - きしだのHatena
  • 社内Java8勉強会 ラムダ式とストリームAPI

    Spring Bootのオートコンフィグレーションの恩恵によって、開発者はコンフィグレーションの煩わしさから解放され、Springを容易に動かすことができるようになりました。その反面、ブラックボックスになってハマってしまうことも少なくありません。セッションでは、Spring Bootのオートコンフィグレーションの仕組み・デバッグ方法・カスタマイズ方法を説明します。セッションを聞いてオートコンフィグレーションを便利に使っていきましょう。 (Spring Fest 2021での発表資料)

    社内Java8勉強会 ラムダ式とストリームAPI
  • Java8 で StringBuilder/StringBuffer クラスがリファクタリングされていました。 - 地平線に行く

    ついに Java SE 8 がリリースされました! そこで、早速ダウンロードして、Java 8 のソースコード(src.zip)を Java 7と比較してみたところ、公表はされていないのですが、ちょこちょことリファクタリングされていることがわかりました。 そこで、そのうち StringBuilder/StringBuffer クラスについて調べてみました。 引数に null が渡されたときの処理 append メソッドの仕様で、「引数が null の場合、"null" という4文字が追加される」というのがあります。 この仕様について、Java 7までは "null" という文字列を追加するという実装がされていました。 // Java 7 Update 51 (AbstractStringBuilder クラス 422行目〜) public AbstractStringBuilder app

    Java8 で StringBuilder/StringBuffer クラスがリファクタリングされていました。 - 地平線に行く
    masudaK
    masudaK 2014/03/20
  • 今日から始めるJava8 - Taste of Tech Topics

    こんにちは id:cero-t です。 「なんとやらは風邪をひかない」と言われているところ 先日、インフルエンザに掛かってしまいまして。 重ね着+多段布団+電気毛布2枚のコンボで一気に悪寒を吹き飛ばし、 一日で熱を下げたものの、感染予防のために出社を控えたために時間でき、 ちょっとJava8などと戯れていました。 そう、今日はJava8の話題です。 今年の秋に正式リリースが予定されているJavaSE8ですが、 OpenJDKのサイトでは、既にEarly Access版を入手することができます。 JDK8 : http://openjdk.java.net/projects/jdk8/ ダウンロード : http://jdk8.java.net/download.html 1/31に、マイルストーン6がリリースされ Feature Complete となりました。 名前からすると 全機能開発

    今日から始めるJava8 - Taste of Tech Topics
    masudaK
    masudaK 2014/03/19
  • Javaトラブルに応じた初動対応のまとめ - n-agetsumaの日記

    Javaトラブルでは『情報がなくて、再現もなかなかしません』といった状況に陥ることがある。このような状況を回避するために、以下の3つの代表的なトラブルを例に、アプリケーションサーバを再起動する前に何を取得すれば良いのかをまとめてみる。 アプリケーションから応答がない アプリケーションが遅い ヒープメモリが足りない(OutOfMemoryErrorの発生) アプリケーションから応答がない 取得する情報 スレッドダンプ データ取得方法 スレッドダンプとは、コマンド実行時点でのJavaスレッド実行状態を出力したものである。応答がない場合、何らかの要因によりどこかで処理が止まっていることが想定される。スレッドダンプは『どこで止まっているのか?』を切り分けるのに大切な情報である。 取得方法はJDKのバージョンによって色々ある。 kill -3 <pid> (少なくとも1.4.2にはある〜JDK7でも

    Javaトラブルに応じた初動対応のまとめ - n-agetsumaの日記
    masudaK
    masudaK 2014/03/13
  • あなたのJavaコードをスッキリさせる、地味に便利な新API 10選(前編) - Taste of Tech Topics

    こんにちは! アキバです。 ...T3ブログは初登場かもしれません。ハジメマシテ。 以後お見知りおきを。 いよいよ、2014年3月、Java8が正式公開されますね。 なんと言っても、Java8の注目機能はラムダ式ですので、ラムダ式や型推論に関する記事は多いです。 世の中で「Java8」と検索すると、皆さんいろいろと記事を書かれているので、おおよその事はこれで分かっちゃうような気がします。 が、 実は地味に便利なAPIが追加されていたりすることを最近知りました。 これはあまり触れられていないぞ、と。 というわけで、このエントリでは、あまり日語で情報の無い、しかし地味に便利なAPIに実際に触れてみます。 大事なところなので2回強調して書いてみました。 今回は、前編として4つ紹介します。 ※APIの紹介と言いつつ、コードにはラムダ式を使ったコードが普通に出てるので、ご了承ください。 (むしろ、

    あなたのJavaコードをスッキリさせる、地味に便利な新API 10選(前編) - Taste of Tech Topics
    masudaK
    masudaK 2014/03/13