Joey: kein sizeof() in Java

Hi Leute,

es gibt in Java kein sizeof() wie in C++. Ich muß aber unbedingt wissen wieviel Byte ein Objekt vom Typ Double belegt (Double ist ne Hüllklasse für einen double-Wert). Oder anders gefragt: Gibt es keine Methode, die von einem beliebigen Objekt die Bytegröße abfragen kann?

Bin ziemlich genervt, weil ich in der Doku nichts finde.

Joey

  1. Hallo,

    Ich muß aber unbedingt wissen wieviel Byte ein Objekt vom Typ Double belegt.

    Warum?

    Gibt es keine Methode, die von einem beliebigen Objekt die Bytegröße abfragen kann?

    Nicht direkt oder nicht dass ich wüßte.
    Mir würden auch nur sehr wenige Gründe einfallen, wofür das gut wäre. Wofür
    brauchst du das?

    Der erste Google-Treffer zu "java sizeof" ist übrigens dieser hier:
    http://www.javaworld.com/javaworld/javaqa/2003-12/02-qa-1226-sizeof.html

    Gruß
    Slyh

  2. Hallo Joey,

    es gibt in Java kein sizeof() wie in C++. Ich muß aber unbedingt wissen wieviel Byte ein Objekt vom Typ Double belegt (Double ist ne Hüllklasse für einen double-Wert). Oder anders gefragt: Gibt es keine Methode, die von einem beliebigen Objekt die Bytegröße abfragen kann?

    Bin ziemlich genervt, weil ich in der Doku nichts finde.

    Die Antwort hier ist: Es gibt kein "Objekt" vom Typ Double in Java.
    double ist ein primitiver Datentyp und hat ergo _immer_ 64 bit (also 8 bytes).

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    panic("Oh boy, that early out of memory?");
            linux-2.2.16/arch/mips/mm/init.c
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Hello,

      Die Antwort hier ist: Es gibt kein "Objekt" vom Typ Double in Java.
      double ist ein primitiver Datentyp und hat ergo _immer_ 64 bit (also 8 bytes).

      ähm, das kommt aber sehr darauf an, was du mit den Anführungszeichen um Objekt gemeint hast, java.lang.Double.

      MfG
      Rouven

      --
      -------------------
      sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
      Konsens ist kein Beweis  --  John Naisbitt
    2. Hi,

      es gibt in Java kein sizeof() wie in C++. Ich muß aber unbedingt wissen wieviel Byte ein Objekt vom Typ Double belegt (Double ist ne Hüllklasse für einen double-Wert). Oder anders gefragt: Gibt es keine Methode, die von einem beliebigen Objekt die Bytegröße abfragen kann?

      Die Antwort hier ist: Es gibt kein "Objekt" vom Typ Double in Java.

      Doch, es gibt Objekte vom Typ Double (die Klasse Double ist von java.lang.Object abgeleitet wie jede Klasse, und Instanzen der Klasse Double sind dann die Objekte).
      double mit kleinem d ist in der Tat ein primitiver Datentyp, Double mit großem D dagegen eine Klasse. (siehe auch Integer vs. int, Character vs. char, ...)

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo MudGuard,

        Die Antwort hier ist: Es gibt kein "Objekt" vom Typ Double in Java.

        Doch, es gibt Objekte vom Typ Double (die Klasse Double ist von java.lang.Object abgeleitet wie jede Klasse, und Instanzen der Klasse Double sind dann die Objekte).
        double mit kleinem d ist in der Tat ein primitiver Datentyp, Double mit großem D dagegen eine Klasse. (siehe auch Integer vs. int, Character vs. char, ...)

        Ja, ich war etwas zu voreilig mit meiner Aussage.
        Natürlich kann man Instanzen der Klasse "Double" anlegen - aber ich nahm an, dass diese dann genauso viel Speicher belegen wie ein "double"-Wert, da Java diese intern eventuell als "double" behandelt. Diese Annahme war nicht korrekt.

        Den Speicherverbrauch eines Objektes muss man unter Java komplizierter berechnen - dieser Artikel beschreibt, wie es geht.

        Im Prinzip muss man also nur die Größe aller Attribute berechnen. Da diese aber ebenso wieder Objekte sein können, wird das Ganze etwas komplizierter.
        Summa summarum sollte eine Instanz der Klasse "Double" also 4 Byte Speicherverbrauch haben - denn sie hat ein Attribut vom Typ "double", das genau 4 Bytes im Speicher belegt. Dies lässt sich dem Quelltext der Klasse Double entnehmen.

        Grüße

        Marc Reichelt || http://www.marcreichelt.de/

        --
        panic("Oh boy, that early out of memory?");
                linux-2.2.16/arch/mips/mm/init.c
        Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)