我有一个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/