質問: データ処理を扱っていると、時々「メモリに乗らない(大容量データ)」という表現に遭遇します。 例: pandas でメモリに乗らない 大容量ファイルを上手に扱う また、ネットワーク経由の I/O などで大量データが送られてきて、分割して処理する必要がある場合も考えられると思います。 お恥ずかしながら非常に基礎的な質問になるのですが、この際の「メモリ」の上限値は何を見れば分かるのでしょうか...? 例えば、Mac Book Pro の場合、この「8GB 2,133MHz LPDDR3メモリ」に記載がある 8GB が上限値とみなせるのでしょうか...? 背景としては: 1. 常識的なメモリの上限・下限を把握して、非常識なコードを無自覚に生成してしまうことを防ぐ 2. 現在、個人的にアルゴリズムを学習し直しており、計算量・メモリに関する常識的な感覚を養いたいと考えている 相当初歩的、かつ、的はずれな質問をしている自覚はあるのですが、検索してもうまくぴったりな情報を見つけられず、ぜひお知恵を拝借できればと思っております。
回答: Macの場合、「アクティビティモニタ」の「メモリ」パネルの下部でメモリの使用状況が確認できます。ざっくりですが、「物理メモリ」から「使用済みメモリ」を引いた残りが、その時点でのいわゆる「空きメモリ」で、これが「メモリに乗せられる」サイズの目安と考えるのが良いのではないかと思います。 ただし実際には、このサイズ全部を使うことはできません。空きメモリが減りすぎるとファイルキャッシュ(一度アクセスしたファイルの中身をメモリに乗せておいて、次回のアクセスを省略して高速化する)に使える量が減ってしまい、パフォーマンスに影響が出てしまうためです。 ちょっとややこしいのですが、OSがファイルキャッシュで使うメモリは使用済みメモリには含まれていません。空きメモリの中から確保します。そのため空きメモリが減ると、ファイルキャッシュに使えるサイズも減ってしまうのです。ファイルキャッシュ用にどれくらい空きメモリを取っておけば良いかは、そのマシンで動作するアプリケーションや利用状況に依存するため一概には言えません。パフォーマンスの検証が必要です。 あと、アプリケーションは自分がプログラムを書いて確保した以上にメモリを使います。例えばスレッドを生成すると、そのスレッドのスタック用にメモリが使われます。スレッドをたくさん生成するようなプログラムでは、これだけでもそこそこのメモリ使用量になります。この辺は、アクティビティモニタでご自分のプロセスのメモリ使用量を確認してみるのが良いかと思います。 参考:Mac でアクティビティモニタを使う方法/メモリ