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

标签 java jvm memory-management

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

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

如果java应用程序使用消耗内存的 native 代码怎么办,那么这些内存来自哪里?堆/永久代/更多内存?

我有兴趣知道java如何使用内存。 请给出意见。 也欢迎任何可以提供清晰图片的链接

谢谢

最佳答案

正在执行的 Java 应用程序使用的内存多于主堆和永久代空间。例如:

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

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

关于java - 如何计算java应用程序可以使用的最大内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3270686/

相关文章:

c# - Garbage Collector、call & callvirt 和 Debug/Release 代码模式执行差异

java - 将java项目导出到可运行的带有图像的jar文件

java - ASM的问题getMergedType和getCommonSuperClass

java - Spring Data REST - 如何处理对象所有权

java - 在 Android 上调用方法的成本

arrays - C2 JIT 编译器何时触发 Java 循环谓词优化?

c - 为字符串数组分配内存

java - 更改 Java 程序认为被按下的键

java - 没有堆栈跟踪的 NPE

linux - 如何将 "memory priority"分配给 linux 进程?