タグ

ブックマーク / blog.j5ik2o.me (10)

  • クラスローダについて - かとじゅんの技術日誌

    Javaでは欠かせないクラスをロードするためのクラスローダ。普段意識していないかもしれませんが、しっかりと縁の下で支えているよね。(Java言語仕様を確認しながら書いてないので間違っていたらツッコミよろしくです) クラスローダとは Javaクラスローダー(英: Java Classloader)とは、Java仮想マシンの一部で、JavaクラスをJava仮想マシンに動的にロードする役割を持つ [1]。通常、クラスは必要になったとき初めてロードされる。Javaの実行系は、クラスローダーがあるおかげでファイルやファイルシステムについて知る必要がない。 大きく分けて以下の3つの種類があります。 ブートストラップ クラスローダ エクステンション クラスローダ システム クラスローダ ブートストラップは、Javaのコアライブラリ($JAVA_HOME/lib/rt.jar)のライブラリ、パッケージがj

    クラスローダについて - かとじゅんの技術日誌
  • Scalaの統一アクセス(プロパティ構文)がなかなかイカしてる件 - かとじゅんの技術日誌

    今回は統一アクセス(プロパティ構文)がなかなかイカしてる件について。C#とかRuby,Pythonやってる人からすると何を今頃という感じなのですが。 Scalaで統一アクセス(プロパティ構文)を使う Scalaでフィールドを宣言する場合は以下のような書き方になります。 class Employee(name_ : String) { var name = name_ } クライアント側のコードは以下。 val e = new Employee("Kato") e.name = "Kato" println(e.name) // Kato 追記: 上記のようなコードは以下と同じ意味なので、こちらのほうが短くてわかりやすいので適切。 class Employee(var name : String) Employeeのnameはpublicなフィールドですね。*1 nameフィールドには大文字

    Scalaの統一アクセス(プロパティ構文)がなかなかイカしてる件 - かとじゅんの技術日誌
  • ScalaのクラスをJavaの視点で解剖する - かとじゅんの技術日誌

    Scalaのクラスをちょっと解剖して、なぜそうなっているか読み取ってみようと思います。 ScalaのクラスをJavaのクラスに変換してみる まず、こんなScalaのクラスを作ってみた。コンストラクタに氏と名のフィールドを二つ取る単純な人名クラスです。 class PersonName以降のカッコのところは、コンストラクタの引数を表しています。また、その引数そのものがフィールド定義となります。 package test class PersonName(val firstName:String, val lastName:String) これをscalacでクラスファイルにした後、jadでデコンパイルしてJavaのソースファイルにしてみました。以下のJavaコードで読みとくと簡単に理解できると思います。*1 package test; import scala.ScalaObject; pu

    ScalaのクラスをJavaの視点で解剖する - かとじゅんの技術日誌
  • マルチコア時代に備えて本気でメモリモデルを理解しておこう - メモリバリア編 - - じゅんいち☆かとうの技術日誌

    このエントリを読む前提条件として、マルチコア時代に備えて気でメモリモデルを理解しておこう - リオーダー & finalフィールド 編 - - じゅんいち☆かとうの技術日誌を読んで、リオーダーとは何かを理解していることとします。 前回のおさらいをすると、 プログラムの実行順序は、リオーダーが許可される場合と禁止される場合がある。並行処理ではリオーダーを想定しなければ、処理結果の整合性が確保できない。(特にマルチプロセッサ環境) リオーダーを禁止して、可視性を保証する。(finalフィールドはコンストラクト時に完全に初期化され、コンストラクト後はスレッドから見えるようになる) でした。 リオーダーについて理解できたら、今度はメモリバリア命令でスレッド毎に扱うメモリと、大域のメインメモリとのメモリI/Oについて見ていきたいと思います。メモリバリアが理解できれば、以下のソース*1のスレッドがな

    マルチコア時代に備えて本気でメモリモデルを理解しておこう - メモリバリア編 - - じゅんいち☆かとうの技術日誌
    Itisango
    Itisango 2011/02/28
    マルチコア時代に備えて本気でメモリモデルを理解しておこう - メモリバリア編 -
  • マルチコア時代に備えて本気でメモリモデルを理解しておこう - リオーダー & finalフィールド 編 - - かとじゅんの技術日誌

    長い文章になってしまったので、概要だけ先に書きます。 以下のJavaプログラムは、常に上から下に順番に命令が実行されると思いますか?つまり、aに1が格納された後に、bに2が格納されると思いますか? 実は場合によってはこの実行順序が入れ替わる場合があります。これはJavaの言語仕様として定義されていることです。これを考慮しないと信頼性のある並行処理は実装できません。 気になる人は以下を読んでみてください。 a = 1; b = 2; すでにインターネットは社会インフラ化しています。ソーシャルネットワークで多くの人とコミュケーションやコラボレーションできる時代で、個人が情報を作り消費することは当たり前になってきています。そして、インターネット上のコンテンツは増加の一途を辿っています。「情報爆発」なんて言葉も耳慣れた言葉になりましたが、その問題解決のためにMapReduceなどの分散処理技術に注

    マルチコア時代に備えて本気でメモリモデルを理解しておこう - リオーダー & finalフィールド 編 - - かとじゅんの技術日誌
  • 小数点の計算をやるからといってすぐにfloatやdoubleを使ってはいけない - かとじゅんの技術日誌

    おつかれさまです。 型を選ぶというのはプログラミングの基礎中の基礎ですが、以外に開発の現場でも注意が必要なのが、floatとdoubleの精度の問題があります。これぐらい当然と思っていたのですが、最近よく耳にしますので、あえて言及w これらの型の目的が科学技術計算のための用途。多少誤差が生じても高速に演算をすることを目的としています。グラフィックなどの描画系とかですかね。 このように、float型やdouble型は誤差を含む可能性があるため、科学・工学計算で多少の誤差は許容できる場合はよいのですが、金融・会計分野のように正確な値が要求される計算には向きません。 どうしても正確な値が欲しい場合は、BigDecimalクラスを使用することになります。基データ型のdoubleやfloatと比較すると不便かつ低速ですが、精度が保証されており、丸め方も指定できます。 ここで言及されているように、お

    小数点の計算をやるからといってすぐにfloatやdoubleを使ってはいけない - かとじゅんの技術日誌
  • Stringの連結はそう簡単なものではない - かとじゅんの技術日誌

    追記: 指摘の通りで、現実的な連結回数での計測でもないですし、統計手法を用いた分析をしていないので、このエントリの計測値は当てにしないでください。なので以下のブログを参考にしてください。 currentTimeMillis()で計測しておいて plusTime:14780, concatTime:7053, sbuilderTime:7, sbufferTime:13 とか、その7とか13の有効数字はいくつだっての。 激しく今更感があるタイトルですが(;・∀・) 昔に取り上げたのですが、 文字列の結合をやるからといって、すぐにStringの+をつかってはいけない - じゅんいち☆かとうの技術日誌 Stringの+演算子は間違った使い方するとパフォーマンスが低下しますよっていう話題。若干ネタ成分ありますが、ご容赦ください。 これ系の話題は自分的にはオワコンなんですが、最近、また話題を見つけた

    Stringの連結はそう簡単なものではない - かとじゅんの技術日誌
  • 副作用を最小限に抑えるために必要なこと - かとじゅんの技術日誌

    若干、難しい話ですが、設計力を上げたいプログラマ向けなエントリ。私も道半ばです。一緒に考えていただければ幸いです。 堅牢なアプリケーションを実現する上で「副作用を最小限に抑える」という設計思想は、非常に重要な示唆を含んでいます。 その「副作用」とは、そもそもどんな定義なのでしょうか。 DDDでは"side effect"と定義していて、以下のように解説されています。 Domain-Driven Design: Tackling Complexity in the Heart of Software: Evans, Eric: 8601300201665: Amazon.com: Books エリック・エヴァンスのドメイン駆動設計 作者:Eric Evans翔泳社Amazon P250より引用 In standard English, the term side effect implies

    副作用を最小限に抑えるために必要なこと - かとじゅんの技術日誌
  • Javaでnullを回避するために似非Option型を作ってみる - かとじゅんの技術日誌

    ScalaにはOption型というプログラムの世界観を変えるような魅力的な型があり、それでnullを回避することができる。*1 詳しくはこちらを参照。 ScalaのOptionステキさについてアツく語ってみる - ゆろよろ日記 Javaでも、ScalaのOption型と似て非なるOption型を作れないかなーと思い、思いつきと勢いでコード書いてみました。まぁ、同じものは作れっこないので、遊びです。気にしないでくださいw 以下のような感じ、Optionのインターフェイスを作って、実装クラスにSomeとNoneを定義。それぞれにofというファクトリメソッドがあります。 public interface Option<T> { // オプションから値を取得する。 public T get(); // オプションから値を取得するが、値がない場合はdefaultValueを返す。 public T

    Javaでnullを回避するために似非Option型を作ってみる - かとじゅんの技術日誌
  • nullという値は本当に必要か考えよう - かとじゅんの技術日誌

    今回は、nullの扱いは気をつけようねというお話。特にこれからの人に読んでもらいたい。 nullは変数を初期化する時などに、当たり前のように登場します。Javaではnullがないなんて考えられないわけです。(C#でも同様) しかし、nullの考案者のTony Hoareは「10億ドル単位の過ち」と発言しています。 null参照の考案は10億ドル単位の過ち?(スラッシュドット・ジャパン) - エキサイトニュース nullには、それだけの魔性があって使い方を考える必要があります。nullは”値が存在しない”という状態を表現する時に使われることが多いのですが、そのnullに対する注意が十分に払えずにトラブってしまうことが多いのです。Scalaではその"値が存在しない"という状態をOption型のNoneで表現することでnullを回避する手段が提供されています。JavaではScalaのようにはでき

    nullという値は本当に必要か考えよう - かとじゅんの技術日誌
  • 1