空的无限循环和GC(JVM)。请解释其影响。

6

我的空无无限循环

    public static void main(String[] args) {
        while (true) {}
    }

在Java VisualVM中进行分析 (图片) Visual GC

从图片中可以看出,我没有创建对象。为什么要改变堆?

请解释这种影响的原因。


好漂亮的图片!但是抱歉,我没有理解你的问题。 - Stephan
参见:https://dev59.com/-GnWa4cB1Zd3GeqPxidV - assylias
在你的链接中,@assylias创建了一个新对象和Swing。在我的例子中是一个空循环。 - couatl
@couatl 当然可以 - 我提到这个只是因为它相关,那里的一些评论也适用,但你的问题是不同的。 - assylias
1个回答

7

基本上,任何Java应用程序都是多线程的,你的主线程不分配内存并不意味着其他线程也不分配。实际上,很可能通过VisualVM连接并显示GC选项卡时,您已经在VM中产生了一些线程来监视GC资源并向VisualVM提供成为那些闪亮图表的度量标准。而且,这种监视很可能会分配一些资源来完成其工作。


如何对程序进行性能分析,而不使用对象连接VisualVM? - couatl
我认为你做不到。最多只能使用一些操作系统级别的工具(vmstat、top等)。而且即使你不使用VisualVM监视应用程序,也有JMX、finalizer线程、AWT线程等等等等。假设你的应用程序将会有一些线程在后台分配一些资源。 - gpeche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接