Ich verwende eine benutzerdefinierte Klasse Foo
in Java als Schlüsseltyp in HashMap
. Alle Felder von Foo
Instanzen sind unveränderlich (sie werden als final und private deklariert und ihnen werden nur Werte im Konstruktor zugewiesen). Somit ist das hashCode()
eines gegebenen Foo
Objekts ebenfalls fest, und zu Optimierungszwecken berechne ich es im Konstruktor und gebe diesen Wert einfach in der hashCode()
Methode zurück.Java-Optimierung mit Threads
Instanzen von Foo
haben auch eine value()
Methode, die einen ähnlichen festen Wert zurückgibt, sobald das Objekt instanziiert wurde. Momentan berechne ich es auch im Konstruktor und gebe es in der Methode zurück, aber es gibt einen Unterschied zwischen hashCode()
und value()
: hashCode()
wird zum ersten Mal fast sofort nach dem Erstellen des Objekts aufgerufen, aber value()
wird viel später aufgerufen. Ich verstehe, dass einen separaten Thread mit dem Hash-Code berechnen würde einfach die Laufzeit erhöhen, weil die Synchronisierungsprobleme, aber:
- ist dies ein guter Weg
value()
zu berechnen? Würde es die Laufzeit verbessern? - sind einfach
Threads
genug, oder brauche ich Pools usw.?
Hinweis: dies mag wie ich die falschen Teile meines Programms bin zu optimieren, aber ich habe gearbeitet bereits auf den ‚richtigen‘ Teile und brachte die durchschnittliche Laufzeit nach unten von ~ 17 Sekunden ~ 2 Sekunden. Edit: wird es mehr als 5000 Foo
Objekte, und das ist eine vorsichtige Schätzung.
in Bezug auf die Konzeption und Architektur wickeln, wäre es seltsam, als 'value()' der Lage wäre, um einen ungültigen Wert für eine Zeit zurückzugeben. – njzk2
@ njzk2 Das ist gut für mein Programm; Wie ich bereits sagte, wird 'value()' lange nach der Erstellung des Objekts aufgerufen. – shardulc