タグ

javaに関するtakaesuのブックマーク (41)

  • JVMチューニング: G1GCの使いどころとCMS GCからのマイグレート

    Java7 Update4 (java7u4) で正式サポートされたG1GC(ガベージ・ファーストGC)ですが、Java9ではデフォルトGCになることが確定しています。 参考: JEP248 またG1GCは、CMS GCを長期的に置き換えるものとして計画されています。 そこで、どのようなアルゴリズムなのか知っておいたほうが良さそうなので調査しました。 G1GCが向いているケース G1GCが向いているのは下記の環境です。 ヒープサイズが大きな環境(6GB以上) 一時停止可能時間がシビア(0.5sec未満) Oracleの 9 ガベージファースト・ガベージ・コレクタによると、CMS GCもしくはParallel GCを使っていて次のいずれかに該当したらG1GCへの切り替えを検討しましょうとのことです。 Javaヒープの50%超がライブ・データ(≒必要なデータ)で占められている。 オブジェクトの

  • 16年間うごいているWebアプリケーションが抱えていた技術的負い目を考察する | GMOメディア エンジニアブログ

    技術推進室の浅井です。 技術的負い目とは、世に言う技術的負債のことです。 社内で技術的負債の定義、ことばの表現を考える中で、「『負債』は優れた比喩表現であるものの、第三者への返済義務がない点で会計上の負債とは異なり、言葉としての問題も多く、不必要な議論を生み出しやすい」などの指摘があり、代わりの表現として社内の一部で使われている言い回しです。 最近社内のたいへん古いシステム(16年の歴史があります)の技術推進を行う機会があり、たくさんの技術的負い目と向き合いました。 そのような古いシステムの技術的負い目と向き合ったとき、エンジニアはストレスを感じ、ネガティブな感情を抱いてしまいがちです。負い目に苦しめられることで過去のコードや技術的判断に対して不満を言いたくなる気持ちはとてもよくわかりますし、実際に私もたくさん苦しんでたくさん不満を言いました。 ですが技術的負債の文脈でよく言われるとおり、

    16年間うごいているWebアプリケーションが抱えていた技術的負い目を考察する | GMOメディア エンジニアブログ
  • Ruby の private と protected 。歴史と使い分け - Qiita

    概要 Ruby の private と protected の歴史と使い分けについて説明します。 いろんなところで断片的に書かれていることなのですが、有益な情報を 一箇所に集めると自分の理解が深まりそう=>他の人にも役立つかな? と思ったのでまとめてみました。 具体的には、伊藤淳一さんのブログ・るりま・Rubyメーリングリストの内容を 一箇所にまとめた上で、私が書いたサンプルコードを少し足した内容になっています。 ちなみに Java や C# 畑の人が Ruby の private / protected を使って驚いた、 的な情報が多いですが、私も例にもれず Java => Ruby 勢で驚いたパターンです。 Java の private と protected public => どこからでもアクセス可能 protected => クラス内、同一パッケージ、サブクラスからアクセス可 p

    Ruby の private と protected 。歴史と使い分け - Qiita
  • Java のジェネリックス - Java 入門

    ジェネリックス (Generics) というのは汎用的なクラスやメソッドを特定の型に対応づける機能のことで、Java SE5.0 から導入されました。 例えば「べ物コンテナ」という汎用的なコンテナを作ったときに、それを「ラーメンコンテナ」「カレーコンテナ」という風に特定の型にきちっと決めるものです。 それがなぜいいのか?どうやって作るのか?どうやって使うのか?ということをみていきたいと思います。 なぜ Java でジェネリックスが必要なのか? なぜジェネリックスなのか? ジェネリックスの登場 Java のジェネリックスの命名規則 Java のジェネリックスでのサブタイプ Java のジェネリックスの Bounded 型 Java のジェネリックスのワイルドカード ジェネリックスのワイルドカード型とは Upper Bound ワイルドカード型 Lower Bound ワイルドカード型 Bo

    Java のジェネリックス - Java 入門
  • Javaジェネリクス再入門 - プログラマーの脳みそ

    ジェネリクスでは、「型」を変数にした「型変数」というものを取り扱う。型変数で何が嬉しいかというと、メジャーな例ではコレクションAPIが挙げられる。java.util.Listとかjava.util.Mapとかのデータを格納するタイプのユーティリティクラスのことだ。 2004年にJavaのバージョンが5.0となるまでは、Javaにはジェネリクスの機能はなかった。なので、Listにデータを格納し、取得する場合は List list = new ArrayList(); list.add("hello!"); String str = (String) list.get(0); といったソースコードになる。 add()の引数はObject型で宣言されており、どんな参照型でもadd()することができた。 get()の戻り値もObject型で宣言されておりキャストが必要だった。このキャストはプログラ

    Javaジェネリクス再入門 - プログラマーの脳みそ
  • ラムダ禁止について本気出して考えてみた - 9つのパターンで見るStream API - Taste of Tech Topics

    こんにちは @cero_t です。 今日のテーマは・・・ラピュタ禁止令! バルス! いや違う。ラムダ禁止令、です。 さて、なかなかの滑り出しですが、今日はただのラムダの紹介ではなく、禁止令に主眼を置いて語ります。 このエントリーは、Java Advent Calendar 2013の12/16分の投稿です。 http://www.adventar.org/calendars/145 前日は @sugarlife さんの JDK 8 新機能ダイジェスト (JDK 8 Features) です。 翌日は @setoazusa さんです。 ラムダ禁止令はあり得るのか? 勉強会やその懇親会などで、たびたび「ラムダ禁止令が出るのではないか」が話題に上ることがあります。 「そりゃ禁止する組織もあるでしょうね」というのがお決まりの答えなのですが、ただそれに従うだけでは面白くありませんし、要素技術の発展も

    ラムダ禁止について本気出して考えてみた - 9つのパターンで見るStream API - Taste of Tech Topics
  • Javaのリフレクションを使ってクラスオブジェクトを生成したり、メソッドを呼び出すためのサンプル - 感謝のプログラミング

    ※追記 追加記事を書きました。 はてブでコメントをいただいたので、さっそくSpring Frameworkでリフレクションを使ってる部分を読んでみた。 ※追記ここまで リフレクションとは、実行中に型情報を取得でき、方そのものを操作対象にできる仕組みのことである。 コア・リフレクション機構であるjava.lang.reflectはロードされたクラスに関する情報へのプログラムによるアクセスを提供する。 Constructorインスタンス、Methodインスタンス、Fieldインスタンスにより、それらの実際の対象物を反射的(reflectively)に操作することができる。 定義だけ見てもよくわからんので、リフレクションを使ってインスタンスにアクセスしてみる。 package kiso; public class ReflectionSample { public static void mai

    Javaのリフレクションを使ってクラスオブジェクトを生成したり、メソッドを呼び出すためのサンプル - 感謝のプログラミング
  • ユニットテスト改善ガイド | DevelopersIO

    先日、日Javaユーザグループ(JJUG)主催のJJUG CCC 2013 Fallで、「ユニットテスト改善ガイド」というタイトルで登壇してきました。自分の経験を元に、ユニットテストをチームや組織へ導入する時に起こりえる問題とその解決のヒントに関するセッションです。エントリーではそのセッションの内容を再構成して公開します。 はじめに 近年のシステム開発では、ユニットテストや継続的インテグレーション(以下、CI)の導入は必要不可欠と考えられています。とはいえ、どんな組織(チーム)でも簡単に導入できているわけではありません。特に、大きな組織や古くからの慣習を残している組織では導入したくとも中々進まないと感じているところが多いのではないでしょうか?。 私は、これまでに多くの開発現場でユニットテストやCIの導入について推進してきました。成功したケースもあれば失敗したケースもあります。そして、失

    ユニットテスト改善ガイド | DevelopersIO
    takaesu
    takaesu 2013/11/13
    テストの改善
  • Android アプリ開発勉強会のために書いた Java の入門文書

    java-for-android-app.markdown Android アプリ開発のための Java 入門 MEMO declaration は 「宣言」 と訳しているが、「定義」 の方が適しているような気がしなくもない。 「インスタンス」 と 「オブジェクト」 という言葉を使うことがあるが、文書中ではどちらも同じ意味で使用している。 「String オブジェクト」 という表現は、「String クラスのインスタンス」 を意味している。 (Java に限らず一般的な表現だと思う。) はじめに この文書は Android アプリ開発をしようと思うプログラマのための Java の入門文書である。 まともに Android アプリを書くために最低限必要だと思われる知識をひととおり記述している。 また、C の流れをくむ文法であるため、C やその類似言語を知っている場合には既知であろうと考えら

    Android アプリ開発勉強会のために書いた Java の入門文書
  • JavaプロジェクトでGroovyを導入すべき5つの理由 - うさぎ組

    前段 TDDBootCamp in Tokyo 1.5にJavaグループの一員として参加させていただきました。 そこでGroovyをやりたいというホットなエンジニアと出会いまして、GroovyでTDDをさせていただきました。 いきなりGroovyでプロダクトを書く事はなかなかないと思っているので、Javaのプロダクトコードに対して、Groovyのテストコードを書く。という方法で演習しました。 そこで、皆様がGroovyへ多少なりとも注目してくださいましたので、このエントリーを書いてみようと思いました。 JavaプロジェクトでGroovyテストコードを導入すべき5つの理由 以下であげる5つのポイントは「Groovyを知らないJavaプログラマーがすぐに始められるGroovyの強力な機能」をとりあげました。 もちろんここにあげた以外にもたくさんのGroovyの強力な機能はありますが、それらの威

    JavaプロジェクトでGroovyを導入すべき5つの理由 - うさぎ組
  • 遅延評価いうなキャンペーンとかどうか - ぐるぐる~

    遅延評価については以前も書いてるんですが、そのときは結論なしでした。 が、ちょっと考えるところがあって、言語を Java に絞って自分の考えを明確にしておきます。 結論から書きましょう。 「Java(とC#) で遅延評価って書いてあるものは遅延評価ではない」です。 Java における「評価」とは まず一番最初に、Java で「評価」って言うと、どういうことを指すのかを確認しておきます。 言語仕様の該当部分を要約すると、こんな感じでしょうか。 プログラム中の式を評価すると、結果は 変数 値 無し のうちのどれかとなる。 評価した結果が値になる、というのはいいでしょう。それ以外の 2 つを軽く説明します。 評価の結果が「変数」とは? コメント欄で指摘が入っています。 代入の結果は変数ではありません(15.26)。 結果が変数となるのは、ローカル変数、現在のオブジェクトやクラスの変数、フィールド

  • 改訂版:Eclipseではじめるプログラミング

    これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、連載「Eclipseではじめるプログラミング」の改訂版となります Eclipse 3.4で超簡単Javaプログラミング基礎入門 【改訂版】Eclipseではじめるプログラミング(1) これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のための超簡単Javaプログラミング入門です

  • zerosum/VendingMachine_TDDBC_20130113 · GitHub

  • GitHub - shuji/tddbc-vending-machine-20130113

  • MacでOracle JDK 7を使う - Qiita

    jdk-7u4からMac版もパッケージが配布されるようになったので、その設定方法。 ダウンロード こちらからMac用のjdk-7u4-macosx-x64.dmgをダウンロードしてくる。 http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html インストール パッケージを展開するとJDK 7 Update 04.pkgが入っているのでインストールする。 インストールが完了すると、/Library/Java/JavaVirtualMachines/1.7.0.jdkが出来上がる。 設定 その後、「アプリケーション > ユーティリティ」の下にあるJava Preferencesを実行して、Java SE 7の順番を一番上に持っていく。 Eclipseの設定 Eclipse上でイン

    MacでOracle JDK 7を使う - Qiita
    takaesu
    takaesu 2013/01/12
    JRE_HOME=/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home
  • andr0o0id.com

    This domain may be for sale!

  • 調査の難しい「OutOfMemoryError」事例、5選

    メモリ不足の問題の切り分け方の基 まずは、メモリ不足がJavaヒープとCヒープのどちらで発生したかを切り分けておこう。 Javaヒープ OutOfMemoryErrorがスローされ、JavaVMの実行が継続している場合には、Javaヒープが不足している可能性が高い。Javaヒープ不足かどうかを確定させるために、スローされたOutOfMemoryErrorのトレースを確認しよう。 java.lang.OutOfMemoryError: Java heap space <=======【*1】 at java.nio.CharBuffer.wrap(CharBuffer.java:350) <=======【*2】 at java.nio.CharBuffer.wrap(CharBuffer.java:373) at java.lang.StringCoding$StringDecoder.

    調査の難しい「OutOfMemoryError」事例、5選
    takaesu
    takaesu 2012/12/23
    Cヒープがクラッシュしてしまう場合
  • Part4 仮想マシンの仕組みを理解する

    Part1「今さら聞けないOSの疑問」,Part2「これがWindows Vistaだ!」,Part3 「Windows XP Tips 25 」に続いてPart4は,Javaなどで用いられている『仮想マシン』を解説します。 Java技術が誕生したのは1995年。誕生してからすでに10年以上の歳月が流れました。登場当初はばく大なメモリーを消費するとか,とにかく遅いという理由で敬遠されがちでしたが,現在ではWebアプリケーションを中心に幅広く普及しています。遅いという欠点も徐々に克服していき,今では性能が重視されるバッチや組み込み系のアプリケーション,変わったところでは火星探査車両の制御にも利用されるようになりました。 ここまでJavaが普及した大きな要因の一つに,一度作成したプログラムが多様なOSの上で動作するという点が挙げられます。この特徴を表す標語として「Write once, run

    Part4 仮想マシンの仕組みを理解する
    takaesu
    takaesu 2012/12/20
    仮想マシン
  • 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のブログ
    takaesu
    takaesu 2012/12/20
    Javaのメモリ管理
  • はじめてのDependency Injection - _development,

    Android Advent Calendar 2012 に参加しています。 エントリはDependency InjectionによるAndroidアプリケーションの実装とテストの一方法について述べています。 文中に出てくるコードは全てgithubから取得できます。 Dependency Injectionとは簡単にいうと、あるオブジェクトが依存しているオブジェクト(以下、Dependency)を別の誰かが注入(以下、Injection)してあげることでオブジェクトの関係を疎結合にする方法です。 Dependencyを誰かがInjectionしてくれると、なにがいいのか? まず、逆に誰もInjectionしてくれない場合を考えてみます。 Dependency Injection 前 誰もInjectionしてくれない場合は自分でDependencyを設定するしかありません。 たとえば、天

    はじめてのDependency Injection - _development,