2015-08-06 12 views
10

In der Dokumentation über Scala value classes wird erwähnt, dass es drei Fälle, wenn ein Wert Klasse tatsächlich eine Instanz zugeordnet werden muss:Gibt es eine Möglichkeit, eine Warnung zu erhalten, wenn eine Scala-Value-Klasse instanziiert werden muss?

Allocation Zusammenfassung

wird ein Wert Klasse tatsächlich instanziiert, wenn:

  1. Eine Wertklasse wird als ein anderer Typ behandelt.
  2. Eine Wertklasse wird einem Array zugewiesen.
  3. Ausführen von Laufzeittests, z. B. Mustererkennung.

Gibt es eine Einstellung im Compiler oder in den Sprachfunktionen, die eine Warnung erzeugen würde, wenn ein Wert Klasse instanziiert werden muss?

Antwort

1

Nein, momentan nicht.

Allerdings ist es sehr selten wert, sich mit dieser Art von Mikrooptimierung zu beschäftigen.

Wenn Sie einen sehr sehr heißen Code haben und ihn so weit wie möglich optimieren müssen, probieren Sie einfach ein paar Dinge aus und führen Sie einen neuen Benchmark durch.

Der JIT-Compiler ändert häufig, was Ihr Code auf Maschinenebene macht, wenn der Code heiß genug ist.

Der Overhead der Zuweisung einer Wertklasse ist oft nicht einmal messbar, es sei denn, es ist das einzige, was der Thread tut. Siehe z.B. https://groups.google.com/forum/#!topic/scala-user/XdQnbcs2SRM für einige Benchmarks, bei denen die Wertklassenzuordnung nicht messbar ist.