我正在尝试衡量在Windows7HotSpotJVM中使用大内存页面的性能提升。为了做到这一点,我需要监视JVM内存使用情况,以确保实际使用了大型页面。不幸的是,我无法找到实现这一目标的途径。下面是我所做的设置和测试的描述:
环境设置
我正在使用64位Windows 7终极版进行测试。“将页面锁定在内存中”Windows安全策略已启用,如Java支持大内存页中所述。我还通过运行java版本命令验证了大页面功能已启用,如下所示:
java -XX:+UseLargePages -version
我得到了以下结果,这些结果表明启用了大页面功能:
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
我在所有的试验中都使用了这个视频中的示例Java程序来消耗Java堆的所有可用内存:
public class InfinteStringHashmap {
public static void main(String[] args) throws Exception{
Map<Long, String> map = new HashMap<Long, String>();
for(long i=1; true; i++){
StringBuilder sb = new StringBuilder();
for(long j=0;j<i;j++) sb.append(" ");
map.put(i, sb.toString());
if(i % 1000 == 0){
System.out.print(".");
Thread.sleep(1000);
}
}
}
}
我使用下面的命令运行了这个示例程序(例如,使用512m的固定堆大小):
java -Xms512m -Xmx512m -XX:+UseLargePages InfinteStringHashmap
我还尝试了其他大小为12MB和10GB的堆。请注意,我在重启机器后立即运行测试应用程序,以确保我的可用RAM内存没有碎片。
监控记忆的试验失败
为了验证是否使用大内存页,我尝试了:
编辑:我尝试了评论中建议的以下工具:
Java任务控制器:不提供页面大小信息。
流程浏览器:同上
是否可以测量进程的页面大小或监控Windows中大内存页面的使用情况??
LMP似乎是特定分配的一个特征,而不是整个过程的一个特征(http://msdn.microsoft.com/en-us/library/windows/desktop/aa366720(v=vs.85). aspx)。跟踪使用了哪些分配,哪些没有使用LMP可能不可行。
更新:尝试将系统调用监视器附加到进程。您可能会看到是否使用正确的参数调用了VirtualAlloc。
我不确定这是否是你要找的。
但是,进程资源管理器(进程资源管理器)可能会有所帮助。这并不是什么特别的事情。只是一个更花哨的任务管理器为视窗 7.
此外,随着Java JDK的后续下载,还有一种称为Java任务控制的东西。
祝你好运
我认为你的测试方法不合适。当您想优化TLB时,可以使用大内存页:
A Translation-Lookaside Buffer (TLB) is a page translation cache that holds the most-recently used virtual-to-physical address translations. TLB is a scarce system resource. A TLB miss can be costly as the processor must then read from the hierarchical page table, which may require multiple memory accesses. By using bigger page size, a single TLB entry can represent larger memory range. There will be less pressure on TLB and memory-intensive applications may have better performance.
您可以使用[JVisualVM]来分析您的应用程序。但是在你的测试中,你创建了新的对象。我不是这方面的专家,但是对于mz对TBL的理解,你应该把数据从内存加载到应该在缓冲区中的结构中。如果没有,我应该加载。
理论上,测量恒定操作次数的时间的测试应该足以看到VM参数的影响。
本文向大家介绍详解JVM 运行时内存使用情况监控,包括了详解JVM 运行时内存使用情况监控的使用技巧和注意事项,需要的朋友参考一下 java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是由类加载器一步步解析, 执行与生成与内存区域中的; 并且jvm有自己的垃圾回收器对内存区域管理, 回收; 但是我们已经可以通过一些工具来在程序运行时查看对应的jvm内存使用情况, 帮助更好的分析与优化我
我正在Apache NiFi中创建内存监控报告任务,以监控JVM的使用情况。但是我不知道哪个内存池适合监控JVM的使用情况。任何建议都将不胜感激。 可用内存池: > < li> 代码缓存 元空间 压缩类空间 G1 伊甸园空间 G1幸存者空间 G1老一代 据我所知,G1 Eden Space,G1 Survivor Space和G1 Old Gen是年轻一代的内存池,所以这三个用于监控java堆空间
我们通常处理OutOfMemoryError问题是因为堆或permgen大小配置问题。 但所有JVM内存都不是permgen或heap。据我理解,它还可以与线程/堆栈、原生JVM代码... 但是使用pmap我可以看到进程分配了9.3G,这是3.3G的离堆内存使用量。 我想知道有什么可能性来监视和调优这种额外的离堆内存消耗。 我不使用直接离堆内存访问(MaxDirectMemorySize是64M默
问题内容: 如何监视Node.js的内存使用情况? 问题答案: node-memwatch:检测并查找Node.JS代码中的内存泄漏。查看本教程,以跟踪Node.js中的内存泄漏
如何监视Node.js的内存使用情况?
我有一个Tomcat webapp,它代表客户端执行一些相当大的内存和CPU密集型任务。这是正常的,也是所需的功能。但是,当我运行Tomcat时,内存使用量会随着时间的推移而猛增,达到4.0GB以上,这时我通常会关闭该进程,因为它会扰乱我开发机器上运行的其他所有内容: 我以为我的代码无意中引入了内存泄漏,但在使用VisualVM检查它之后,我看到了一个不同的情况: VisualVM显示该堆占用大约