いいえ、必須の機能です。AndroidのJVMはおそらくこれを実行できると思いますが、よくわかりません。
しかし、それらのほとんど(すべてのJava EE VMを含む)は、単にこれに関心がありません。
これは、見た目ほど単純ではありません。VMはOSビューからのプロセスであり、スタックまたはデータセグメントであるマップされたメモリ領域がどこかにあります。
ほとんどの場合、それは連続的な間隔である必要があります。メモリの割り当てとOSビューからの解放は、プロセスがOSに新しいセグメント制限を要求するために使用するシステムコールで発生します。
たとえば、JVMに2ギガバイトのRAMがあり、500メガバイトしか使用していないが、この500メガバイトがこの2ギガバイトの10バイトのフラグメントに分散している場合はどうすればよいでしょうか。このメモリ解放機能には、最適化ステップも必要です。これにより、GC実行のリソースコストが増加します。
Javaが実行され、Javaオブジェクトがガベージコレクタによって構築および破棄されると、空きおよび割り当てられたメモリ領域がスタック/データセグメントに分散されます。
Javaは表示されないが、ネイティブOSプロセスが表示される場合、状況は同じです。malloc()10個の1megブロックを実行し、最初の9個をリリースすると、新しいライブラリではありますが、OSに戻す方法はありません。そしてosapisはこれについて広範囲にわたる開発を行っています。もちろん、後でメモリを再度割り当てる場合、この割り当ては解放されたばかりの領域から行われます。
私の意見では、これは少しコストがかかり複雑(そして非常に大規模なプログラミング作業)であっても、その価格に見合う価値があり、私たちの集合的なプログラミング文化からの最高のイメージではないと思います。何十年にもわたって行われ、JavaVMが含まれています。