【问题标题】:Is there any way to find out the number of objects that gets created?有没有办法找出创建的对象的数量?
【发布时间】:2009-07-30 14:29:13
【问题描述】:

有什么方法可以找出创建的对象的数量吗? 例如, 如果我需要查找为以下代码创建的对象数量,我该如何完成? 代码:

String [][] str = { {new String("A"),new String("B"),new String("C")}, {new String("D"),new String("E")} };

【问题讨论】:

  • Java 初学者对“new String(String)”和“创建的对象数量”的痴迷从何而来?我一次又一次地看到这种问题,这看起来不像是初学者会问自己的问题。有没有专门针对这类问题的教科书?
  • Joachim,我不同意这里 - new String("A") 是一个聪明的例子,它不容易看到,创建了多少对象(在这种情况下:3 或 4,取决于“ A" 已经在池中)。是的,初学者倾向于使用它,即使 javadoc 很清楚,构造函数也没用;)

标签: java object


【解决方案1】:

是的——您可以使用分析器,例如Yourkit

【讨论】:

    【解决方案2】:

    Netbeans 和 Eclipse 都有很好的分析器,可以为您提供这些信息。如果您可以在这些 IDE 之一中运行您的项目,则此方法有效。

    【讨论】:

      【解决方案3】:

      这是一个小批处理文件(希望您正在运行的窗口),它可以让您浏览 使用 JDK 工具在 JDK vm 中运行的任何 Java 应用程序的堆。

      它使用 JMAP 转储堆,然后使用 JHAT 运行网络服务器,然后您可以浏览(离线)堆:)

      @echo off
      if not [%1%]==[] goto map
      cls
      echo.
      echo Gebruik: map.cmd [pid#]
      echo.
      echo ( JVM 6+ required. You're using : %JAVA_HOME% )
      echo.
      echo Which PID would you like to use?
      echo.
      jps -l
      echo.
      pause
      exit /b
      
      :map
      if exist c:\jmap.txt del c:\jmap.txt
      jmap -dump:file=c:\jmap.txt %1
      echo.
      echo about to start the web-server on port 8081
      pause
      start http://localhost:8081
      start jhat -port 8081 c:\jmap.txt -J-mx512m
      echo.
      

      【讨论】:

        【解决方案4】:

        在这种情况下,你可以这样做

        int numberOfObjects = 0;
        for(String[] s: str)
        {
            numberOfObjects += s.length;
        }
        

        编辑:没关系,我永远在所有事情上都很糟糕......

        【讨论】:

        • -1:我很确定这不是他的意思。此外,您的代码甚至没有给出正确的答案!
        • 对于否决了该解决方案有什么问题的人,他要求提供一个非常具体的案例,该解决方案运行良好。
        • 这当然不是确定在 Java 中创建的对象数量的方法,并且这种方法存在多个问题:a)它可以创建更多对象 b)它在与相同的代码库中添加代码您正在检查的内容 c) 即使这个示例仅举几例,它也不太可能产生正确的答案..
        • 数组本身就是对象,您的代码不计算它们。另外,String 类的构造函数可能会创建更多的对象。
        • 不,不是。它不计算 String 隐式创建的对象和数组本身。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-27
        • 2019-06-16
        • 2021-05-30
        • 1970-01-01
        相关资源
        最近更新 更多