Java と C++ で小さなテストを実行し、大量の非常に小さなオブジェクト (クラス メンバーはなく、コンストラクターには何もありません) を作成しましたが、Java は明らかに高速です (つまり、C++ は非常に遅いようです)。これはJVMに関係していると思いますが、どのように?
編集:
私が使用したクラスは、C++ で次のようなものでした (クラス メンバーがなく、コンストラクターで何も行われていないと言ったように)。
class foo{
public:
foo(){}
~foo(){}
}
そしてJavaで:
public class Foo{
public Foo(){}
}
私が行った小さなテストは、大量のオブジェクトをループに割り当てることだけでした (約 1000000000 行で)。Linux を使用する同じマシンで、GCC 4.7.2 と Java 1.7 を OpenJDK 実装で使用しました。
確かに、JVM が不要なメモリを所有していることを示すメモリ プールの割り当てに関係していると思います。
JVM は実際にはポインター参照のカウントとメモリーの割り当てが遅くなると思っていたので、まだ混乱しています。