Вызов Runtime.getRuntime().freeMemory()
дает оценку объема свободной памяти.Однако это не особенно полезная мера, поскольку есть большая вероятность, что вы сможете выделить больше памяти, чем указано в отчете.Когда вы пытаетесь выделить больше памяти, чем в настоящее время свободно, JVM автоматически запустит GC в попытке освободить достаточно места для вашего выделения, и это обычно будет успешным.
Вы можете запросить GC для запуска "прямо сейчас", вызвав System.gc()
, но это, как правило, плохая идея с точки зрения производительности.GC наиболее эффективен (с точки зрения времени, затрачиваемого на возвращаемый байт), если вы просто позволяете JVM запускать GC, когда это необходимо.Единственный случай, когда может быть целесообразно запустить ГХ, - это если вы знаете, что у вас есть свободные циклы ЦП в определенной точке, и вы хотите смягчить паузы ГХ.
В вашем конкретном случае яЯ не уверен, какое преимущество имеет знание того, сколько свободной памяти есть.Почему бы вам просто не попробовать операции sqlite и отловить / разобраться с исключениями?Или увеличить размер кучи?Или отследить, что происходит с утечкой памяти или используется неэффективно?