なぜあなたはCでGCを書くのですか? 本当はRubyで書きたいですよね? この 発表では(J)RubyでGCを書く方法を示します。ToyのGCじゃなくて、本気のGCを Rubyで書けます!(の予定)Read less
(訳注:2016/9/28、頂きましたフィードバックを元に記事を修正いたしました。) 私たち Twitch では、通信が大変混み合うシステムの多くで Go を採用しています。ライブ映像を配信したり、何百万人というユーザにチャットサービスを提供したりする場合に直面する問題を考慮すると、Goはそのシンプルさや安全性、パフォーマンス、読みやすさの点で良いツールだと言えます。 しかしこれは、私たちにとってGoがいかに素晴らしいツールかを説明する、よくある記事ではありません。Goで現在実装されているランタイムにより行き詰まったいくつかの局面をどう打開するか、さらに、私たちはそうした限界に達した時にどう対応したらいいのかについて書いたものです。 これからお話しするのは、「Go 1.4からGo 1.6へのGoランタイムの改善が、どのようにしてガベージコレクション(GC)の停止時間を20倍も改善することに
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%超がライブ・データ(≒必要なデータ)で占められている。 オブジェクトの
We use Go at Twitch for many of our busiest systems. Its simplicity, safety, performance, and readability make it a good tool for the problems we encounter with serving live video and chat to our millions of users. But this isn’t another article about how great Go is for us — it’s about how our use of Go pushes the limits of the current runtime implementation in some dimensions, and how we respond
Go1.5とGo1.6でGoのGCのレイテンシが大きく改善された.この変更について「ちゃんと」理解するため,アルゴリズムレベルでGoのGCについて追ってみた. まずGoのGCの現状をパフォーマンス(レイテンシ)の観点からまとめる.次に具体的なアルゴリズムについて,そして最後に実際の現場でのチューニングはどうすれば良いのかについて解説する. GoのGCの今 最初にGoのGCの最近の流れ(2016年5月まで)をまとめる. Go1.4までは単純なStop The World(STW)GCが実装されていたがGo1.5からは新たなGCアルゴリズムが導入された.導入の際に設定された数値目標は大きなヒープサイズにおいてもレイテンシを10ms以下に抑えることであった.Go1.5で新たなアルゴリムが実装されGo1.6で最適化が行われた. 以下は公開されているベンチマーク.まずはGo1.5を見る. Gophe
プログラムが使用しなくなったメモリ上の空間を解放し、他のプログラムが使えるようにするのは、古くはプログラマの役割でした。それがゆえに、しばしば解放を忘れるというヒューマンエラーを引き起こし、ついには「メモリ不足です」と宣告され、あるいはオペレーションシステムもろとも轟沈し、作業中のデータはすべて消え失せ、モニタの前のユーザーは声にならない叫び声をあげるというシーンがしばしば見られました。 そこで研究され実装されたのが、ガベージコレクションです。これはメモリの解放を人任せにせず、プログラム自身が行えるようにするもので、プログラマの苦役の幾ばくかをも解放してくれました。 とはいえ、その実装方法やアルゴリズムは多種多様で、ガベージコレクションがあるから大丈夫、という思い込みだけでプログラムを作成していると、思わぬ落とし穴に転げ落ちることになります。 本書はアルゴリズムはもちろん、その実装方法とメ
皆さんこんにちは お元気ですか。私は元気です。 今日はPythonにおけるメモリ少なく使う方法を紹介したいと思います。 なぜ、そんな方法を書くに至ったか。それは、こんなエラーをしょっちゅう見ているからですね。 Traceback (most recent call last): File "lasagne_wheal.py", line 48, in <module> prediction = model.predict_proba(np.array(X_test)) MemoryError 画像処理を行っている人間ならよくやりがちかもしれませんが、 要はint8で持っている情報をfloatに変換してデータが膨れ上がったことによってメモリが 不足していることから発生しています。 Convolutional Neural Networkを大きな画像で実施しようとするとよく発生するのではないで
1.はじめに プログラミング言語とはシステム化する対象物を抽象化し、コンピュータで処理可能なコードを記述するために用いる人工言語である。プログラミング言語はコンピュータの機械語と一対一の対応をもったアセンブラから始まり、コンパイラを用いて機械語に翻訳することを前提としたコンパイラ言語、インタプリタと呼ばれるプログラムがソースコードを解釈し実行するスクリプト言語と、記述できる抽象度を高める方向へと進化してきた。 プログラミング言語はその存在理由から、より抽象度の高い記述が行えること、すばやい開発を行える事が求められる。抽象度の高い記述とは、プログラムがどういう処理を行うか(HOW)ではなく何の処理を行うか(WHAT)を記述しやすい構文、機能を持っていることを、すばやい開発とは記述性の高さ、コードの密度の高さ、バグの発生しにくい構文、機能を持っていることをさす。 この抽象度の高い記述、すばやい
This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.
本稿は、ブダペストで開かれたイベント「 RuPy 」で、Pat Shaughnessyが披露したプレゼンの内容をまとめたものです。 プレゼンの映像はここ から視聴できます。 本稿は当初、 同氏の個人ブログ に投稿されましたが、同氏の了承を得て、Codeshipに再掲載します。 このイベントは「RubyとPython」に関するカンファレンスなので、RubyとPythonでは、ガベージコレクション(以下「GC」)の動作がどう違うのかを比較すると面白いだろうと私は思いました。 ただしその本題に入る前に、そもそもなぜ、GCを取り上げるのかについてお話しします。正直言って、すごく魅力的な、わくわくするテーマではないですよね? 皆さんの中でGCと聞いて、心がときめいた方はいらっしゃいますか? [実はこのカンファレンス出席者の中で、ここで手を挙げた人は数名いました!] Rubyコミュニティで最近、Rub
『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。 Rubyist Magazine について 『Rubyist Magazine』、略して『るびま』は、Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。 最新号 Rubyist Magazine 0063 号 バックナンバー Rubyist Magazine 0063 号 Rubyist Magazine 0062 号 Kaigi on Rails 特集号 RubyKaigi Takeout 2020 特集号 Rubyist Magazine 0061 号 Rubyist Magazine 0060 号 RubyKaigi 2019 直前特集号 Rubyist Magazine 0059 号 Rubyist
きほんのきです。 まずはログを見ます。 GCログを出すようにしていない場合は、GCログを出すようにします。 -Xloggc:/var/log/gc.log # 出力先パス -XX:+PrintGCDetails -XX:+PrintGCDateStamps の3つのパラメータを指定してjavaを起動します。 java -XmsXXXXM -XmxXXXXM -Xloggc:/var/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -classpath <クラスパスとか> <プラグラム> <引数> このようにして実行しGCログを採取します。 (上記の例では/var/log/gc.log) で、開いてみると、こんな感じの文字列がつらつらと並んでいます。 ※私の環境では、GCアルゴリズムをコンカレントGCとしています。 2014-01-
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く