相关疑难解决方法(0)

在Java中突发内存使用

我试图在Java中处理正确的内存使用和垃圾收集.无论如何我都不是新手程序员,但在我看来,一旦Java接触到某些内存,它就永远不会被其他应用程序使用.在这种情况下,您必须确保峰值内存永远不会太高,或者您的应用程序将持续使用峰值内存使用量.

我写了一个小样本程序试图证明这一点.它基本上有4个按钮......

  1. BigList = new ArrayList<string>()使用大约25,000,000个长字符串项填充类范围变量.
  2. 呼叫 BigList.clear()
  3. 重新BigList = new ArrayList<string>()分配列表 - 再次(缩小列表大小)
  4. 致电System.gc()- 是的,我知道这并不意味着GC会真正运行,但这就是我们所拥有的.

接下来,我在Windows,Linux和Mac OS上进行了一些测试,同时使用默认任务监视器来检查进程报告的内存使用情况.这是我发现的......

  • Windows - 抽取列表,调用clear,然后多次调用GC不会减少内存使用量.但是,使用new几次重新分配列表然后多次调用GC将减少内存使用量回到起始级别.IMO,这是可以接受的.
  • Linux(我在Sun JVM上使用了Mint 11发行版) - 与Windows相同的结果.
  • Mac OS - 我遵循了与上面相同的步骤,但即使重新初始化列表调用GC似乎也没有效果.该程序将使用数百MB的RAM,即使我没有内存.

任何人都可以向我解释这个吗?有些人告诉我一些关于"堆"记忆的东西,但我仍然不完全理解它,我不确定它是否适用于此.据我所知,我不应该看到我在Windows和Linux上的行为.

这只是Mac OS的活动监视器测量内存使用情况的方式还是有其他不同之处?我宁愿不让我的程序闲置大量的RAM使用.感谢您的见解.

java garbage-collection memory-leaks memory-management

25
推荐指数
2
解决办法
3242
查看次数

使用模板删除任何容器

我有很多代码,我删除其中有指针的向量容器,也就是说,我必须首先删除所有指针,然后清除容器.每次我迭代并手动删除指针(我知道stl :: algorithms for_each).为了绕过所有代码,我创建了一个模板来删除所有带指针的向量容器.到现在为止还挺好.

现在我还有几个容器类型,包括映射,并发容器等.就删除而言,最终都具有相同的功能.DeleteContainer(std::vector<T*>& VecIn)我所拥有的功能只能用于上面提到的向量.有没有办法让它足够通用,可以在所有容器上工作?

编辑:谢谢你的所有答案,我希望我能选择不止一个.对于任何偶然发现这个问题的人,请阅读所有答案,而不仅仅是所选答案,因为它们都提供了很好的信息.

c++ templates visual-studio-2008

9
推荐指数
1
解决办法
1804
查看次数