У моего приложения постоянно заканчивается память. Я использую статический экземпляр большинства классов для выполнения операций, которые не имеют состояния, но я обеспокоен тем, что это является причиной утечки памяти.Является ли мой код Java причиной утечки памяти
Мой технический стек heroku/playframework 1.2.7/mongodb (compose.io)
Основной образец у меня есть:
public class Product{
public productName;
public productDesc;
public productPrice;
private static final Product INSTANCE = new Product();
public static Product instance() {
return INSTANCE;
}
// an example (not actual) method is
public List<Product> listAllProducts(String brand, String category){
//not the actual DB code
Db.connect().find(Product.class).listAllItems(brand, category);
}
}
, который я использую как этот
List<Product> products = Product.instance().listAllProducts("hugo-boss", "jeans");
Есть ли что-то в корне неправильно с этим кодом, что приведет к утечки памяти в веб-приложении с горсткой - но не огромное количество одновременных пользователей?
Благодарим за помощь.
ОБНОВЛЕНИЕ Выполнение heroku config:set _JAVA_OPTIONS="-Xms256m -Xmx384m -Xss512k -XX:+UseCompressedOops"
не работает пока.
я включил один из дополнений, которые дают информацию памяти в журналах, вот что я получаю:
2015-01-09T16:18:58.614435+00:00 heroku[web.3]: source=web.3 dyno=heroku.18312286.ad920471-c3dd-4d5d-a55b-28ea79905c14 sample#load_avg_1m=3.65
2015-01-09T16:18:58.614631+00:00 heroku[web.3]: source=web.3 dyno=heroku.18312286.ad920471-c3dd-4d5d-a55b-28ea79905c14 sample#memory_total=439.86MB sample#memory_rss=438.86MB sample#memory_cache=1.00MB sample#memory_swap=0.00MB sample#memory_pgpgin=138042pages sample#memory_pgpgout=25438pages
2015-01-09T16:19:10.683077+00:00 heroku[web.2]: source=web.2 dyno=heroku.18312286.910cbbef-7613-4daf-a856-230e08618cc7 sample#load_avg_1m=1.90 sample#load_avg_5m=0.86
2015-01-09T16:19:10.683364+00:00 heroku[web.2]: source=web.2 dyno=heroku.18312286.910cbbef-7613-4daf-a856-230e08618cc7 sample#memory_total=367.73MB sample#memory_rss=365.02MB sample#memory_cache=2.71MB sample#memory_swap=0.00MB sample#memory_pgpgin=141344pages sample#memory_pgpgout=47205pages
Если ответ отрицательный, это должно быть хорошо, тогда, пожалуйста, не стесняйтесь сказать мне об этом. – Ankur
Возможно, это может помочь: http://stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java – user2570465
Попробуйте запустить консоль JVM, а затем запустите приложение: вы должны увидеть, где память идет. – davek