Performance-Probleme mit Joda-Time

dflasjjs

Bekanntes Mitglied
Hi,

ich habe ein kleines Performance-Problem und suche nach Lösungen.

Momentan habe noch ein Webprojekt mit Servlets und JSP nach dem MVC-Prinzip.
Eines meiner Klassen ist Flat.java.

In Flat befindet sich alles weitere an Objekten was so zu einer Flat gehört, u. a. Kaufdatum, Mieter, Kaufpreis, ...

Für Auswertungen habe ich bisher "on-the-fly" den Profit dieser Wohnung berechnet. Also auf der einen Seite alle Einnahmen errechnet, alle Ausgaben und diese voneinander subtrahiert. Das selbe gabs dann noch mal Methoden die Ergebnisse kumuliert zurückgeliefert haben.

Wie gesagt, bei jedem Aufruf einer bestimmten JSP-Seite geschah das vollständig erneut, ich habe keine Ergebnisse zwischengespeichert. Eine gängige Methode sah z. B. so aus:

Code:
public double getAccumProfit(int years) {         
   double res = 0;         
   for(int i = 0; i <= years; i++){             
      res = res + getProfit(i);         
   }         
   return res;     
} 

public double getProfit(int yearOfFunding) {
        return getRevenue(yearOfFunding) - getCosts(yearOfFunding) - getCostsTax(yearOfFunding);
}

Damit hatte ich keine Performance-Probleme und im Prinzip war alles gut. Der Parameter yearOfFunding bzw. years bezog sich jedoch nicht auf ein Kalenderjahr, sondern war einfach ein Zähler ab Kaufdatum der Wohnung.

Wenn z. B. am 01.07.2015 eine Wohnung erworben wurde, war yearOfFunding = 0 zwischen 01.07.2015 - 30.06.2016, =1 zwischen 01.07.2016 - 30.06.2017 usw.

Für Auswertungen auf Jahresebene war das nicht so schön, denn die ganzen Methoden rufe ich in einem Kontext auf: Gib mir mal den Profit für 2015, 2016 oder 2029 und zwar unabhängig davon wann die Wohnung gekauft wurde (gerade wenn man über mehrere Wohnungen iteriert ist das wichtig).


Also habe ich mir gedacht, bau ich das mal wie folgt um:
Code:
	public double getAccumProfit(DateTime tilYear) {
		double res = 0;
		
		/*
		 * loops trough the calendar years
		 */
		for(DateTime year=getDateOfPurchase(); year.isBefore(tilYear.dayOfYear().withMaximumValue()); year=year.plusYears(1) ) {
			res = res + getProfit(year);
		}

		return res;
	}

	public double getProfit(DateTime year) {
		return getRevenue(year) - getCosts(year) - getCostsTax(year);
	}


Von der Funktioniert ist das jetzt auch super, genau das was ich brauchte. Allerdings ist die Performance so schlecht, dass ich das nicht so lassen kann. Vor allem die set und get-Methoden, also sowas wie:
Code:
year.getYear() - getDateOfPurchase().getYear()

Fressen extrem viel Performance laut JProfiler.


Grundsätzlich handelt es sich bei all den Daten um Sachen die zwar sehr oft abgerufen werden, aber eher selten verändert.
Ich könnte jetzt natürlich die Ergebnisse der Teil komplexen Berechnungen abspeichern und nur neu berechnen lassen, wenn es ein Eingangsparameter für die Berechnung ändert. Das macht das System aber natürlich anfällig, insofern dass ich überall und ständig daran denken muss die Berechnung neu anzustoßen. Aus diesem Grund finde ich das eher nicht so gut.

Gibt es irgendwas in Richtung Caching, was mir die Arbeit erleichtern könnte oder habt ihr eine Idee? Oder sollte ich vielleicht die Methoden wieder umbauen und das Problem anders lösen?

Vielen Dank im Voraus für eure Hilfe
 

Tobse

Top Contributor
Mir ging spontan gerade folgendes durch den Kopf: wenn ein Jahr abgeschlossen ist (1.1. 0:00 des Folgejahres), wird sich der Profit nicht mehr ändern, komme was wolle. Daher kannst du das immer zwischenspeichern, nachdem du es einmal berechnet hast (und musst dir um Neuberechnung auch keinen Kopf machen).
 

Joose

