IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Débats sur le développement - Le Best Of Discussion :

[Débat] C++ vs Java


Sujet :

Débats sur le développement - Le Best Of

  1. #421
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Ou alors tu ne maitrises pas Java aussi bien que le C+++... Les deux langages sont très différents et un code optimisé en C++ n'est pas forcément le même en Java...
    ... je fais beaucoup de Java depuis 8 ans. Je suis dans une société de service et le C++ n'y est pas populaire. Ca serait donc plutot le contraire ....

    J'hesite vraiment a t'envoyer mes sources, je suis vraiment tenté,
    avez-vous des conseils pour mettre mon code en GPL ? les entetes, quel siteweb etc

  2. #422
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par adiGuba
    Vous allouez moins de mémoire... Ok !
    Mais perso je préfère carrément ne pas m'en occuper et laisser le GC gérer tout ca. Et si j'ai des besoins spécifiques je peux toujours le tuner pour modifier son comportement
    OK, mais tu m'explique comment on fait sur un systeme comme la XBox360 ou la PS3 qui 'on que 512Mo de memoire (dont 256 reservé à la CG sur la PS3) lorsqu'on à du mal à être en dessous de 700 Mo sur PC avec une alloc standard... que ce soit la VM de Java ou celle de C#, on ne peut rien faire pour reduire le cout de l'allocation (en plus, toute classe heritant par default d'Objet, on a droit, sans forcement le vouloir a des pointeurs de fonction virtuelle, et autres attributs dont on peut très bien se passer lorsqu'on souhaite avoir un bete agregat de 3 float )
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #423
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par epsilon68
    J'hesite vraiment a t'envoyer mes sources, je suis vraiment tenté,
    J'aimerai surtout savoir dans quel domaine tu travailles

    Au fait tu utilises bien la JVM server pour tes tests de performances ???

    Citation Envoyé par bafman
    OK, mais tu m'explique comment on fait sur un systeme comme la XBox360 ou la PS3 qui 'on que 512Mo de memoire (dont 256 reservé à la CG sur la PS3) lorsqu'on à du mal à être en dessous de 700 Mo sur PC avec une alloc standard...
    Je ne comprend pas très bien ta remarque...
    De plus par défaut sur les postes clients, les applications Java démarrent en allouant 5Mo de RAM et en s'autorisant un maximum de 64Mo.


    Citation Envoyé par bafman
    que ce soit la VM de Java ou celle de C#, on ne peut rien faire pour reduire le cout de l'allocation (en plus, toute classe heritant par default d'Objet, on a droit, sans forcement le vouloir a des pointeurs de fonction virtuelle, et autres attributs dont on peut très bien se passer lorsqu'on souhaite avoir un bete agregat de 3 float )
    C# a aussi son propre GC il me semble...

    a++

  4. #424
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 259
    Points : 607
    Points
    607
    Par défaut
    Citation Envoyé par bafman
    (en plus, toute classe heritant par default d'Objet, on a droit, sans forcement le vouloir a des pointeurs de fonction virtuelle, et autres attributs dont on peut très bien se passer lorsqu'on souhaite avoir un bete agregat de 3 float )
    En Java que ton objet ait 10 méthodes ou 50 méthodes ne change strictement rien a son occupation mémoire.
    Si tu as un objet A avec 10 méthodes et un objet B avec 50 méthodes, un seul champ int par exemple, instantier 1000 objets A ou 1000 objets B ca prendra autant de mémoire

  5. #425
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    un soft qui plante sous Windows, si tu as VC++ installé, tu vas avoir la boite de message système avec le bouton "déboguer"....sous Visual C++.
    Est-ce qu'avec tes supers IDE pour Java on peut faire la même chose ?
    J'ai des années de dévelopement avec VB6, un peu avec C++ Builder ,ces IDE ne sont pas aussi costaud que VC++...
    Quant à JBuilder le doute est énorme...

  6. #426
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    La liste d'ici ce ne sont pas des softs commerciaux mais GPL !
    http://www.developpez.net/forums/sho...rogrammes+java
    Quand je parle de softs commerciaux c'est Office les Antivirus les softs pour dessiner sa maison ou je ne sais quoi ,Autocad...

    Et puis moi je n'ai pas cette logique de partie pris: je suis chef de projet je prends telle tech comme Java ou telle tech comme C++ selon les besoins
    Si j'ai un projet de gestion bancaire je vais prendre Java ou .NET
    Si j'ai un projet ou les performances sont critiques je vais prendre C++

  7. #427
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par kpouer
    En Java que ton objet ait 10 méthodes ou 50 méthodes ne change strictement rien a son occupation mémoire.
    Si tu as un objet A avec 10 méthodes et un objet B avec 50 méthodes, un seul champ int par exemple, instantier 1000 objets A ou 1000 objets B ca prendra autant de mémoire

    il ne faut pas oublier de signaler :
    + les méthodes appartiennent à une classe et pas à chaque instance
    + le chargement paresseux en java permet d'économiser pas mal de place quand même
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  8. #428
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par adiGuba
    Je ne comprend pas très bien ta remarque...
    De plus par défaut sur les postes clients, les applications Java démarrent en allouant 5Mo de RAM et en s'autorisant un maximum de 64Mo.
    le problème, c'est que etant donné la quantité de données à traiter (texture, map, entitées et autres), un moteur se basant sur une VM est juste impossible à réaliser sur des systèmes comme la X360 ou la PS3 car un ne peut pas avoir un control assez fin de la taille des structures de données (à cause nottament du surcout de l'heritage systematique de Object qui rajoute un padding memoire trop important pour une bête classe de vecteur comme dans mon exemple précédent.
    Citation Envoyé par adiGuba
    C# a aussi son propre GC il me semble...
    en fait, j'evoquait le C# car il peut tourner sur la X360 et utilise un VM comme Java
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  9. #429
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 259
    Points : 607
    Points
    607
    Par défaut
    Citation Envoyé par Mat.M
    un soft qui plante sous Windows, si tu as VC++ installé, tu vas avoir la boite de message système avec le bouton "déboguer"....sous Visual C++.
    Est-ce qu'avec tes supers IDE pour Java on peut faire la même chose ?
    J'ai des années de dévelopement avec VB6, un peu avec C++ Builder ,ces IDE ne sont pas aussi costaud que VC++...
    Quant à JBuilder le doute est énorme...
    Activer le debug oui c'est possible en Java et s'y connecter quand on veut.
    Par contre je n'ai jamais parlé de JBuilder

  10. #430
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Pour résumer :
    Si j'ai un projet de gestion bancaire je vais prendre Java ou .NET
    Si j'ai un projet ou les performances sont critiques je vais prendre C++

  11. #431
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    j'aimerais signalé que RTJS répond certainement à ce type de contraintes pour l'embarqué (et le temps réel au passage... )
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  12. #432
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    c'est vrai que les applications clientes payantes en java ne sont pas (encore ) legions, mais il y en a, et il y en a qui arrivent
    trendmicro par exemple, le scan online est une application java

    wakfu, prochaine version de dofus pour les connaisseurs, sera en java (passage de flash a java pour la partie cliente au fait)

    tribaltrouble, un bon jeu en java (3d)

    thinkfree office a je crois atteinds un nombre non négligeable de souscriptions

    tu trouveras sur swing sightings un bon nombre d'applications en swing dont un bon paquet payantes.

    maintenant, et je suis d'accord, il manque en java une bonne grosse killer app tres grand publique.

  13. #433
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par epsilon68
    J'hesite vraiment a t'envoyer mes sources, je suis vraiment tenté,
    avez-vous des conseils pour mettre mon code en GPL ? les entetes, quel siteweb etc


    la licence GPL devrait légalement protéger tes sources d'une copie abusive par un éditeur qui souhaite en tirer un profit commercial sans redistribuer ses apports à la communauté... mais pas d'un éditeur qui va un peu toucher à tes sources, rendre le produit GPL et vendre des binaires

    au passage, on peut certainement les héberger via le forum "Mon Projet"

    nb: on s'éloigne du sujet... on peut en parler par MP si tu le souhaites
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  14. #434
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Par rapport à ce qu'on a dit sur la place mémoire occupé par les objets en Java, en plus du fait que peu importe le nombre de méthodes d'une classe, la place mémoire occupée par un objet de cette classe est constante (fonction du nombre de ses variables d'instances), mais en plus de ça dans une classe quand on importe une classe, un package ou même la totalité de la librairie, le temps de chargement et la place mémoire occupée ne varie pas. En C++ ce n'est selon moi pas le cas.

    Une des forces de Java, en plus de la portabilité que tout le monde a mtntionné, c'est la richesse de ses apis, rien que les standarts il y en a déjà trop pour en connaître la moitié, on rajoutte à cela Jakarta,... et on sait vraiment tout faire.

    Une des principales faiblesses du Java est de sa récursivité assez faible, compte tenu qu'on travaille sur la JVM, et le fait que quoiqu'on en dise, ce n'est pas si portable que ça. Essyez un peu de développer une belle GUI sous Windows, elle est super, vous la lancez sous Linux elle s'exécute toujours mais
    les espacements, tailles des composants ont varié, du coup si votre fenêtre ne peut être agrandie, c'est pas top. Ce n'est qu'un exemple parmi d'autres similaires, ça s'exécute, mais c'est moins bien...

    A mon sens les avantages du C++ sont qu'il est d'abord plus rapide en grande partie parce que le programme s'exécute directement sur la machine et non pas via un autre programme, la JVM.

    Une autre force du C++ est que, comme le C, il permet de faire des "choses" beaucoup plus basses au niveau de la machine.


    Enfin voilà y a de quoi faire 10 conférences avec un seujet tel que celui-ci...
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  15. #435
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par kpouer
    En Java que ton objet ait 10 méthodes ou 50 méthodes ne change strictement rien a son occupation mémoire.
    Si tu as un objet A avec 10 méthodes et un objet B avec 50 méthodes, un seul champ int par exemple, instantier 1000 objets A ou 1000 objets B ca prendra autant de mémoire
    le problème n'est pas s'avoir 10,20,30 etc methodes dans la classe, c'est d'avoir par defaut des fonction virtuelles (donc un "pointeur" vers une table de fonction virtuelle dans chaque instance) qui augmente la taille de la structure. et parfois, c'est non negligeable. pour prendre (encore une fois ) l'exemple du vecteur 3D, le pointeur vers la table de fonction virtuelle va quand même nous augmenter la taille memoire de 4 octet, soit 33% d'augmentation, ce qui finit par faire beaucoup quand on manipule des modeles 3D de plusieurs milliers de vertex (+ normale + coordonnées de texture + espace tengeant etc...) et ca, on ne peut pas le maitriser en Java
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  16. #436
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par adiGuba
    Au fait tu utilises bien la JVM server pour tes tests de performances ???
    JVM client 30 secondes
    JVM server 22 secondes
    C++ 13 secondes

  17. #437
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par kpouer
    En Java que ton objet ait 10 méthodes ou 50 méthodes ne change strictement rien a son occupation mémoire.
    Si tu as un objet A avec 10 méthodes et un objet B avec 50 méthodes, un seul champ int par exemple, instantier 1000 objets A ou 1000 objets B ca prendra autant de mémoire
    en C++ on peut voir l'occupation memoire augmente legerement si tu utilises des fonctions virtuelles, he oui la table virtuel d'appel de fonction. Ce surcout est obligatoire en Java. Le C++ a ete concu pour ne pas penaliser si on n'a pas besoin de telle fonctionnalité. Si maintenant tu manipules des millions de points, alors tu fais gaffe au moindre octet et tu eviteras d'utiliser des fonctions virtuelles.

    EDIT: mince c'est déjà très bien expliqué dans les post d'avant que je ne sais pas pourquoi j'avais pas bien lu

  18. #438
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 259
    Points : 607
    Points
    607
    Par défaut
    Citation Envoyé par bafman
    le problème n'est pas s'avoir 10,20,30 etc methodes dans la classe, c'est d'avoir par defaut des fonction virtuelles (donc un "pointeur" vers une table de fonction virtuelle dans chaque instance) qui augmente la taille de la structure. et parfois, c'est non negligeable. pour prendre (encore une fois ) l'exemple du vecteur 3D, le pointeur vers la table de fonction virtuelle va quand même nous augmenter la taille memoire de 4 octet, soit 33% d'augmentation, ce qui finit par faire beaucoup quand on manipule des modeles 3D de plusieurs milliers de vertex (+ normale + coordonnées de texture + espace tengeant etc...) et ca, on ne peut pas le maitriser en Java
    J'ai du mal a comprendre de quoi tu parles. En Java il n'existe pas de méthodes "virtuelles" mais j'imagine que tu veux parler de méthodes "abstract". Et dans ce cas je ne vois toujours pas de quelle table de méthodes virtuelles tu parles.
    Lorsqu'une classe a une méthode abstraite, elle ne peut pas être instantiée. Seul une sous classe qui implémente toutes les méthodes abstraites peut être instantiée, du coup il n'y a aucune raison d'avoir une quelconque table de méthodes virtuelles.

  19. #439
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par kpouer
    Seul une sous classe qui implémente toutes les méthodes abstraites peut être instantiée, du coup il n'y a aucune raison d'avoir une quelconque table de méthodes virtuelles.
    Et si une autre classe les réimplemente, il te faut bien une vtable...

    En java, tous les méthodes sont virtuelles, abstrait signifie virtuel pure en C++.
    Il est possible de faire la distinction en C++ entre virtuelle et non virtuelle pour des raisons de performances.
    Je ne répondrai à aucune question technique en privé

  20. #440
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 259
    Points : 607
    Points
    607
    Par défaut
    Citation Envoyé par millie
    Et si une autre classe les réimplemente, il te faut bien une vtable...

    En java, tous les méthodes sont virtuelles, abstrait signifie virtuel pure en C++.
    Il est possible de faire la distinction en C++ entre virtuelle et non virtuelle pour des raisons de performances.
    Ben je vais essayer de faire un exemple java :
    class A
    {
    void tutu() {...}

    void tata() {...}
    }

    On aura donc 2 liens de la classe A vers ses méthodes, donc 2 x 32 bits

    class B extends A
    {
    // on surcharge tutu()
    void tutu() {...}
    }

    B aura lui un unique lien vers sa méthode surchargée donc une seule fois 32 bits. Et si on instantie B 50000 fois ca fera pas 50000 fois 32 bits non ?

Discussions similaires

  1. [Débat] Technologie .NET vs JAVA
    Par neo.51 dans le forum Débats sur le développement - Le Best Of
    Réponses: 1047
    Dernier message: 14/01/2019, 16h15
  2. [Débat] .NET vs JAVA/J2EE
    Par tssi555 dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/12/2008, 07h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo