Я не понимаю, почему они вообще выставили метод gc (). Даже в документации Java довольно ясно говорит о том, что поведение непредсказуемо. Док говорит
«Вызов метода gc предполагает, что виртуальная машина Java затрачивает усилия на утилизацию неиспользуемых объектов»
Это означает, что он может делать любое количество вещей, в том числе и ничего.
Что касается вопроса, многие серверы приложений вызывают System.gc () здесь и там. WebSphere является основным нарушителем, и вы можете найти его по всей кодовой базе WAS / Portal. Я не видел этого в библиотеках / фреймворках с открытым исходным кодом, которые я помню. Возможно, люди, которые прилагают усилия для внесения вклада в эти структуры, имеют достаточно смысла, чтобы не использовать операции с неопределенным поведением.
Я предполагаю, что он вызывается иногда, когда разработчик чувствовал, что «эта операция может, при некоторых обстоятельствах, использовать много« временной »(недолгой) памяти при обработке, поэтому я сделаю некоторую сборку мусора чтобы вернуть его ". Это, вероятно, относится и к вашему сценарию RMI. На мой взгляд, это подделка. В некоторых случаях вызов System.gc () может снизить производительность путем преждевременного (и неоправданного) запуска полных циклов GC. Суть в том, что сборщик мусора довольно умен, и, если вы не уверены, что знаете лучше, не пытайтесь с ним связываться.