- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在内存中有一个 Map
来存储我的对象。我想在内存不足时刷新内存。我现在正在这样做:
void add(K key, V value) {
if (underPressure()) {
flush(innerMap);
}
innerMap.add(k, v);
}
boolean underPressure() {
Runtime rt = Runtime.getRuntime();
long maxMemory = rt.maxMemory();
long freeMemory = rt.freeMemory();
return (double) freeMemory / maxMemory < threshold;
}
由于每次插入时都会调用 underPressure()
,它的成本是多少?据我了解,由于它是一个近似值,它应该由 jvm 以某种方式缓存,但有人真正了解这一点吗?
最佳答案
从 Java 7 开始,不再需要轮询空闲内存。可以注册垃圾收集事件。看到这个帖子:http://www.fasterj.com/articles/gcnotifs.shtml
所以我能想到的最好方法是在垃圾回收后检查可用内存,然后在需要时释放额外空间。
关于Java:关于调用 Runtime.freeMemory()、Runtime.totalMemory() 和 Runtime.maxMemory() 的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8523517/
我在部署war到云服务器时遇到问题(PasS,128Mb),然后我的应用程序中有两个定时器。 Timer1 将每隔一小时执行一次任务来记录我的内存(以及 #2 中描述的 map )。 每次我创建一个
我试图查看 Runtime.freeMemory() 的用法。 文档说它“返回 Java 虚拟机中的空闲内存量” 我执行了一个简单的程序测试这个。程序如下: public class Test {
Runtime.getRuntime().freeMemory() 返回空闲堆内存空间还是堆+非堆内存空间? 最佳答案 javadoc说: @return an approximation to th
我有以下测试程序: public static void main(String[] args) { HashMap hm = new HashMap(); int i =
为什么我得到以下代码的变量输出: Runtime rt = Runtime.getRuntime(); long x,y; x = rt.freeMemory(); char z[] = new ch
下面的代码为内存打印相同的值?理想情况下,在对象分配后,应减少可用内存。我的理解正确吗? System.out.println(Runtime.getRuntime().freeMemory());
无论出于何种原因,我想看看可以创建多少个对象并填充 LinkedList。我使用 Runtime.getRuntime().freeMemory() 来获取 JVM 中可用内存的近似值。我写的是: p
我正在编写一个程序,根据 JVM、堆大小和用户设置,它可能会抛出一些 OOM经常出错。 我不想给它一些任意的限制,但是因为当这个错误发生时,程序可能需要很长时间才能产生一些有意义的输出,我希望它至少尽
为什么当我创建新的字节[1000]时,这个程序打印0,并为新的字节[1000 * 1000]打印1000016? long m0 = Runtime.getRuntime().freeMemo
嘿,我正在用这段代码测试 Runtime.freeMemory(): Runtime runtime = Runtime.getRuntime(); long freeMemory = runti
我搜索并看到了一些主题,但没有一个能解决我遇到的具体问题。 我正在尝试使用 Runtime.getRuntime().freeMemory()、Runtime.getRuntime().maxMemo
下面是检查内存的代码片段 public class TestFreeMemory { public static void main(String ... args){ Run
我想在没有分析器的情况下计算内存中 HashMap 的大小。所以我做了以下事情: HashMap map = new HashMap(); long start = System.currentTim
我遇到了一个奇怪的问题。我有多个 JVM 正在运行,我需要获取它们的内存使用详细信息。当我通过 Runtime.getFreeMemory() 获取详细信息并将其与 jconsole 输出进行比较时,
我用java写了简单的代码如下 public static void main(String[] args) { String st ="Java"; StringBuffer sb
我有一些分析 Runtime.freeMemory 的代码。这是我的代码: package misc; import java.util.ArrayList; import java.util.Ran
我需要使用 定期收集 JVM 的统计信息。稍后,我需要记录 JVM 可用内存/空闲内存、已用内存、总内存。 以下是我想到的两个方案。 ManagementFactory.getMemoryPoolMX
每当我的 JVM 创建一个新对象时,我都想在日志中打印一些内容。我试图使用 Runtime.getRuntime().freeMemory() 来检测它,但不幸的是,在它被提升到堆(check her
我正在运行一个 java 应用程序,我在下面观察到: 我通过代码计算内存利用率: long freeMemory = Runtime.getRuntime().freeMemory(); this.m
我使用 Runtime.getRuntime().totalMemory() 和 freeMemory() 来计算内存。但是,我对结果感到困惑。 我已经阅读了以下帖子: What are Runtim
我是一名优秀的程序员,十分优秀!