如何计算java应用程序可以使用的最大内存

时间:2010-07-17 07:52:52

标签: java jvm memory-management

我有一个最大堆为1024M的java应用程序,它的perm gen空间为256M。 是否保证此应用永远不会超过1280M(1024 + 256)?

堆栈内存是否也来自上面的堆大小,还是额外的内存消耗?

如果java应用程序使用消耗内存的本机代码,那么这个内存来自何处? heap / perm gen / more ram?

我很想知道java如何使用内存。 请评论。 任何可以提供清晰图片的链接也欢迎

三江源

2 个答案:

答案 0 :(得分:2)

正在执行的Java应用程序使用的内存比主堆和permgen空间多。例如:

  • 存在保存java程序的可执行代码的内存以及由可执行文件动态链接的任何共享库。
  • 存在用于表示由java可执行文件,其本机库或应用程序的本机库创建的堆外数据结构,缓冲区等的内存。
  • 有用于表示Java线程堆栈的内存。
  • 可能还有更多。

没有推荐的方法来预测Java应用程序的总内存使用量。即使测量它也很棘手,尤其是当您考虑到某些内存可能与其他JVM或其他非Java应用程序共享时。

答案 1 :(得分:1)

从你的问题我看到你对Java中的内存管理有多困惑。

请仔细阅读本白皮书以便更好地理解。 http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf