在Java运行时中测量一段代码的内存使用情况,以此作为服务的一项持续功能
作者:互联网
我有一个项目,在该项目中,我需要能够测量以文本形式接收并在运行时使用Java Compiler API进行编译的函数在CPU和内存空间中的效率.
我正在使用ThreadMXBean来衡量运行时间.有更好/更精确的方法吗?
ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
我需要的是关于如何测量所用内存的建议.
理想情况下,我想了解每项任务及其规模.但是我可以精确计算代码使用的字节数.
每一段代码都需要自动编译,测试,运行和评估.因此,使用探查器并自行查看不是一个选择.
欢迎您提出任何建议,可能的方法,资源或工具.
我需要阐明这一点.这不是一个一次性的过程.它是Web应用程序的主要服务,可实时接收,编译,分析和评分已实现的功能.我希望可以同时进行几百个并发工作.我的目标不是一次或手动使用外部工具进行监视.
我再说一遍:我想做这项服务.它不是用于测试我的应用程序或对其进行性能分析.
我不咬人(或投票,因为我们是这样),所以任何认真的建议都会赢得投票.
状态更新:由于我没有可靠的可靠方法来进行内存使用测量,因此该项目处于暂停状态.我目前正在寻找JVM世界之外的其他可能的语言/框架.即便如此,我仍在积极寻求建议并为此项目进行研究.
解决方法:
我认为使用ThreadMXBean是实现此目标的最佳方法,您可以获得所需的所有信息.
我们正在使用此代码段来确保执行期间使用的最大内存:
try {
PrintWriter out = new PrintWriter(System.out);
List<MemoryPoolMXBean> pools = ManagementFactory
.getMemoryPoolMXBeans();
for (MemoryPoolMXBean pool : pools) {
MemoryUsage peak = pool.getPeakUsage();
out.printf("Peak %s memory used: %,d%n", pool.getName(),
peak.getUsed());
out.printf("Peak %s memory reserved: %,d%n", pool.getName(),
peak.getCommitted());
}
out.close();
} catch (Throwable t) {
System.err.println("Exception in agent: " + t);
}
这是ManagementFactory用例的有用资源.
标签:performance-testing,compiler-construction,runtime,runtime-compilation,java 来源: https://codeday.me/bug/20191030/1968817.html