Java win32 Native内存是否在JProfiler中显示,但在任务管理器中显示

时间:2017-09-25 19:15:24

标签: java

我正在运行一个用C ++编写的应用程序,它调用一个用C ++包装器编写的java类。

我的C ++类调用Java方法:Execute()。 在此方法调用之前,在taskmanager中我检查我的应用程序的内存大约是40MB。 Execute()需要很长时间。当Execute方法调用时,我检查了taskmanager,发现我的应用程序的内存不断增加到接近250MB并继续运行。由于在执行Java API时会发生内存上升,因此我运行JProfiler来检查Java模块的内存消耗。我发现Java moule的内存消耗约为60MB。

所以在这里我试图理解,任务管理器内存如何继续增加。我的C ++是一个MFC应用程序和一个简单的java API调用。所以我不认为C ++会导致这个问题。

我的进一步分析,我发现JAVA API使用WIn32 Native内存。所以我的问题在这里: 1.任务管理器内存是否正确,任何线索为什么它增加这么多。 2.由于我的Java模块使用本机内存,它是什么样的,本机内存显示在任务管理器而不是Jprofiler中。

您能否提供支持

由于

1 个答案:

答案 0 :(得分:0)

不要忘记Java内存系统与C ++中的内存系统完全不同。在执行完全垃圾收集器运行之前,可能无法重复使用未使用的内存,这种情况仅在不时发生。如果您知道最大需要多少内存,请在程序中加载JVM时将其限制为此数量。

使用您在date_part string_word id 2017-08-08 India America Apartments 1 2017-08-08 Apartments Headlines 1 2017-08-08 India America Headlines 1 2017-08-08 Images 2 2017-08-08 Images 2 2017-08-07 India America Apartments 2 2017-08-07 Apartments Headlines 3 2017-08-07 India America Headlines 3 2017-08-07 Images 3 2017-08-07 Images 4 中使用的maxHeapSize的{​​{1}}即可。

由于您只需要一个长时间的呼叫,您还应该考虑通过JDK1_1InitArgs呼叫后销毁JVM。这应该释放JVM使用的所有内存。