問題タブ [yarv]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Ruby でガベージ コレクションをプロファイリングする方法
できれば YARV Ruby を使用して、Rails 以外のアプリケーションで GC をプロファイリングしようとしています。
perftools.rb を見ると、CPU 時間の大部分が Garbage_collector (6061 (61.4%)) に費やされていることがわかります。
perftools.rb を使用して、どのメソッドによって作成されたオブジェクトの数を取得することもできます。一部のメソッドは他のメソッドよりも多くのオブジェクトを作成しますが、極端に偏っているわけではありません。
ここからどこへ行けばいいですか?GC の実行に多くの時間を費やしている理由について、より詳細な情報を取得することは可能ですか? オブジェクトの削除に時間が費やされているかどうか、またはオブジェクトをガベージ コレクションする必要があるかどうかのチェックに費やされているかどうかを確認することはできますか?
OS X Lion、Windows 7、および Ubuntu 12.04 にアクセスできます。
ruby - ruby --dump で表示される情報は実行時に利用できますか?
Ruby ができることを知らなかった 10 のことのスライド 30 で、ジェームズ・エドワード・グレイ II が言及しています。
生産する
ここに出力された情報は実行時に利用できますか? もしそうなら、その情報は単に書き留められたコードを表しているだけですか、それとも実行されたメタプログラミングの結果も含んでいますか?
ruby - Rubinus または MRI 1.9.3 (YARV)?
いくつか質問があります。インターネットを閲覧しましたが、信頼できる回答はあまりありませんでした。ほとんどのブログ投稿は、お互いに異なることを賞賛し、「自分の見解を証明する」ためのベンチマークを持っていたため、互いに打ち消し合っていました (人生でこれほど多くの矛盾するベンチマークを見たことがありません)。
とにかく、私の質問は次のとおりです。
- ルビニウスは本当に速いですか?私は、この明らかに正直な親ルビニウスのプレゼンテーションにかなり感銘を受けました。私を少し混乱させるもう 1 つのことは、多くの Rubinius が Ruby 自体で書かれているにもかかわらず、どういうわけか C-Ruby よりも速いということです。それなら、言語の非常に優れた実装に違いありません!
- EventMachine は Ruinius で動作しますか? 私の知る限り、EventMachine は 1.9 まで実装されていなかったファイバーに部分的に依存しています (間違っていたら訂正してください)。Rubinius がいずれ 1.9 もサポートすることはわかっています。少し待っても構いません。
- C 拡張機能は Rubinius で動作しますか? TCP ストリームから受信したバイナリ メッセージを Ruby オブジェクトに、またはその逆に「シリアル化」する C 拡張機能を作成しました (詳細は重要ではないと思いますが、この質問への回答に役立つ場合は、投稿を更新します)。これはたくさんのメッセージになる可能性があります!私は Ruby で同じコードを書くことができました (ただし、1 か月後にはほとんど意味がありませんでした) が、アプリケーションの本当のボトルネックであることが判明しました。そのため、問題の「解決策」として C を使用する必要がありました。 編集:私はちょうど思い出しました、私は別のタスクに C を使用します。これは配列のヒット テスト メソッドです。基本的には、「ポイント」がポリゴン内にあるかどうかをチェックするだけで、CRuby では信じられないほど遅かったです。
- 前の答えが「いいえ」だった場合、Rubinus に C 拡張機能の代替手段はありますか? VM は C++ で記述されているので、そのようにします。
いくつかの「おまけ」の質問:
- C-Ruby (2.0+、YARV) は GIL を取り除く予定はありますか? または、少なくともそれを変更して、CRuby が真の並列処理をサポートするようにしますか?
- mrubyとは正確には何ですか? 私は matz がそれに取り組んでいるように見えます。CRuby との違い (パフォーマンス面) は?
私があなたに解き放ったこのテキストストームをお詫びします!♥
ruby - Ruby 2.0 バイトコードのエクスポート / インポート
Ruby 2.0の新しい機能について読んだところ、バイトコードのインポート/エクスポートがサポートされることがわかりました。
Ruby 2.0 では、コンパイル済みの Ruby スクリプトをバイトコード表現に簡単に保存し、これらを直接実行できるようになると期待されています。
ruby-2.0.0-p0 をインストールしましたが、バイトコードをエクスポートする方法に関する情報 (または一般的にはその問題に関するドキュメント) が見つかりませんでした。この機能は既に実装されていますか?実装されている場合、どのように使用すればよいですか?
細かいところも気になります。YARV バイトコードはプラットフォームに依存しないはずですか? すべての gem はバイトコードに自動的に含まれますか?
ruby - GC.disable のパフォーマンス上の欠点はありますか?
GC.disable
パフォーマンスが低下する状況はありますか? スワップ メモリではなく実際の RAM を使用している限り、実行しても問題ありませんか?
私は MRI Ruby 2.0 を使用しています。私が知る限り、これは 64 ビットであり、64 ビットの Ubuntu を使用しています。
ruby - MRI Ruby 2.0 の GC.start はどの程度徹底していますか?
MRI Ruby 2.0 では、 はどの程度徹底していGC.start
ますか?
オブジェクトへの参照がなくなったすべてのオブジェクトをガベージ コレクションしようとしますか? それとも、必要と思われる場合は GC オブジェクトのみですか?
私が持っている特定のクラスのオブジェクトの数を追跡しようとしていますが、いくつかのオブジェクトがそれらへの参照をもう持っていないと思っていても、増加し続けているようです。を使用GC.start
しても、これは修正されません。私は C 拡張機能を使用していないので、複雑になることはありません。
編集:私が抱えていた問題は、1.9.2-p180 の Ruby Symbol#to_proc リーク参照と同じでしたか? -オブジェクトはガベージコレクションされるべきだと思ったときにまだ存在していました。その場合のように、問題は暗黙的なSymbol
->の使用に関係していましProc
た。GC.start
ただし、がすべてのオブジェクトをガベージ コレクションする必要があるのか、それとも MRI がガベージ コレクションに必要だと判断したものを単に収集するのかを知っておくとよいでしょう。
java - 到達可能なオブジェクトを返す Java メソッド
次の Ruby メソッドに相当する Java はありますか?
ObjectSpace.reachable_objects_from : このメソッドは、指定されたオブジェクトから直接到達可能なすべてのオブジェクトを返します。
参照: 次のドキュメントで ObjectSpace.reachable_objects_from を探します http://globaldev.co.uk/2013/03/ruby-2-0-0-in-detail/
c++ - レイジー シンボル バインドに失敗しました: シンボルが見つかりません
プロジェクトには、オブジェクトRational
、Complex
、およびを記述する3 つのヘッダー ファイルがありRubyObject
ます。最初の 2 つはテンプレートです。すべては、ヘッダー ファイルで定義されているコピー コンストラクターを使用して相互Rational
変換Complex
できます。const RubyObject&
注:これらの定義は必然的に存在します。それらがすべてヘッダーに入ると、循環依存関係が発生します。
少し前に、ソース ファイルで定義された 2 つのコピー コンストラクターで未解決のシンボル エラーが発生しました。ソースファイルに次の関数を含めることができました
次に、メイン ソース ファイルのライブラリ エントリ ポイントから呼び出しnm_init_data()
ます。そうすることで、これらのシンボルが適切にリンクされました。
残念ながら、最近 GCC をアップグレードしたところ、エラーが再発しました。実際、GCC 4.6 では少し異なる場所(Travis-CI など) で発生しているようです。
しかし、これはバージョン固有の問題ではありません (前に考えていたように)。GCC 4.6 を実行するTravis CI の Ubuntu ベースのシステムで確認できます。しかし、GCC 4.8.1 または 4.8.2 を搭載した Ubuntu マシンでは表示されません。しかし、4.8.2 を搭載した Mac OS X マシンでは見られますが、4.7.2 を搭載した同じマシンではありません。最適化をオフにしても効果がないようです。
ライブラリで実行するnm
と、シンボルは間違いなく未定義です。
未定義のシンボルに従属する定義済みのエントリが 2 つある理由はわかりませんが、コンパイラについてもあまり知りません。
Rational
また、コピー コンストラクターは、テンプレートの各バージョンの未定義のシンボルのようです。
「うーん、それは奇妙だ」と私は思った。"Complex64
とComplex128
もそのnm_init_data
関数で呼び出されますが、どちらも適切に解決され、nm -u
出力には表示されません。" そこで、Rational のコピー構築の前にも追加volatile
してみました。最適化してほしくないものをコンパイラーが最適化していたのかもしれないと考えました。しかし、悲しいことに、それも解決しませんでした。これは、注意して行いました:
注意点は、まったく同じエラーが発生することですが、代わりに複合オブジェクトの場合です。ああ!
これは完全にばかげています。関数と同じソース ファイル内のこれらの関数の両方の定義を次に示しnm_init_data()
ます。
ヒント:nm_init_data()
言及する価値のあることの 1 つは、 gets が呼び出されたとき (つまり、ライブラリが読み込まれたとき) にエラーが発生しないことです。それはずっと後になって、これらの面倒な関数への別の呼び出し中に発生します。
この問題を一度だけ修正するにはどうすればよいですか?他の人も気に入っていますか?
ruby - RubyVM::InstructionSequence を保存して読み取るにはどうすればよいですか?
RubyVM::InstructionSequence をファイルに保存し、後で読み込む方法はありますか?
私はMarshal.dump
成功せずに試しました。次のエラーが表示されます。
ruby - Ruby バイトコード デバッガ
を使用して、「コンパイルされた」ruby ファイルから命令の YARV バイトコード リストを抽出することができましたRubyVM::InstructionSequence#disassemble
。
ここで、命令ごとにコードをデバッグしたいと思います。
それを可能にするデバッガはありますか?
よろしく