タグ

GCに関するraimon49のブックマーク (110)

  • 言語のGC機能と参照カウント (前編) - moriyoshiの日記

    たまにはちゃんと書いたほうがいいかなと思って書いてみる。 あらまし 原始的な参照カウントベースのガーベジコレクションは、循環参照が発生すると、その参照に含まれるオブジェクトを回収できないという厄介な問題を抱えている。循環参照とは、1つ以上のオブジェクトが環状の参照関係を形成している状態のことで、このような参照を持つオブジェクトは、やがてルート (ある時点で言語ランタイムが管理しているすべてのスコープと考えてもいい) から辿りつけなくなって、解放されずにリークしてしまう。 この問題はいろんな LL 言語に見られる。 Perl の場合 use Devel::Peek qw(Dump); sub make_circular { my $foo = {}; my $bar = {}; my $baz = {}; $foo->{'bar'} = $bar; $bar->{'baz'} = $baz;

    言語のGC機能と参照カウント (前編) - moriyoshiの日記
    raimon49
    raimon49 2012/04/05
    循環参照 参照カウント or mark and sweep
  • C++ のヘッダファイルを #include するだけで使える GC 書いてみた - kazuhoのメモ置き場

    そういえば C++ のヘッダファイルを #include するだけで使える GC を書きました。使い方は下のサンプルコードを見てもらえばいいとして、特徴としては、 ヘッダファイルを #include するだけで使える C++ の標準機能だけを使っているのでポータブル*1 mark-and-sweep, precise GC ってなあたりでしょうか。コードは GitHub - kazuho/picogc: a tiny, portable, precise, mark-and-sweep GC in C++ にあります。 C++プロジェクトで、ちょっとここだけは GC がほしいんだけど、ってなケースで使いやすいと思います。速度も、そこそこでるんじゃないかな*2。 というわけで、以下、サンプルコード。軽く説明しておくと、 GC を使うクラスは picogc::gc_object を継承する

    C++ のヘッダファイルを #include するだけで使える GC 書いてみた - kazuhoのメモ置き場
    raimon49
    raimon49 2012/03/27
    ポータブル
  • How Emacs changed my life

    1. The document describes how the author's experience with Emacs as a student taught him about software freedom and how to read and modify source code. This led him to create his own Emacs-based tools and influenced the design of Ruby. 2. Emacs taught the author the power of Lisp and how to implement a programming language and garbage collection. Using Emacs to write code, documents and email made

    How Emacs changed my life
    raimon49
    raimon49 2012/03/27
    EmacsがいかにMatzを助け、変えたか。
  • 大規模UIをJavaScriptで実現するためのテクニック、サイボウズkintone開発の現場から。デブサミ2012

    大規模UIJavaScriptで実現するためのテクニック、サイボウズkintone開発の現場から。デブサミ2012 7万行規模のJavaScriptプログラムで構築されたユーザーインターフェイス。そのプログラミングで使われたテクニックとはどういうものか。 2月16日、17日の2日間、都内で開催されたイベント「デベロッパーズサミット2012」(デブサミ2012)で、サイボウズ株式会社 開発部 若原祥正氏、生駒浩隆氏が講演「kintoneの表と裏~大規模JavaScript開発と非構造データベース」を行いました。 講演では前半に大規模JavaScriptのテクニック、後半でスキーマレスデータベース構築の仕組みが解説されましたが、この記事では資料が公開された前半のJavaScriptのテクニックについて、ダイジェストで紹介します。 7万行のコード、フレームワークはClosure Library

    大規模UIをJavaScriptで実現するためのテクニック、サイボウズkintone開発の現場から。デブサミ2012
    raimon49
    raimon49 2012/02/21
    こんな大規模開発でClosure CompilerのAdvancedオプション設定してるのは凄いな。
  • parallel と concurrent、並列と並行の違い - 本当は怖いHPC

    2017/01/10 誤字脱字を修正しました 2016/11/07 内容を修正しました 2010/09/17 文章を修正しました 一般的に、parallelは並列、concurrentは並行と訳されます。検索してもずばり書かれた物がなかったので、僕なりの理解を書いてみます。 (注:言葉の定義の問題なので、複数の流儀があり得ます。端的に言えば、いわゆるCPUSIMD命令を「並行」と見なすかどうかに違いが現れます) 参考リンク: http://d.hatena.ne.jp/NyaRuRu/20060129/p2 http://d.hatena.ne.jp/muimy/20070322/1174526368 一番妥当(だと思う)定義 一言で言えば、 Concurrent(並行)は「複数の動作が、論理的に、順不同もしくは同時に起こりうる」こと Parallel(並列)は、「複数の動作が、物理的に

    parallel と concurrent、並列と並行の違い - 本当は怖いHPC
    raimon49
    raimon49 2011/11/06
    Concurrent GCは互い違いに実行、Parallel GCは、処理を「真に並列に」実行。
  • 円環の理(Garbage Collection) - 闇RubyKaigi - I am Cruby!

    yamirubykaigi闇葬られたスライドを公開しておこう。 円環の理(Garbage Collection) View more presentations from authorNari leakyは以下のURLからダウンロードできる。 authorNari/ruby at leaky - GitHub ※ただし、minirubyまでしか作れないので注意だ。 みなさんお馴染みのhell world.rbを書こう p a = "welcome! hell world!" a.free ようこそHell worldへ。 finalizeもすぐ実行 a = 'a' proc = Proc.new{ p (a = 'do_finalize'); a.free } ObjectSpace.define_finalizer(a, aProc=proc) a.free # => 'do_final

    raimon49
    raimon49 2011/07/19
    GCレスのRuby なんじゃこりゃww
  • たくさんタブを開く人にとってFirefox 5は福音となったか - 射撃しつつ前転 改

    3ヶ月ほど前に、たくさんタブを開く人にとってFirefox 5は福音となる…かも という記事を書いた。 6/21にFirefox 5がリリースされ、実際にFirefox 5が使えるようになった。確かに、Firefox 5になってから、CPU使用率は下がったようだ。タブを100個以上開いた場合でも、CPU使用率は5%程度にまで下がっている。そういう意味では恩恵は大きい。 ここで話が終わればいいのだが、今度は数秒に1度のCPU使用率のスパイクが気になるようになってきた。環境によってスパイクぶりは違ってくるのだが、会社のFirefoxだと、CPU使用率が80%程度にまで一瞬だけ上がる。しかも、そのたびにブラウザが固まる。最近は会社だと暑くて数秒に1回ファンがうるさく回るので、Firefoxを使えなくなってしまった。 数秒に一度のCPU使用率の上昇というと、まず疑うべきはGCだろう。「firefo

    たくさんタブを開く人にとってFirefox 5は福音となったか - 射撃しつつ前転 改
    raimon49
    raimon49 2011/07/10
    >Firefoxは、JSオブジェクトのGCにはmark & sweepを、DOMオブジェクトのGCにはreference countを採用しており、reference countでは循環参照を回収できないので、cycle collectorで循環参照しているgarbageを回収するようだ。
  • Firefox 7メモリ利用を大幅改善 - Firefox 6はGC高速化 | エンタープライズ | マイコミジャーナル

    Firefox web browser - Faster, more secure & customizable Firefoxユーザの最大の関心ごとのひとつが、Firefoxの消費するメモリ量の多さにある。メモリの消費という面で言えば、マルチプロセスアーキテクチャを採用しているChromeの方が消費量が多いと言われているが、Chromeではタブがプロセスに対応しているため、タブを閉じる(つまりプロセスを終了する)と、そのタブに関連して確保されていたメモリがちゃんと開放される。このため長時間使い続けても問題視されることが少ない。これに対してFirefoxが消費するメモリ量は使い続けるごとに増え、そしてタブを閉じても減らないことが多い。長時間Firefoxを使い続けると重くなると言われる原因はこれだ。しかし、この状況はFirefox 7から大きく好転することになりそうだ。 どのような改善が実

    raimon49
    raimon49 2011/07/08
    Fx 7は9月末か
  • SoftReference と WeakReference と PhantomReference - kagamihogeの日記

    最近加わったように見せて実はすごい昔から存在している java.lang.ref.Reference とその実装クラスである PhantomReference, SoftReference, WeakReference の 3 つ。今日はこいつらの動作について軽く見ていく。 ただその前に。java6 の幾つからかはシランけど jvisualvm なる jvm の挙動を GUI で見れるツールが提供されている。 とりあえず、下記の何の意味も無いコードを走らせたときの jvisualvm の挙動はこんな感じ。 long c = 0; List<BigDecimal> list = new ArrayList<BigDecimal>(); while (true) { Random r = new Random(); long l = r.nextLong(); list.add(new Big

    SoftReference と WeakReference と PhantomReference - kagamihogeの日記
    raimon49
    raimon49 2011/06/11
    SoftReferenceとWeakReference ビジュアライズ
  • Private Presentation

    Private content!This content has been marked as private by the uploader.

    Private Presentation
    raimon49
    raimon49 2011/05/28
    Dalvik on Android 2.3 リーディング マークのビットマップで回収オブジェクトを判定
  • メソッドオブジェクトの不思議とid()の落とし穴 - atsuoishimoto's diary

    さて、@aroma_blackさんがこんなスクリプトで悩んでおられたのである。 class C(object): def foo(self): pass c = C() print id(c.foo) == id(c.__class__.foo) print c.foo is c.__class__.foo @aroma_blackさんはメソッドオブジェクトがどこに隠れているのか調べていたようだ。この二つのprint文で出力される結果はおわかりだろうか。 c.foo is c.__class__.foo まず、二番目のprint文から見てみよう。 c.fooは見た通り、Cクラスのインスタンス c からメソッド foo を取得する式である。 >>> c.foo <bound method C.foo of <__main__.C object at 0x02A8B3B0>> c.fooでは、

    メソッドオブジェクトの不思議とid()の落とし穴 - atsuoishimoto's diary
    raimon49
    raimon49 2011/05/01
    >Pythonではbound methodオブジェクトを参照されるたびに生成し、インスタンスにはbound methodオブジェクトへの参照を持たないようにしている
  • Firefox 4のメモリ使用量を減らす方法 - Firefox更新情報Wikiブログ

    2024 07 ≪  08月 12345678910111213141516171819202122232425262728293031  ≫ 2024 09 Firefox 4正式版が公開されましたが、Twitterなどを見ていると、Firefox 3.6と比べてFirefox 4のメモリ使用量が増えたという人が多いようです。逆に減ったというもいますし、大して変わらないという人もいます。 PC環境や、使用しているアドオンや、タブをどのくらい開いたりするかなど、使い方によってメモリ使用量は異なるわけですが、今回はFirefox 4のメモリ使用量が少なくなる…かもしれない方法を紹介します。「空きメモリが少ないのにFirefox 3.6よりメモリうようになって困る!」って方は試してみてください。 ※ Firefoxの動作が重くなったり不安定になるかもしれませんし、全然効果がないかもしれません

    raimon49
    raimon49 2011/04/06
    about:configからJSのGCタイミングなども制御可能。Firefoxは本当に色々あるな。多分さわらない。
  • Pythonの粗大ゴミ - atsuoishimoto's diary

    なんかgcネタが続いてしまうが、先日のPython Hack-a-thon で発表した中で、「ジェネレータオブジェクトが解放されない場合がある」というのは、あまり知られていないようだ。Python公式ドキュメントを確認してみると、どうやらこちらにも書かれていない。知らないとハマってしまう場合もあるので、もうちょっと詳しく解説しておこう。 ガベージコレクションで解放されないオブジェクト まず、ちょっと復習しておこう。Pythonのガベージコレクション機構では、__del__() メソッドを持ったオブジェクトで循環参照を作ってしまうと、そのオブジェクトは自動的には解放されなくなってしまう。 例えば、次のように __del__() メソッドを持つクラスを定義する。 class UnCollectable: "__del__()メソッド付きクラス" def __del__(self): print

    Pythonの粗大ゴミ - atsuoishimoto's diary
    raimon49
    raimon49 2011/02/28
    循環参照 __del__(), ジェネレータでtryブロック
  • 近代的なハードを使いこなすAzulガーベッジ・コレクター - karasuyamatenguの日記

    Azul Systems社のZingというJava環境のGCの解説 http://www.infoq.com/articles/azul_gc_in_detail GCはハードの進歩についていけていない 10年前、1GBのヒープは大きいとされていた 今日、通常のサーバでも256GB+24-48コアを装備 この期間にメモリは100倍以上になったにもかかわらず一般的にGCが管理するHeapは二倍にしかなっていない GCの働き Heap内で生きているオブジェクトを識別する 死んでいるオブジェクトのリソースを回復 relocation/compaction: 定期的に生きているオブジェクトを動かして連続した領域を確保 ゴミ収集モード: 「Stop-the-world」か並列処理 (Parallelism and Concurrency) Stop-the-worldはアプリケーションを止めて作業を

    近代的なハードを使いこなすAzulガーベッジ・コレクター - karasuyamatenguの日記
  • メモリ管理 - かみやんの技術者ブログ

    iPhone開発で、メモリ管理の基礎を社員に伝えることが増えてきたので、エントリとして書こう。 Objective-C基礎 メモリ管理の前にObjCの基礎として、メソッド呼び出しの話。 クラスのインスタンスaがmethodAをコールするときは、 [a methodA] と書く。このとき、aがnilだったときは、エラーではなく、コールされない。methodAに戻り値があるときは、それは、0やnilやNOが返る。ObjCでは、 void dealloc { if(a!=nil){ [a release]; } [super dealloc]; } は、気持ち悪いので、nilチェックはやめましょう。 なお、ObjCでは、動的にメソッドを差し替えることができ、コールの度にメソッドが存在しているかも確認しています。そのため、LL言語(ライトウェイト言語、スクリプト)のように柔軟な記述が可能です。そし

    メモリ管理 - かみやんの技術者ブログ
    raimon49
    raimon49 2011/02/21
    参照カウンタ方式の勘所
  • newするとJVM内で何が起こるのかという話(後編)

    前編ではnewしたときのバイトコードについて追いましたので、後編ではバイトコード実行による現象=メモリの使い方やデータ構造について追っていきたいと思います。 なお私はSunやIBMのJVMしか扱ったことがないので、他の実装には当てはまらない内容が含まれるかもしれません。ご了承ください。 データはどこに作られるのか 当然メモリに作られます。もう少し厳密に言うと、JavaHeapに作られます。 そもそもJVMはデータをどのように扱うのか? JVM仕様書のRuntime Data Areasの節に、データを扱う6つの領域についての説明があります。 Program Counter Register JVM stacks Heap (Java Heap) Method Area Runtime Constant Pool Native Method Stacks これらの領域のうち、newされたオブ

    newするとJVM内で何が起こるのかという話(後編)
    raimon49
    raimon49 2011/02/11
    newした時の領域確保 処理系による
  • iPad、画像リソースのメモリリーク - はてなダイアリー - 無料で簡単。広告のないシンプルなブログをはじめよう!

    JavaScriptiPadのSafariは、2カ所から画像のメモリに接続するとリークしガベージされない。iOS、3.2、4.2.1、どちらも起きる。 例えば、2つのimg要素が同じsrcを設定すると、その画像リソースはページのリロードまで2度と離されない。以下のサンプルは、画像ロードが途中で停止し、以降は新しい画像を表示できない。デスクトップのブラウザのように、別のimg要素でプリフェッチして、他のimg要素で表示する手法は使えない。 // imagesにsrcのリストを用意 var elmImage = document.body.appendChild(document.createElement('img')); var elmOther = document.createElement('img'); (elmImage.onload = function(){ documen

  • [ケータイ用語の基礎知識]第495回:Gingerbread とは

    raimon49
    raimon49 2010/12/07
    コンカレントGC採用
  • function オブジェクトについて

    著書 『WebクリエイティブのためのDOM Scripting』 (毎日コミュニケーションズ) 『DOM Scripting 標準ガイドブック』 (監修、毎日コミュニケーションズ) 『Dreamweaverプロフェッショナル・スタイル』 (共著、毎日コミュニケーションズ) 『ウェブの仕事力が上がる 標準ガイドブック1 Webリテラシー』 (共著、ワークスコーポレーション) 『ウェブの仕事力が上がる 標準ガイドブック2 Webデザイン』 (共著、ワークスコーポレーション)

  • Firefox 4 betaを入れてみた - 射撃しつつ前転 改

    Firefox4 beta7から、コンパートメントという機構が導入されるらしい。これは、GCするメモリ空間をタブ単位に分ける仕組みで、これによってGCが効率化される。以前から、Firefoxはタブを大量に開いたときにパフォーマンスの低下が著しく、その一因にGCがあるような気がしていた。急に1〜2秒フリーズする、というような挙動がよく見られたからだ。 Firefox4自体のリリースは残念ながら2011年の初め頃になるらしいのだが、せっかくベータ版が出ていることであるし、一度試しに使ってみることにした。 Firefox 4のバイナリは、UbuntuのPPAからダウンロードしてきたものを使わせてもらった。これはdailyと入っていることからもわかるように、日々のテスト用のバイナリであって、安定版ではないので、そこのところは注意。 Firefoxの大きな魅力として、拡張機能による機能追加があると思

    Firefox 4 betaを入れてみた - 射撃しつつ前転 改