系统相关
首页 > 系统相关> > 在Java运行时中测量一段代码的内存使用情况,以此作为服务的一项持续功能

在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