Ik ben op dit moment Optimizeit van Borland even aan het bekijken en op zich is die wel aardig informatief. Maar qua mogelijkheden en verschillende soorten view behoorlijk beperkt. Vroeger had je ook JProbe maar ik kan niet bij de site komen dus mijn vermoeden is dat die zijn langste tijd heeft gehad. Zijn er nog andere profilers uit voor Java?
Ik vind zelf JProfiler wel een goede tool. Ook wel aardig uitgebreid en goede support voor JBuilder.
http://www.ej-technologie...s/jprofiler/overview.html
http://www.ej-technologie...s/jprofiler/overview.html
[ Voor 68% gewijzigd door Donderwolk op 15-06-2004 10:34 ]
Pwnd
Ik hoorde gister iets over ik dacht JProbe. Er zou een gratis lite versie zijn uitgekomen. Misschien is het daarom slecht bereikbaar?
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Ik zal er even naar kijken, thanx.Donderwolk schreef op 15 juni 2004 @ 10:31:
Ik vind zelf JProfiler wel een goede tool. Ook wel aardig uitgebreid en goede support voor JBuilder.
http://www.ej-technologie...s/jprofiler/overview.html
en wauw.. hier is iets in euro`s zelfs goedkoper dan in dollars!
Euro: 1.000Alarmnummer schreef op 15 juni 2004 @ 11:36:
[...]
Ik zal er even naar kijken, thanx.
en wauw.. hier is iets in euro`s zelfs goedkoper dan in dollars!
US Dollars: 1.2004
Zijn de tools die hier in dit topic gepost zijn te vergelijken met FxCop voor .NET? Ik zal me eens verdiepen in dit onderwerp.
Wij hebben een tijdje terug ook optimizeit geprobeerd, maar dat kon onze applicatie niet aan, werd veel te traag en zo. Met jprofiler hebben we veel betere ervaringen, en is ook veel goedkoper.
Bram Bouwens
Het ligt er aan wat je met optimzeit doet. Als je in de memory profiling mode zit, dan merk je dat behoorlijk in performance (en dat zit je standaard). Maar als je in de cpu profiling mode zit, dan valt het best mee.bbouwens schreef op 15 juni 2004 @ 13:08:
Wij hebben een tijdje terug ook optimizeit geprobeerd, maar dat kon onze applicatie niet aan, werd veel te traag en zo. Met jprofiler hebben we veel betere ervaringen, en is ook veel goedkoper.
En verder vind ik dat ook niet zo`n probleem. Tenslotte is het niet de normale manier van gebruik maar alleen om bottlenecks op te sporen.
Helemaal mee eens, maar vergelijk de prijzen in de vs en nederland maar eens met bv hardware.boktor
Euro: 1.000
US Dollars: 1.2004
[ Voor 25% gewijzigd door Alarmnummer op 15-06-2004 13:26 ]
Verwijderd
Ik zat heel even naar jprofiler te kijken en moet zeggen dat ik erg onder de indruk ben van de support voor platformen. Bij de IDE's staat bv ook Eclipse. Er is tevens support voor J2EE en er staan daar zelfs andere application servers bij dan die eeuwige tomcat waar je normaal mee doodgegooid wordt.
Op Javaworld staat een review van deze 3 profilers:
http://www.javaworld.com/...003/jw-0822-profiler.html
http://www.javaworld.com/...003/jw-0822-profiler.html
Ik ben nu met JProfiler bezig en het is dus erg informatief, erg goed afgewerkt product. ALs ik nu een zou moeten kiezen, zou ik echt voor deze gaan. (En dan ook nog eens die prijs!)
Verwijderd
Mischien even aardig om te vragen:
Wat vinden jullie van het gebruik van een profiler? Is dit een noodzakelijke tool voor jullie die je minstens 1 maal per X dagen zou moeten gebruiken, of vinden jullie profilers (net zoals debuggers) totale onzin?
Wat vinden jullie van het gebruik van een profiler? Is dit een noodzakelijke tool voor jullie die je minstens 1 maal per X dagen zou moeten gebruiken, of vinden jullie profilers (net zoals debuggers) totale onzin?
Ligt een beetje aan de app waaraan je werkt denk ik. Het profilen van een reguliere GUI app vind ik een beetje onzin, hoewel je met profilers natuurlijk ook dingen als memory usage enzo kunt meten, wat altijd wel handig is. Als je echter aan applicaties werkt waarbij performance een must is, zoals bijv. games, simulaties en server-side apps, dan is een profiler essentieel om een indicatie te krijgen waar de bottleneck zit en wat je dus moet optimizen. Optimizen zonder het gebruik van een profiler heeft niet veel nut, kans is groot dat je dan aan het "mierenneuken" bent door een stukje sneller te maken wat amper aangeroepen wordt vanuit de code, of wat sowieso al niet heel erg langzaam was.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Je moet een profiler gebruiken als daar reden voor is. Gebruikt je applicatie belachelijk veel geheugen, of is die onnodig traag.. dan in een profilere gewoon de enigste oplossing. Je krijgt inzicht wie de objecten loopt aan te maken en hoeveel, wie loopt de cpu tijd te verzieken.Verwijderd schreef op 15 juni 2004 @ 19:34:
Mischien even aardig om te vragen:
Wat vinden jullie van het gebruik van een profiler? Is dit een noodzakelijke tool voor jullie die je minstens 1 maal per X dagen zou moeten gebruiken, of vinden jullie profilers (net zoals debuggers) totale onzin?
Ik zag net dat de remove(0) van een LinkedList erug veel trager is dan de removeFirst van een LinkedList. Tja.. daar was ik dus anders nooit achter gekomen.
offtopic:
LinkedList is gewoon altijd erg traag Alarmnummer
. Gebruik nooit een LinkedList
Zijn er trouwens nog zinnige List implementaties behalve de ArrayList? Ik heb wel eens een HashList gemaakt. Maar die heeft moeite met de index vinden van een object (net zo traag als een LinkedList)
LinkedList is gewoon altijd erg traag Alarmnummer
[ Voor 57% gewijzigd door Macros op 15-06-2004 20:17 ]
"Beauty is the ultimate defence against complexity." David Gelernter
Ik heb die hele list er intussen al uitgeknikkerd en vervangen door een bloedsnelle ringed buffer (die ik ook nog eens cache en die intern ook niet eens onnodig objecten aanmaakt)Macros schreef op 15 juni 2004 @ 20:15:
offtopic:
LinkedList is gewoon altijd erg traag Alarmnummer. Gebruik nooit een LinkedList
Zijn er trouwens nog zinnige List implementaties behalve de ArrayList? Ik heb wel eens een HashList gemaakt. Maar die heeft moeite met de index vinden van een object (net zo traag als een LinkedList)
Wel op basis van een array hoop ik?Alarmnummer schreef op 15 juni 2004 @ 21:02:
[...]
Ik heb die hele list er intussen al uitgeknikkerd en vervangen door een bloedsnelle ringed buffer (die ik ook nog eens cache en die intern ook niet eens onnodig objecten aanmaakt)
"Beauty is the ultimate defence against complexity." David Gelernter
Nee op basis van een linkedlist natuurlijk!! (uhh.. voor de anderen.. een array (2 zelfs doordat in de queue altijd per 2 termen liggen opgeslagen))
[ Voor 12% gewijzigd door Alarmnummer op 15-06-2004 21:26 ]
Verwijderd
Waarom gebruik je dan geen HashMap?Macros schreef op 15 juni 2004 @ 20:15:
offtopic:
LinkedList is gewoon altijd erg traag Alarmnummer. Gebruik nooit een LinkedList
Zijn er trouwens nog zinnige List implementaties behalve de ArrayList? Ik heb wel eens een HashList gemaakt. Maar die heeft moeite met de index vinden van een object (net zo traag als een LinkedList)
Nou dacht ik m'n datastructuren wel te kennen, maar wat is een 'ringed buffer' voor iets ??Alarmnummer schreef op 15 juni 2004 @ 21:02:
[...]
Ik heb die hele list er intussen al uitgeknikkerd en vervangen door een bloedsnelle ringed buffer (die ik ook nog eens cache en die intern ook niet eens onnodig objecten aanmaakt)
Zeker zelf bedacht, want zelfs Google kent 'em niet...
The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'
Een HashMap is een implementatie van een Map structuur, dat is heel iets anders dan een List. Een ringed buffer is in dit geval een cyclische buffer. Het is een soort Lijst die oneindig groot is, maar als je over de grootte van de lijst heen gaat overschijft hij het 'oudste' opject. Een soort FIFO buffer.
"Beauty is the ultimate defence against complexity." David Gelernter
Verwijderd
Klopt tis een soort array, met daarin de hahwaardes van de key als index. Mocht 2 keer dezelfde hash togevoegd worden wordt er weer gebruik gemaakt van een linked list. Voordeel van een Hasmap is dat deze zeer snel is: O(1) voor het opvragen van een element. Dat is stukken beter dan O(n) voor een LinkedList.Macros schreef op 16 juni 2004 @ 10:28:
Een HashMap is een implementatie van een Map structuur, dat is heel iets anders dan een List.
Een stack met een maximale waarde dus?Macros schreef op 16 juni 2004 @ 10:28:
Een HashMap is een implementatie van een Map structuur, dat is heel iets anders dan een List. Een ringed buffer is in dit geval een cyclische buffer. Het is een soort Lijst die oneindig groot is, maar als je over de grootte van de lijst heen gaat overschijft hij het 'oudste' opject. Een soort FIFO buffer.
Verwijderd schreef op 16 juni 2004 @ 18:28:
Een stack met een maximale waarde dus?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| final public class EquationQueue {
private Term[] _leftItems;
private Term[] _rightItems;
// Size of the current queue
private int _size = 0;
// Indexes of front and back of queue in the array.
private int _front = 1;
private int _back = 0;
public EquationQueue(int length) {
_leftItems = new Term[length];
_rightItems = new Term[length];
}
public void addBack(Term leftTerm, Term rightTerm){
assert!isFull();
_size++;
_back++;
if (_back == _leftItems.length)
_back = 0;
_leftItems[_back] =leftTerm;
_rightItems[_back]=rightTerm;
}
public Term getCurrentLeft(){
assert!isEmpty();
return _leftItems[_front];
}
public Term getCurrentRight(){
assert !isEmpty();
return _rightItems[_front];
}
public void removeFront(){
assert !isEmpty();
_size--;
_front++;
if (_front == _leftItems.length)
_front = 0;
}
public boolean isFull() {
return _size == _leftItems.length;
}
public void clear(){
_size = 0;
_front = 1;
_back = 0;
}
public boolean isEmpty() {
return _size == 0;
}
} |
Wilt niet zeggen dat die code van Alarmnummer duidelijk is, maar volgens mij wel correct
"Beauty is the ultimate defence against complexity." David Gelernter
Verwijderd
Moet dit weer niet worden afgesplitst richting het fameuze "Array/ArrayList/Vector/Hashmap?"-topic?
Nope.Verwijderd schreef op 16 juni 2004 @ 21:13:
Moet dit weer niet worden afgesplitst richting het fameuze "Array/ArrayList/Vector/Hashmap?"-topic?
Ik maakte alleen een opmerking over het feit dat ik met die profiler achter info ben gekomen waar ik gewoonlijk nooit achter was gekomen. Dat voorbeeldje hierboven was puur omdat iemand erom vroeg.
Ik ben intussen van 2000/3000 LIPS (Logical Inference Per Second) al naar een 100.000 LIPS gegaan. Dit komt oa door JProfiler doordat ik goed inzicht krijg op bottlenecks en veel efficientere structuren kan gebruiken (vaak custom made).
Ik moet nu minimaal nog een factor 10 versnellen (eigen eis) en ik kan me gelukkig nog vergrijpen aan allerlei compiletechnische optimalisaties.
[edit]
En nu zit ik op 150K
[edit2]
186K
Ik moet nu minimaal nog een factor 10 versnellen (eigen eis) en ik kan me gelukkig nog vergrijpen aan allerlei compiletechnische optimalisaties.
[edit]
En nu zit ik op 150K
[edit2]
186K
[ Voor 9% gewijzigd door Alarmnummer op 17-06-2004 21:45 ]
Verwijderd
Beetje offtopic, maar uhh, gebruik je nu zelf ook prolog om te programmeren?Alarmnummer schreef op 17 juni 2004 @ 13:26:
Ik ben intussen van 2000/3000 LIPS (Logical Inference Per Second) al naar een 100.000 LIPS gegaan. Dit komt oa door JProfiler doordat ik goed inzicht krijg op bottlenecks en veel efficientere structuren kan gebruiken (vaak custom made).
Ik moet nu minimaal nog een factor 10 versnellen (eigen eis) en ik kan me gelukkig nog vergrijpen aan allerlei compiletechnische optimalisaties.
Voor bepaalde problemen wel ja. We zijn nu bezig met een stemwijzer waarachter een expertsysteem zit. En dit expertsysteem is geschreven in Prolog (mbv metainterpreter/metaprogramma dus niet rechtstreeks in Prolog). Prolog is voor sommige problemen net ff wat handiger dan Java.Verwijderd schreef op 17 juni 2004 @ 14:36:
Beetje offtopic, maar uhh, gebruik je nu zelf ook prolog om te programmeren?
En weer omhoog
Ik heb een budget gekregen voor het aanschaffen van een profiler. JProfiler is tot nu toe erg handig geweest, omdat die een aantal zere plekken op de server heeft blootgesteld.
Daarmee is het nut ook wel duidelijk geworden voor me en wil ook alle opties afwegen voordat ik er een koop.
Ik gebruikt Eclipse als IDE, JBoss & OC4J als app server, Java 5 en Oracle10g als DB
Tot nu toe heb ik alleen JProfiler geprobeerd -> erg onder de indruk, goed uitgewerkt
JDBInsight en Yourkit Profiler worden ook aangeraden, maar heeft iemand hier ervaring mee?
Ik heb een budget gekregen voor het aanschaffen van een profiler. JProfiler is tot nu toe erg handig geweest, omdat die een aantal zere plekken op de server heeft blootgesteld.
Daarmee is het nut ook wel duidelijk geworden voor me en wil ook alle opties afwegen voordat ik er een koop.
Ik gebruikt Eclipse als IDE, JBoss & OC4J als app server, Java 5 en Oracle10g als DB
Tot nu toe heb ik alleen JProfiler geprobeerd -> erg onder de indruk, goed uitgewerkt
JDBInsight en Yourkit Profiler worden ook aangeraden, maar heeft iemand hier ervaring mee?
500 MLips op mijn werk...Alarmnummer schreef op donderdag 17 juni 2004 @ 13:26:
Ik ben intussen van 2000/3000 LIPS (Logical Inference Per Second) al naar een 100.000 LIPS gegaan. Dit komt oa door JProfiler doordat ik goed inzicht krijg op bottlenecks en veel efficientere structuren kan gebruiken (vaak custom made).
Ik moet nu minimaal nog een factor 10 versnellen (eigen eis) en ik kan me gelukkig nog vergrijpen aan allerlei compiletechnische optimalisaties.
[edit]
En nu zit ik op 150K
[edit2]
186K![]()
[ Voor 7% gewijzigd door Alarmnummer op 04-05-2005 11:00 ]
Hehe...zit je je eigen werk even op te geilen?Alarmnummer schreef op woensdag 04 mei 2005 @ 10:59:
[...]
500 MLips op mijn werk...en er kan nog een hele zooi geoptimaliseerd worden, oa indexeren op de argumenten.
Verwijderd
En hoeveel tijd en geld heeft het ondertussen gekost?Alarmnummer schreef op woensdag 04 mei 2005 @ 10:59:
[...]
500 MLips op mijn werk...en er kan nog een hele zooi geoptimaliseerd worden, oa indexeren op de argumenten.
Of opgeleverd ...Verwijderd schreef op woensdag 04 mei 2005 @ 11:57:
[...]
En hoeveel tijd en geld heeft het ondertussen gekost?
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Er bestaat ook een Eclipse subproject die zich met dit soort zaken bezig houdt: Eclipse Test & Performance Tools Platform.
Heb het toevallig sinds een paar dagen in gebruik, dus beperkte ervaring nog. Er zijn drie modi van de plugin: code coverage, execution history en memory analysis. Je kan per run slechts een modus gebruiken, wat dus een nadeel is: het is of cpu tijd bekijken of geheugen. Bovendien is het vrij traag.
Goede punten dan, het is overzichtelijk geintegreerd in Eclipse en het is gratis.
Heb het toevallig sinds een paar dagen in gebruik, dus beperkte ervaring nog. Er zijn drie modi van de plugin: code coverage, execution history en memory analysis. Je kan per run slechts een modus gebruiken, wat dus een nadeel is: het is of cpu tijd bekijken of geheugen. Bovendien is het vrij traag.
Goede punten dan, het is overzichtelijk geintegreerd in Eclipse en het is gratis.
"Ik heb zo veel soep gegeten, dat kan een mens niet aan. Ik heb zo veel soep gegeten, kan bijna niet meer staan. Ik zat daar maar te slurpen achter die grote kop en als ik bijna klaar was, dan schepten ze weer op!" (Hans Teeuwen)
Het is voornamelijk mijn eigen tijd dat daar in is komen te zitten. Ik heb op mijn werk alleen een betere computer staanVerwijderd schreef op woensdag 04 mei 2005 @ 11:57:
[...]
En hoeveel tijd en geld heeft het ondertussen gekost?
En check verder hetgeen wat ik heb geoptimaliseerd. Het is instructieset van Prolog (geschreven in Java) en als je dit serverside wilt draaien en interessante dingen wilt doen, dan zul je wel een verdomd snelle implementatie moeten hebben als je veel data wilt verwerken. Met prolog krijg je namelijk bliksemsnel combinatorische explosies.
[ Voor 48% gewijzigd door Alarmnummer op 04-05-2005 12:20 ]
JProbe bestaad nogsteeds (heb vorige week nog een mailing binnen gekregen met een CD). En deze is opzich erg uitgebreid en erg mooi.
De site is inderdaad wat traag zeg maar :-)
Verder heb ik alleen ervaring met een open source profiler maar deze kan niet met Applicatie Servers omgaan en hij heeft erg weinig views.
De site is inderdaad wat traag zeg maar :-)
Verder heb ik alleen ervaring met een open source profiler maar deze kan niet met Applicatie Servers omgaan en hij heeft erg weinig views.
3015 Wp-z 5360 Wp-nno op 2 x SMA-SB3600 TL-21, Warmtepomp: ERSC-VM2CR2 / PUHZ-SHW140 YHA, WTW Q350, EV Kia Ev6 GT-Line
Verwijderd
Ik vermoed dat het moet zijn O(log(n)) ipv O(1), maar dat is nog steeds zeer efficiënt.Verwijderd schreef op woensdag 16 juni 2004 @ 18:28:
[...] Voordeel van een Hasmap is dat deze zeer snel is: O(1) voor het opvragen van een element. Dat is stukken beter dan O(n) voor een LinkedList. [...]
Is er toevallig iemand die iets interessants kan zeggen over het gebruik van profilers in serverside omgevingen, bijv. Tomcat? In client side omgeving heb ik goede ervaring met verschillende profilers om heel gericht de pijnpunten in een programma aan te pakken en de rest ongemoeid te laten. In een webapplicatie vind ik het lastig om het resourceverbruik van de webapplicatie te scheiden van het resourceverbruik van de servercontext.
Eerder O(c).. c = constant, als je goeie verdeling hebt. Jij beschrijft bv de complexiteit van zoeken een boomstructuur.Verwijderd schreef op woensdag 04 mei 2005 @ 20:53:
[...]
Ik vermoed dat het moet zijn O(log(n)) ipv O(1), maar dat is nog steeds zeer efficiënt.
Check jdbinsight. En verder hebben de meeste profilers ondersteuning voor applicatieservers.Is er toevallig iemand die iets interessants kan zeggen over het gebruik van profilers in serverside omgevingen, bijv. Tomcat? In client side omgeving heb ik goede ervaring met verschillende profilers om heel gericht de pijnpunten in een programma aan te pakken en de rest ongemoeid te laten. In een webapplicatie vind ik het lastig om het resourceverbruik van de webapplicatie te scheiden van het resourceverbruik van de servercontext.
[ Voor 5% gewijzigd door Alarmnummer op 04-05-2005 20:56 ]
Ik heb ook wel eens met Rational Purify gewerkt. Werkt prima maar is
wel van Rational (IBM) en dus heel duur.
wel van Rational (IBM) en dus heel duur.
O(1) betekent dat de complexiteit beschreven kan worden als een constante maal 1, dus O(c) is hetzelfde als O(1). Voor meer info : http://en.wikipedia.org/wiki/Big_O_notation
Alarmnummer schreef op woensdag 04 mei 2005 @ 20:55:
Eerder O(c).. c = constant, als je goeie verdeling hebt. Jij beschrijft bv de complexiteit van zoeken een boomstructuur.
.
Zeurkouswindancer schreef op donderdag 05 mei 2005 @ 21:27:
O(1) betekent dat de complexiteit beschreven kan worden als een constante maal 1, dus O(c) is hetzelfde als O(1). Voor meer info : http://en.wikipedia.org/wiki/Big_O_notation
[...]
Pagina: 1