Top Contributor
Du verwendest bei deinen Methoden als Parameternamen "year" übergibst aber verwendest als Typ DateTime. Wie wäre es wenn du statt mit DateTime Objekten hier in der Schleife rechnest einfach int Werte verwendest und erst in der Methode daraus ein DateTime Objekt machst. (es kommt dir ja anscheinend nur auf den Wert des Jahres an) und ob du nun dann daraus den 1.1.year oder den 31.8.year machst ist egal.

Auch ist es schon performanter häufige verwendete Werte in lokalen Variablen zwischenzuspeichern.
In der for-Schleife zum Beispiel ändert sich die Variable year immer wieder (+1) der Wert von "tilYear.dayOfYear().withMaximumValue()" wird aber jedesmal gleich bleiben und je nach Häufigkeit könnte das schon etwas bringen.
 

dflasjjs

Bekanntes Mitglied
Vielen Dank euch beiden.

In der tat kann ich im Prinzip die selbe FUnktion realisieren, wenn ich statt des DateTimes ein int mit der Jahreszahl nehme.

Vielen Dank! :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R DBUnit Performance Probleme Allgemeine Java-Themen 0
S starke performance probleme des forums Allgemeine Java-Themen 10
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
I Performance-Probleme bei Schleife Allgemeine Java-Themen 3
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
H Watson-Crick-Complement Performance Allgemeine Java-Themen 18
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
B Performance Messungen Allgemeine Java-Themen 4
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
I Performance - JDBC UPC PoolDataSoure Allgemeine Java-Themen 0
E Lambda filter performance Allgemeine Java-Themen 2
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
C Performance Tips Allgemeine Java-Themen 13
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
R Java Performance testen Allgemeine Java-Themen 18
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
V Performance steigern Allgemeine Java-Themen 7
D Reflection-Performance Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
R Collections Performance einer HashMap Allgemeine Java-Themen 26
D Performance Objektallokation Allgemeine Java-Themen 28
J Java Performance nicht nachvollziehbar Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Performance Allgemeine Java-Themen 6
M Performance Allgemeine Java-Themen 5
E Performance website download Allgemeine Java-Themen 13
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
J Performance von Java GUI-Anwendungen Allgemeine Java-Themen 2
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
S Performance und Function Call Depth Allgemeine Java-Themen 6
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
T Performance ArrayList#remove Allgemeine Java-Themen 8
ARadauer Performance Pptimierung -Lesen/Schreiben Allgemeine Java-Themen 10
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
M Listener und Performance Allgemeine Java-Themen 9
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S Ursache für schlechte Performance Allgemeine Java-Themen 2
L Java Performance Check Tool Allgemeine Java-Themen 3
S Performance von Comparator Allgemeine Java-Themen 3
egrath Performance Problem mit File-I/O Allgemeine Java-Themen 6
S Performance Problem Allgemeine Java-Themen 11
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4
T Performance String-Operationen und StringBuffer (1.4und 1.5) Allgemeine Java-Themen 18
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
T Performance-Grundlagen Allgemeine Java-Themen 4
G Performance Problem bei der Übertragung Server zum Client Allgemeine Java-Themen 3
V Performance Leck finden Allgemeine Java-Themen 3
T Tile Game Performance Allgemeine Java-Themen 32
M Performance enorm langsam Allgemeine Java-Themen 26
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Performance: Java zu C/C++ bei Datenbankanwendung Allgemeine Java-Themen 3
Y unnecessary cast & Performance Allgemeine Java-Themen 29
conan2 Performance von paint() Allgemeine Java-Themen 2
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
F Bilder als "Thumbnails" laden - Performance Allgemeine Java-Themen 6
S Java3D Performance optimieren Allgemeine Java-Themen 5
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
T Performance Allgemeine Java-Themen 8
J Anfängerliste für gute Performance? Allgemeine Java-Themen 3
Luma Performance-Problem mit RandomAcces File Allgemeine Java-Themen 4
I Performance bei "String <-> Byte"-Umwandlung Allgemeine Java-Themen 4
C Performance von FOR Schleifen Allgemeine Java-Themen 25
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
M tomcat probleme Allgemeine Java-Themen 1
N Division macht Probleme Allgemeine Java-Themen 14
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
MarvinsDepression Probleme mit relativem Dateipfad Allgemeine Java-Themen 1
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
nibe1501 GUI Probleme Allgemeine Java-Themen 16
C Probleme mit dem WindowBuilder Allgemeine Java-Themen 3
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
K VisualVM Profiling Remote Probleme Allgemeine Java-Themen 1
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
D Regex Probleme Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
Dann07 Probleme mit OpenAL Allgemeine Java-Themen 0
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Probleme mit BigDecimal Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben