我正在运行一个用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中。
您能否提供支持
由于
答案 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使用的所有内存。