Вася очень любит писать веб-приложения. Когда он показал одно из своих приложений Пете, он заметил, что нагрузка резко возросла. В частности, среднее потребление памяти (RSS) подскочило с 2Гб до 8Гб. GC со штатными настройками конфигурации server перестал справляться - время его работы резко увеличилось, а newgen за время между его пробегами забивал всю память, доступную джаве (Вася поставил overcommit_memory=2).
Дайте Васе общие рекомендации по настройке GC для работы с большими объёмами памяти.
public static boolean equ(String a, String b)
{
if (a == null || b == null || a.length() != b.length()) return false;
for (int i=0;i<a.length();i++)
if (a.charAt(i) != b.charAt(i)) return false;
return true;
}
В яве все переменные, кроме примитивных типов - указатели, в том числе строки, поэтому строки можно сравнивать оператором сравнения. В том, что такое сравнение даст не тот результат, который может ожидать junior, и заключается смысл этой типичной подъебки. Правильный способ сравнивать строки - a.equals(b).
И хорошо, если умная Java соптимизирует так, что указатели совпадут.
В яве все переменные, кроме примитивных типов - указатели, в том числе строки, поэтому строки можно сравнивать оператором сравнения. В том, что такое сравнение даст не тот результат, который может ожидать junior, и заключается смысл этой типичной подъебки. Правильный способ сравнивать строки - a.equals(b).
Ну вот я и привёл тебя к тому, что == — вообще не способ сравнения строк.
Был только ответ на «что выведется». На остальное - не было.
Я не могу судить о способах оптимизации внутри VM явы. Я лишь знаю, что оптимизация происходит, вижу её последствия. Методы оптимизации внутри VM — задача разработчиков VM.