Java中的内存分配

3

问题: 我已经设置了Xms512m和Xmx1024m来运行应用程序,该程序内部使用C++本地层执行其他操作,但是当运行应用程序时,我遇到了OutOfMemory异常。 我需要知道C ++使用哪个内存(即从分配的内存Xms512m和Xmx1024m中使用还是使用其他内存)。

如何在分别运行Java和C ++代码时获取堆空间和栈空间。

4个回答

2
本地代码分配的内存不在Java堆中。你的OutOfMemory异常是由Java应用程序引起的。OOM提示你Java应用程序可能使用超过1024MB的内存。您可以将其扩大或考虑内存泄漏问题。
以下是一些有关内存泄漏检测的链接: 您可以简单地执行以下操作:
  • 使用jps获取Java应用程序的pid
qty:~ qrtt1$ jps
4437 start.jar
10470 Jps
使用jmap获取堆转储数据。
jmap -dump:format=b,file=my_app_heap_data.hprof 4437
使用垫子打开它,就像这样:

mat


1

1

0

分配给JVM的内存和JNI以及本地应用程序使用的内存是完全不同的。像VisualVM和Jprofiler这样的工具可以帮助您确定JVM特定的堆使用情况。但是,如果内存泄漏来自JNI或本地应用程序,则应使用诸如-Xrunjnichk(在IBM JDK上可用)之类的选项来调试JNI调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接