タグ

ブックマーク / blog.kengo-toda.jp (7)

  • 非staticな内部クラスが持つ暗黙的な参照 - Kengo's blog

    Effective Java 第2版 (The Java Series)の項目22で言及されているように、原則として内部クラスはstaticにすることが推奨されます。主な理由は、staticでない内部クラスが暗黙的にエンクロージングクラス(トップレベルクラス)のインスタンスを参照するためです。 staticな内部クラスを持つクラスのヒープダンプ staticな内部クラスはエンクロージングクラスのインスタンスへの参照を持ちません。 class HiddenReferenceTest { private static class InnerClass {} } 非staticな内部クラスを持つクラスのヒープダンプ 一方、staticな内部クラスはエンクロージングクラスのインスタンスへの暗黙的な参照を持ちます。 class HiddenReferenceTest { private class

    非staticな内部クラスが持つ暗黙的な参照 - Kengo's blog
  • 7年働いた時点での私の仕事の極意 - Kengo's blog

    最重要 実行に重きを置く やらないで後悔するよりも、やって反省する。 反省は成長を産み生産的だが、後悔は精神の無駄な消費。 時間は有限で貴重な資源だが、たぶん今の段階では行動する前に得るものや結果を予測するのは難しい。 正しい反省の方法とは何か、考え続けること。 「正しく反省するために、何を記録しておくべきか」実行前に明らかにしておくこと。 反省の結果は組織的な何かに落としこむ。組織構造、戦略、静的解析、自動テスト、教育など。意識しないでも巨人の肩に乗れる状況を作ることが、組織の成長につながる。 Done is Better Than Perfect ただし、思考停止の言い訳にしないこと。詰めの甘さを擁護する言葉ではない。詰めの甘さは立場や考え方が違うひと3人くらいに意見を求めればだいたい炙り出せる。 長期的視野を持ちつつ、それに引っ張られない。進展を作ること、現状を少しずつ変えることを意

    7年働いた時点での私の仕事の極意 - Kengo's blog
    masudaK
    masudaK 2015/03/23
    ここまで言語化できるってほんとすごいな。がんばろう。
  • とりあえず知っておきたいMapの鉄則と周辺知識 - Kengo's blog

    わりと多種類で使い方に迷うJavaの連想配列(Map)について、各実装の紹介と周辺知識をまとめました。Javaに触れる際の参考になれば。 鉄則その1「とりあえずHashMapMapインタフェースの実装はたくさんありますが、まずはHashMapから使うことを勧めます。HashMapはハッシュテーブルというシンプルなアルゴリズムにもとづく実装であり、理論上はデータ量に関係なく一定の時間で挿入・参照・削除を行えることになっています*1。ヒープの消費が特にひどいということもありません。 鉄則その2「hashCode,equals,compareToを正しく実装」 キーとして使用するインスタンスはhashCodeメソッドやequalsメソッドを正しく実装しなければならないことに注意してください。正しく実装されないと「データ量に関わらず少ない時間で操作できる」という優位性を損なったり、そもそも期待

    とりあえず知っておきたいMapの鉄則と周辺知識 - Kengo's blog
  • Javaプログラマが読むべき7個のAPI実装 - Kengo's blog

    10周くらい遅れている感がありますが気にせず紹介します。なお実装はJDKによって異なる可能性があるので、お手元のJDKに付属しているコードをご覧になることをおすすめします。 java.util.concurrent.atomic.AtomicInteger ロックフリーでスレッドセーフな実装を実現ことで有名なjava.util.concurrent.atomicパッケージの代表格。そんなすごいことをどう実装しているのか?というのは誰もが1度は気になるはず。openjdk7のコードを読むとこんな感じです。 public final int incrementAndGet() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next)) return next; } } C

    Javaプログラマが読むべき7個のAPI実装 - Kengo's blog
    masudaK
    masudaK 2014/06/10
  • newするとJVM内で何が起こるのかという話(前編) - Kengo's blog

    私的まとめ。2段階に分かれており、今回はその初回。 JVM内の挙動を知るにはJVMに渡されるバイトコードを知ることからと考え、これについてまとめる。 バイトコードの確認 例えば public class Test { public static void main(String[] args) { Test test = new Test(); } } を $ javap -c Test すると、mainメソッドのバイトコードが public static void main(java.lang.String[]); Code: 0: new #1; //class Test 3: dup 4: invokespecial #16; //Method "":()V 7: astore_1 8: return になっていることがわかる。コンストラクタ呼び出しがnew,dup,invokesp

    newするとJVM内で何が起こるのかという話(前編) - Kengo's blog
    masudaK
    masudaK 2014/06/10
  • JVM用アセンブラJasminを触る - Kengo's blog

    自分はJVMの仕様について比較的知っている方らしいということに最近気づき、バイトコードについて人に説明するためのツールとしてJVM用アセンブラJasminの利用を検討。 バイトコードの理解があれば困らずに利用できるツールだと思うが、説明に使うには若干不足かも。CASL2シミュレータのようにスタックを見ながらバイトコードをステップ実行できることを期待していたのだが……。Javaプログラムとバイトコードの関連が見えるjadやjdの方がまだ役に立つかもしれない。 Hello, world! .class public Hello .super java/lang/Object .method public ()V aload_0 invokespecial java/lang/Object/()V return .end method .method public static main([Lj

    JVM用アセンブラJasminを触る - Kengo's blog
  • Guavaをざっくり紹介 - ellerの日記

    Guava librariesをご存知でしょうか?Googleが開発・使用しているコアライブラリです。OSSであり簡単に入手できます。 http://code.google.com/p/guava-libraries/ このライブラリは結構多機能で、海外の著名プロダクトでもよく見かけるのですが、日のネットでの知名度はいまいち高くない気がします。もともとの名前(Google Collections)はそこそこ知名度があったと思うのですが、この差はなぜでしょうか?私の観測範囲が狭いだけかもしれませんけども……。 自分が使ってみて思った「へーこんなことができるんだー」をまとめてみますので、共感するところがあればぜひ検証してみてはいかがでしょうか。 何が嬉しいの? Guavaはできることを増やすライブラリではなく、普段やっていることを短く書くためのライブラリです。Apache commonsなど

    Guavaをざっくり紹介 - ellerの日記
  • 1