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

Langage Java Discussion :

The code of method . is exceeding the 65535 bytes limit


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut The code of method . is exceeding the 65535 bytes limit
    Hello la team developpez.net,

    Je travaille avec Talend Open Studio sur un projet en java et un job génère une méthode un peu trop importante et entraîne l'erreur de compilation suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The code of method tRunJob_1Process(Map<String,Object>) is exceeding the 65535 bytes limit
    J'ai commencé à taper dans les templates de génération de code afin de factoriser des lignes dans des méthodes, cela m'a permis de repousser le problème, mais évidemment en continuant à développer le job, l'erreur est réapparue.

    Donc aujourd'hui je cherche des pistes d'amélioration pour savoir lesquelles peuvent être efficaces. Est-ce que la taille des noms de variable peut influer sur la taille de la méthode compilée?

    J'ai notamment le bloc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (valueMap_tFileOutputMSXML_1.get("CAR_SERIES") != null) {
    	nestXMLTool_tFileOutputMSXML_1.setText(group0__0_tFileOutputMSXML_1,
    		valueMap_tFileOutputMSXML_1.get("CAR_SERIES"));
    }
    Qui se répète plus de 200 fois dans avec des chaînes différentes. Malgré le peu de lignes générées serait-il avantageux de créer une méthode du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void winSpace(String key, Element elem){
    if (valueMap_tFileOutputMSXML_1.get(key) != null) {
       nestXMLTool_tFileOutputMSXML_1.setText(elem,
    		valueMap_tFileOutputMSXML_1.get(key));
    }
    ?

    (Evidemment c'est tapé en live et pas forcément exempt d'erreurs)

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Avec Talend, il n'est malheureusement pas possible d'encapsuler le code dans des méthodes : tes modifications seraient perdues à la moindre modification de ton job.

    Effectivement, je te confirme que les templates Talend ne sont pas réputés pour leur taille modérée...

    Mais je suppose que ce job est constitué de plusieurs parties indépendantes, avec des enchaînements ("OnSubjobOK").

    Plutôt que de mettre la suite des traitements dans le même job, mets-les dans un autre job. Le "OnSubjobOK" pointe alors vers un "tRunJob" qui lance le deuxième job : ainsi, tes enchaînements sont préservés et chaque job passe en-dessous de la limitation de taille.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut
    Non mes optimisations de code dans des méthodes ne sont pas perdue puisque je ne les fais pas au niveau code généré mais au niveau des templates de génération => elles sont effectives quel que soit le job qui utilise le composant tFileOutputMSXML.

    Le job n'est pas très complexe dans sa structure puisqu'il s'agit de créer un fichier XML à partir de plusieurs requêtes, néanmoins j'en suis à 16 entrées sur le composant et il montre ses limites (déjà repoussées une fois).

    Donc ce que je cherche c'est des renseignements sur la façon d'économiser de la place dans le bytecode: j'imagine que l'indentation n'a aucune influence sur le code, que le nom des variable n'en a que très peu, mais je peux me tromper.

    Je vais vérifier si le code redondant prend plus de place que l'appel de méthode...

  4. #4
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    dans le bytecode le nom des variable interne est perdu.
    donc a pars reusir a "decouper" ta method en petit bout je ne vois pas. (bon apres je ne conais pas du tous Talend donc je ne peu pas trop aider :s

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par bleporini Voir le message
    Est-ce que la taille des noms de variable peut influer sur la taille de la méthode compilée?
    Les variable non, mais les champs public/protégés oui, car il me semble que leur nom apparait en toutes lettres dans le bytecode.

  6. #6
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Les variable non, mais les champs public/protégés oui, car il me semble que leur nom apparait en toutes lettres dans le bytecode.
    oui les noms des attributs, des méthodes, la classe mère, de la classe et des ses interface apparaissent en toute lettre dans la constant pool

    Edit: mais bon c'est quelque octet est ca ne fait pas partie du code de la méthode

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut
    Non carrément pas, il faut que je cible les itérations de code et les range dans une méthode.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/05/2015, 12h47
  2. Réponses: 1
    Dernier message: 25/05/2011, 00h49
  3. Réponses: 2
    Dernier message: 31/01/2008, 12h58
  4. Réponses: 1
    Dernier message: 26/07/2007, 18h29
  5. Cannot make a static reference to the non-static method
    Par semaj_james dans le forum Langage
    Réponses: 5
    Dernier message: 12/05/2006, 00h10

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