タグ

javaに関するsoh335のブックマーク (90)

  • 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
    soh335
    soh335 2014/04/09
  • JavaVMのメモリ管理に関するまとめ(Javaヒープ、GC、ダンプ等) - ぺーぺーSEのブログ

    ブログはJava8(特にMetaspace)に対応していない。 下記にJava8以降に対応した記事を記載する(予定)。 blog.pepese.com JavaVMのメモリ領域について JavaVMが管理するメモリ領域について 階層1 階層2 階層3 説明 Javaヒープ JavaVM上で起動するJavaプログラムのリソースを管理する領域。New領域とOld領域で構成される。 l" New領域 新規オブジェクトと閾値(-XX:MaxTenuringThreshold)未満のオブジェクトが配置される。(Young領域とも呼ばれる) l l" Eden領域 新規のオブジェクトが配置される。 l l" From領域 CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされる。(S0やS1とも呼ばれる) l lー To領域 CopyGC(Scav

    JavaVMのメモリ管理に関するまとめ(Javaヒープ、GC、ダンプ等) - ぺーぺーSEのブログ
    soh335
    soh335 2014/02/04
  • Java8で複数の処理を確実に実行するイディオム - きしだのHatena

    たとえばこんな感じで複数の処理があるとしますね。 public static void proc1(){ System.out.println("proc1"); } public static void proc2(){ System.out.println("proc2"); } public static void proc3(){ System.out.println("proc3"); } この、proc1とproc2とproc3を、すべて実行する必要があるとします。どれかで例外が出ても残りは必ず実行できるように、と。 そうすると、それぞれtry〜catchで囲んで処理をする必要があるのですが、それを便利に記述できるイディオムがあります。 こんな感じ try(Closeable c = () -> proc1(); Closeable c2 = () -> proc2(); Cl

    Java8で複数の処理を確実に実行するイディオム - きしだのHatena
    soh335
    soh335 2014/01/15
  • Java8で最もインパクトのある構文拡張、デフォルトメソッド - きしだのHatena

    Java8でのラムダの使い方などを説明してきたのですが、構文拡張自体には触れていなかったので、改めてここで簡単に説明しておこうと思います。 まずは、Java8で実際に最もインパクトがある言語拡張、インタフェースのデフォルトメソッドです。 デフォルトメソッドとデフォルト実装 いままでインタフェースには実装をもつことができませんでしたが、Java 8からはインタフェースが実装をもてるようになります。 実装をもつメソッドを定義するときには、キーワードdefaultをメソッドの前につけます。 interface Foo{ void print(String s); default void twice(String s){ print(s); print(s); } } twiceメソッドが実装をもっています。この実装をデフォルト実装といいます。 デフォルトメソッドを実装するクラスで、デフォルトメ

    Java8で最もインパクトのある構文拡張、デフォルトメソッド - きしだのHatena
    soh335
    soh335 2013/06/11
  • Java8でのプログラムの構造を変えるOptional、ただしモナドではない - きしだのHatena

    ※ 5/29 3:23 追記:なんかモナドになったかも。最下部参照 さて、Java8での拡張をいろいろ見てきたわけですが、ではアプリケーションプログラムでFunctionを受け取るメソッドをがんがん定義するかというとそういうことはあまりなく、フレームワーク的な部分で数個定義する感じになると思います。もちろん数個でも効果はでかいのですが。 また、おそらくStreamを受け取ったり返したりするメソッドを定義することは、めったにないのではないかと思います。 Mapでの拡張も、メソッド内部での処理記述がかわる話で、メソッドの引数や戻り値はMapのまま変わりありません。 Javaでのプログラムの構造というのは、メソッドの引数や戻り値の型がなんであるかで決まると言うことができます。その意味では、lambdaやStreamというのは処理の記述は変わるけどプログラムの構造は変わらないとなります。 けれども

    Java8でのプログラムの構造を変えるOptional、ただしモナドではない - きしだのHatena
    soh335
    soh335 2013/05/25
  • Java8のStreamを使いこなす - きしだのHatena

    さて、Java8で関数型っぽいことをやって遊んでみたわけですが、実際はそんな書き方しませんよね。 Java8で実際に使うのは、Streamです。 ということで、Streamの使い方をひととおり見てみます。 ※5/17 仕様変更があったので、修正しました 基 まずは、Iterableインタフェースに用意されたforEachメソッドを見てみましょう。 List<String> names = Arrays.asList("hoge hoge", "foo bar", "naoki", "kishida"); names.forEach(s -> System.out.println(s)); これで次のように表示されます。 hoge hoge foo bar naoki kishida いままでの拡張forだと次のように書いてました List<String> names = Arrays.a

    Java8のStreamを使いこなす - きしだのHatena
    soh335
    soh335 2013/05/05
    おお
  • Java開発者のための関数プログラミング

    書はオブジェクト指向プログラミングに慣れ親しんだ読者を対象に、関数プログラミングの手法や考え方の一端を紹介する書籍です。Javaによるサンプルコードを例に、関数プログラミングの実用的で実践しやすい内容を紹介します。Javaプログラマだけでなく、他のオブジェクト指向プログラミング言語のユーザーにも参考になる内容でしょう。なお書はEbook版のみの販売となります。 書のサンプル(序文〜1章、ePUB形式、363KB) 序文 「Java開発者のための関数プログラミング」へようこそ 書で使用されている表記規則 書に関するお問い合わせ 謝辞 1章 なぜ関数プログラミングなのか 並列プログラミングが得意でなければいけない たいていのプログラムは単なるデータ管理問題 関数プログラミングはよりモジュール的 より迅速に開発しなければいけない 関数プログラミングは簡潔さへの回帰 2章 関数プログラミ

    Java開発者のための関数プログラミング
    soh335
    soh335 2012/06/21
    気になる
  • 新しい Java SE API リファレンスの入手先について

    新しい Java SE API リファレンスの入手先について 2012年3月25日 at 10:30 午後 3件のコメント 2012 年 03 月 25 日、sun.com のドメインが利用不可になりました。これに併せ、java.sun.com で提供されていた Java SE API語ドキュメントもオンライン経由で参照する事ができなくなりました。今後、日語の Java SE API レファレンスはオンライン経由では参照できなくなりますので、アーカイブを御入手の上、ローカル環境でご参照ください。お手数をお掛けし申し訳ございませんが、どうぞ宜しくお願いします。 Java API の日語ドキュメントはコチラから入手が可能です。 ドキュメントの再配布ポリシーはコチラをご参照ください。 新しい日API ドキュメントのオンライン参照先URL (2012/4/11 訂正、追記) htt

    新しい Java SE API リファレンスの入手先について
    soh335
    soh335 2012/03/26
  • Mac OS X Lion で javac コマンドが文字化けするのを直す - 今日もスミマセン。

    Mac OS X のターミナルで、javac を実行すると、デフォルトの文字エンコーディングがなぜか、Shift JIS になっているせいで文字化けしてしまう。 対処方法を求めてググると、以下の記事がヒットした。 (Mac OS X Tips::Snow Leopard)ターミナルでのJava文字化け対策 - jitsu102の日記 上の記事では、aliasを使った方法で、 alias javac 'javac -J-Dfile.encoding=UTF-8'というふうに、rcファイルに定義しておくことで対処していたが、もうちょっといい方法があるんじゃないかなーと思い、探したら、Stack Overflow に自分が期待していたのに近い回答があった。 環境変数 JAVA_TOOL_OPTIONS にVMを起動するときに渡すオプションを記述しておけば、いちいちjavaのツールを実行するときに

    Mac OS X Lion で javac コマンドが文字化けするのを直す - 今日もスミマセン。
  • JavaでSVGを出力 - TM’s Working Memo

    Batik SVG Toolkitを使うと、Java2Dで描画した画像を簡単にSVGで出力できる。 ■準備 Batik SVG Toolkitからライブラリをダウンロードしてクラスパスを設定する。 ■ソースコード 次のようなサンプルコードを書いてみる。 package test; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Shape; import java.awt.ev

    JavaでSVGを出力 - TM’s Working Memo
  • HTTPサーバにJava NIOは必要か

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

    HTTPサーバにJava NIOは必要か
    soh335
    soh335 2011/10/19
  • 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
  • Kyoto Tycoon に MessagePack-RPC をプラグインして Java から使う - Blog by Sadayuki Furuhashi

    Tokyo Cabinet を始めとする Tokyo シリーズの作者として知られる平林幹雄さんですが、Tokyo シリーズに続く新製品として、Kyoto シリーズがリリースされています。 Kyoto Tycoon(以下KT)は、ネットワーク経由で使えるデータベースサーバで、Tokyo Tyrantの後継製品に当たります*1。 KT は HTTP ベースのプロトコルで操作することができますが、別のプロトコルを追加することもできます。 実際に memcached プロトコルのプラグインが標準でバンドルされています。(memcachedプロトコルをKTにプラグインする) と言うわけで、KT を MessagePack-RPC で使えるようにするプラグインを書いてみました。github からダウンロードできます。 kt-msgpack kt-msgpack downloads MessagePac

    Kyoto Tycoon に MessagePack-RPC をプラグインして Java から使う - Blog by Sadayuki Furuhashi
  • Ant,Jenkins,Sonarの導入手順 - Software Development Memo

    入手先 : http://www.sonarsource.com/ $ unzip sonar-2.7.zip # mv sonar-2.7 /usr/local/ Sonar Ant Task 入手先 : http://docs.codehaus.org/display/SONAR/Analyse+with+ANT 上記ページからSonar Ant Taskをダウンロードします。 ダウンロードした「sonar-ant-task-1.0.jar」ファイルを「/usr/local/apache-ant-1.8.2/lib/」に移動します。 設定 Jenkins, Sonar, Tomcat, MySQLのインストール方法は、Maven,Jenkins,Sonarの導入手順#設定を参照ください。 その他 「ANT_HOME」の環境変数を設定します。 export ANT_HOME=/usr/l

  • Re: InputStreamからStringへの変換 - 永遠に未完成

    こんなんでいいのかな。 InputStreamからStringへの変換 - Humanity (該当部分を抜粋) static String convertInputStreamToString(InputStream is) { final int n = 1024; byte[] b = new byte[n]; StringBuffer buf; while (is.read(b, 0, n) != -1) { buf.append(new String(b)); } return buf.toString(); } 残念ながらダメダメです。 1024 バイト単位なので、マルチバイト文字の境界がここに来ると文字が壊れる マルチバイト文字が 1024 バイト目と 1025 バイト目に来ていた場合、見事に分断されて文字が壊れる。 最後の読み込み時に、末尾にゴミが残る 例えば入力が 102

    Re: InputStreamからStringへの変換 - 永遠に未完成
    soh335
    soh335 2011/06/21
  • 一歩先行くJavaプログラマが読むべきオープンソースソフトウェア10選 - 設計と実装の狭間で。

    10万行コード読んだらJava分かるよってTwitterに書いたらすげぇ勢いでRTされたので、調子に乗って捕捉エントリ書くよ。 Java Core API JDKインストールしたディレクトリに入ってるsrc.zipを展開すると入ってるから読むと良いよ。 すぐ近くにあるのから読むってのはメンタル的に楽でいい。 厳密にはOSSじゃなくて単に公開されてるってだけなんだけども、JavaプログラマなのにコアAPIのコード読んでないとか無いよね? どれから読めば良いか分からんかったら、 java.lang java.util java.io java.text 辺りをまずはキチンと理解すること。当然コードを読み終わったら、それを使ってコードを書く事。 OpenJDK http://hg.openjdk.java.net/jdk7/jdk7 OpenJDKを読むことで、プログラム言語してのJavaではな

    一歩先行くJavaプログラマが読むべきオープンソースソフトウェア10選 - 設計と実装の狭間で。
    soh335
    soh335 2011/06/10
  • JavaでXMLをフォーマットする - 印刷屋のdeveloper日記

    とある仕事で、XMLにインデントをつけてを整形する必要があった。 多分、書き出す時にでもオプションがあるんだろう・・とタカをくくっていたが、それは大間違いであった(笑) いろいろ調べてみて、一番手っ取り早い方法は、XSLTを使えと、そういう事らしい。 まずは、こんなXSLを作る。 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xalan="http://xml.apache.org/xslt"> <xsl:output method="xml" encoding="UTF-8" indent="yes" xalan:indent-amount="2"/> <xsl:template matc

    JavaでXMLをフォーマットする - 印刷屋のdeveloper日記
    soh335
    soh335 2011/04/21
  • Java総称型のワイルドカードを上手に使いこなすための勘所 - 達人プログラマーを目指して

    Java5以降では総称型(generics)がJava言語に導入されています。総称型自体は、最近の静的な型付けのプログラミング言語で珍しいことではなく、現在の最新版では.NETのC#やVisual Basicにも導入されています。一般的には総称型をサポートするクラスライブラリを自分で正しく定義することは非常にスキルがいるが、事前に定義されたクラスを使うだけであれば、それほど難しくないとされています。しかし、Java言語の総称型はエントリで説明するように特殊なところがあり、単に利用するだけでも他の言語に比べて遥かに難しいところがあるというのも事実です。特に総称型をパラメータ化する際に指定するワイルドカード型(List<? extends Serializable>など)の意味を正しく理解して使いこなすことは簡単なことではありません。その結果、昔のJDK1.4までのように型パラメーターのない

    Java総称型のワイルドカードを上手に使いこなすための勘所 - 達人プログラマーを目指して
  • Netty の基本 - hozumiの日記

    ここ数日、Nettyについて調べていたので理解できたことを書きます。 JBoss Netty Netty は Java で非同期、イベント駆動のネットワークアプリを作るためのフレームワークです。Netty を使うと早くて簡単にハイパフォーマンス、ハイスケールでメンテナンス性がいいものが作れます。いいとこ取りの全部乗せです。 なぜハイパフォーマンス、ハイスケールか? Netty は Java NIO(New I/O)をラップしていて、ノンブロッキングなIO操作ができます。そのため、1つのコネクションにずっと1スレッドを割り当てる必要がないため効率のよいリソース消費をします。従来のブロッキングなOIO(Old I/O)もサポートしており、僅かな変更で好きな方を使えます。また、NIOの複雑なByte BufferをChannelBufferというオブジェクトに抽象化し、不必要なコピーが発生しない

    Netty の基本 - hozumiの日記
  • Java使いをScalaに引き込むサンプル集 | mwSoft

    前書き Scalaという言語をご存知ですか? Javaと同じくコンパイルされるとclassファイルになり、実行時はJVM上で動作する、オブジェクト指向+関数型のプログラミング言語です。 Scalaを開発したのはJavaのgenericsの設計を手がけたり、javacの開発をしていた経歴も持つMartin Odersky氏。 Scalaは後発の言語ということもあって、Javaを書いている時に感じる冗長さに対する様々な解が用意されています。 記事では、ScalaJavaのコードを比較しながら、JavaユーザがScalaに移った際に得られるメリットを提示していきます。 尚、序盤のサンプルコードはJavaユーザに伝わりやすいように、returnを明記したり、メソッドは必ず{ }で囲むなど、極力Javaっぽい記述をしています。 だいたいJavaと同じような書き方ができます ScalaJava