java vs php de référence
Je suis un développeur php, mais récemment eu à écrire la même application deux fois, une fois en php et une fois en java, une classe, je suis prise à l'école. Par curiosité j'ai fait un test sur les deux et a constaté que la version de java a été de 2 à 20 fois plus lent que la version de php si la base de données est accessible, et de 1 à 10 fois plus lent sans DB accès. Je vois deux possibilités:
- I suck at java.
- Je peux enfin dire aux gens d'arrêter de pleurnicher sur php.
J'ai posté ma servlet code ici. Je ne veux pas tatillon pleurnicher, ou des améliorations mineures, mais quelqu'un peut-il voir un horrible flagrante problème de performance? Ou quelqu'un peut-il expliquer pourquoi Java se sent comme il doit sucer?
J'ai toujours entendu des gens dire que java est plus rapide et plus évolutif que php, et surtout mon professeur, il en est convaincu, mais le plus de demandes qui sont faites, le ralentissement de java se. php ne semble pas être affectée par l'augmentation des charges, mais reste constante.
C'est ce que je dis. Tout le monde sur internet raves que java est sooooo beaucoup plus rapide, mais sur mon serveur, il sucketh à un degré très élevé en comparaison de php. Avez-vous lu la question?
Une troisième possibilité est que vous n'avez pas les mesures de la performance correctement.
Il y a un gros problème en faisant des mesures de performance comme ça; lire sur "de la JVM de chauffe". Aussi, votre Java crée une nouvelle connexion DB pour chaque demande; lire sur "le pool de connexions JDBC".
Il va montrer qu'un programme écrit dans la langue de votre choix peut être beaucoup plus rapide qu'un pas si bien programme écrit dans un langage que les autres ont à dire est plus rapide. Il y a un argument similaire avec Java vs C++ de la performance.
OriginalL'auteur regality | 2011-02-12
Vous devez vous connecter pour publier un commentaire.
Maturité d'applications web Java Servlet utilisation d'un pool de connexions JDBC. L'établissement d'une nouvelle connexion sera de loin le plus grand coût que vous payez dans le temps.
Appel
Class.forName
pour chaque tentative pour obtenir la connexion sera également provoquer une inutile de ralentir.JVM tuning pourrait également être un facteur. Dans un environnement d'entreprise de la JVM de la mémoire et, éventuellement, GC configurations être réglé et ajusté pour atteindre un équilibre souhaitable entre la réactivité et l'utilisation des ressources.
De Stephen C, la JVM dispose également d'un concept, d'une sorte de "réchauffer".
Tout ce que dit, je n'ai aucune idée de comment PHP compare à Java et je me sens les deux langues offrent d'excellentes solutions pour séparer les non-ensembles disjoints de besoins.
OriginalL'auteur
Basé sur les pas d'info (où les meilleures décisions sont prises), ma conjecture est que les
Class.forName("com.mysql.jdbc.Driver");
dansgetConnection()
est le grand timesink.La création d'un
new String
dans importFile lorsque lechar[]
peut être passé à l'extérieur.println est en me coupant les cheveux en quatre.L'appel de
Class.forName(...)
plusieurs fois pour le même nom de classe, c'est du gaspillage, mais il n'est pas aussi cher que vous pouvez l'imaginer, et il est peu probable d'être un goulot d'étranglement dans ce cas. L'une des premières choses que le chargeur de classe n'est pour voir si il a déjà chargé la classe. Si c'est le cas, il renvoie simplement précédemment chargés de Classe.OriginalL'auteur typo.pl
Votre test semble refléter charge initiale moreso que l'état d'équilibre de la performance. Essayez de faire le non-DB tests plusieurs fois dans une boucle (de sorte que chaque test wold exécuter le code plusieurs fois) et de regarder la relation linéaire entre l'exécution et le nombre d'itérations. Je soupçonne que le coût différentiel pour le java est plus faible que celui de php
OriginalL'auteur Foo Bah