-1

私は、読み取り/書き込みの両方のパフォーマンスを重視する会社で働いています。そして、私たちの会社と Geronimo サーバーの言語として、ほとんど Java を使用しています。

数日前、パフォーマンスを改善するために何ができるかについて、私たちのチームとアーキテクトの間で話し合いがありました。その会議で、私たちのアーキテクトは、「Java の大きなヒープの問題」と Java ガベージ コレクションの一時停止に対処するために何かをする必要があると述べました。

彼は、Java GC の一時停止と Java の大きなヒープの問題に完全に反対していました。しかし、率直に言って、Java/JVM でこれら 2 つまたはその他のことが原因でパフォーマンスが大幅に低下する理由を理解できませんでした。そして私たちのアーキテクトは、主に C++ サーバーと C++ 言語を支持していました。

ここで私の質問は、Java の大きなヒープの問題とガベージ コレクションの一時停止のために、読み取り/書き込みのパフォーマンスが最高であることを確認する必要があるユース ケースに Java が適していないと彼が言った理由を理解できません。 -ノッチ。

C++と比較して、大きなヒープの問題とガベージコレクションの一時停止でJavaに反対した理由と、C++サーバーと言語も一緒に行こうと彼が提案した理由を詳しく理解できる人はいますか。彼が反対した理由を理解するために他のさまざまなスタックオーバーフローの投稿を見ましたが、どういうわけか私の深い理解が不足しているため、それらの解決策を理解できません。したがって、段階的な詳細な説明は、物事をより明確にします。

これについての助けをいただければ幸いです。ありがとう

4

2 に答える 2

1

動的メモリ割り当てとガベージ コレクションは、言語に関係なく、パフォーマンスを低下させます。静的または制限付きの割り当てでは、動的なメモリ割り当てやガベージ コレクションは必要ありません。

C および C++ 言語にはガベージ コレクションが付属していません。動的メモリ割り当ては、プラットフォーム (OS またはコンパイラ ライブラリ) によって提供されます。ガベージ コレクションはプログラマ次第です。これにより、プログラマは柔軟に対応できます。

Java には、動的メモリ割り当てとガベージ コレクションが付属しています。言語提供のガベージ コレクションについて思いつく 1 つの質問は、「ガベージ コレクションはいつ実行されるのか」ということです。たとえば、プログラムがガベージ コレクションを実行している間、プログラムは一時停止しますか? それともガベージ コレクションはバックグラウンド タスクとして実行されますか?

背景を理解するには、動的メモリ割り当てとガベージ コレクションについて学習する必要があります。次に、アーキテクトに理由を明確にするか説明してもらいます。

もう 1 つの問題は、Java が中間言語呼び出し Java Byte Codes にコンパイルされることです。Java Byte Code は、(ネイティブ プロセッサではなく) Java 仮想マシンで実行する必要があります。C および C++ では、コードはネイティブ プロセッサ命令にコンパイルされます。解釈は必要ありません。C または C++ 実行可能ファイルはプラットフォーム環境に関連付けられているため、別のプラットフォームで実行するには再構築する必要があります。Java はよりプラットフォームに依存せず、Java 仮想マシン (JVM) を備えた任意のプラットフォームで実行されます。

于 2013-07-14T20:39:37.400 に答える