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

2D Java Discussion :

Repaint() qui me fait une fuite de memoire


Sujet :

2D Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut Repaint() qui me fait une fuite de memoire
    Bonsoir,


    Mon application fonctionne mais j'ai un petit soucis de memoire.

    elle consomme au demarrage 110mo et ca augmente petit a petit jusqua se stabile a 400, 450mo au bout d'une vingtaine de minute et generalement sa suit par un ralentissement de mon pc et l'appi s'arrete.

    En cherchant dans mon code, j'arrive a arrete le probleme de la memoire qui augmente mais je perd toute l'interface de mon application.

    C'est a dire que j'ai les fonction lié a mes touche mais je n'es pas les changement de texte, animation qui vont avec.


    Voici une partie du code, c'est le "repaint" qui me pose soucis a priori, si je l'enleve plus de fuite de memoire, mais plus d'animation. XD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
      private Main() throws IOException {
            setLocationRelativeTo(null);
            setUndecorated(false);
            setSize(616, 349);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Action action = new Action();
            setContentPane(action);
            setIconImage(new ImageIcon("src/images/icone.gif").getImage());
            setTitle("R1beLlu");
            setLocationRelativeTo(null);
            setAlwaysOnTop(true);
            setResizable(false);
            setUndecorated(true);
            setBackground(new Color(0, 0, 0, 0));
            setVisible(true);
     
           MouseListener.executorService.execute(() -> {
               while (!MouseListener.executorService.isShutdown()) {
                   action.repaint();                                                                                                           //le probleme est ici
                   try {
                       Thread.sleep(50);
                   } catch (Exception e) {
                       e.printStackTrace();
                   }
               }
           });
     
     
     
           try {
     
                setupConfigs();
     
                setupEvents();
            } catch (NativeHookException ex) {
                System.exit(1);
            }
     
            addMouseListener(new MouseAdapter() {
     
                public void mousePressed(MouseEvent e) {
                    posX = e.getX();
                    posY = e.getY();
                }
            });
     
            addMouseMotionListener(new MouseMotionAdapter() {
     
                public void mouseDragged(MouseEvent e) {
                    int depX = e.getX() - posX;
                    int depY = e.getY() - posY;
                    setLocation(getX() + depX, getY() + depY);
                }
            });

    Une petite idee de comment pallier le probleme?


    Merci


    Fred

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 087
    Par défaut
    Difficile a dire sans voir la classe Action et ce qu'elle fait dans le paint().
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    j'ai trouve le soucis,

    merci

    Fred

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 087
    Par défaut
    N hésite pas a partager ta solution pour les autres personnes qui pourraient rencontrer le meme problème.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    Alors c'est louche mais ca fonctionne....

    en faite ma "fuite de memoire" s'arrete d'elle meme a 400 mo utilise et mon programme fonctionne toujours

    J'ai essaye de modifie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      MouseListener.executorService.execute(() -> {
     
                while (!MouseListener.executorService.isShutdown()) {
     
                   action.repaint();
                    try {
                        Thread.sleep(50);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });

    en augmentant ou baissant la valeur et ca fais que je monte plus ou moins vite a 400 mo de memoire utilise.

    Et aussi, 50 est la meilleur valeur, car si je baisse ou augmente, mon utilisation processeur qui est de 0.4% A 50 monte a 16% d'utilisation.

    La classe action regroupe tout le graphisme de mon appli en swing .

    Si je retire le "repaint" mon programme marche mais je n'es plus les changement de couleur des boutons etccc, ca reste fige sauf si je glisse ma

    fenetre sur mon deuxieme ecran, la ca change....

    je suis encore en train de travaille la dessus en esperant trouve une solution.


    Probleme etrange, solution etrange

    Merci

    Fred

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 890
    Billets dans le blog
    53
    Par défaut
    Un ExecutorService statique dans un MouseListener qui fait une boucle infinie ? Ça sent l'architecture bien propre ça encore...

    Encore une fois on ne sait pas ce que tu fais dans ton code de dessin donc on ignore si tu pense a appeler dispose() sur tes Graphics2D temporaires (si jamais tu en as créés), si tu tiens compte du clip (apparemment pas car tu sembles faire un repaint() global sur toute la surface et non pas juste sur la zone modifiée), ni si tu crée 45.000 objets dans ce code de rendu ou si au contraire tu réutilises des objets déjà pré-alloués.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    alors, j'ai reussi a regule l'utilisation de la memoire avec ceci : je l'es mis ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     public Main() throws IOException {
            setLocationRelativeTo(null);
            setUndecorated(false);
            setSize(616, 349);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Action action = new Action();
     
            setContentPane(action);
            setIconImage(new ImageIcon("src/images/icone.gif").getImage());
            setTitle("R1beLlu");
            setLocationRelativeTo(null);
            setAlwaysOnTop(true);
            setResizable(false);
            setUndecorated(true);
            setBackground(new Color(0, 0, 0, 0));
            setVisible(true);
     
    //ici le 
            System.gc();
     
     
     
            MouseListener.executorService.execute (() -> {
            while (!MouseListener.executorService.isShutdown()) {
     
                try {
                      action.repaint();
     
                      Thread.sleep(50);
                     } catch (Exception e) {
                       e.printStackTrace();
                   }
              }
            });


    J'ai essaye de supprime la "while" pour teste,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      MouseListener.executorService.execute (() -> {
            while (!MouseListener.executorService.isShutdown()) {
     
                try {
                      action.repaint();
     
                      Thread.sleep(50);
                     } catch (Exception e) {
                       e.printStackTrace();
                   }
              }
            });
    je suis stable niveau mémoire, mon code fonctionne mais je n'es pas d'animation.



    Voici ma classe Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    import javax.imageio.ImageIO;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
     
    public class Action extends JComponent {
     
     
     
     
     
      String path1 = "src/images/ribellu.png";
      BufferedImage image1 = ImageIO.read(new File(path1));
     
     
     
        Font myFont = new Font("Serif", Font.BOLD, 30);
        Font myFont1 = new Font("Arial arrondi MT Bold", Font.BOLD, 10);
        Font myFont2 = new Font("Arial arrondi MT Bold", Font.BOLD + Font.ITALIC, 8);
     
        Font myFont3 = new Font("Serif", Font.BOLD, 24);
        Font myFont4 = new Font("Arial arrondi MT Bold", Font.BOLD, 9);
        Font myFont5 = new Font("Arial arrondi MT Bold", Font.BOLD + Font.ITALIC, 6);
     
        Font myFont6 = new Font("Serif", Font.BOLD, 18);
        Font myFont7 = new Font("Arial arrondi MT Bold", Font.BOLD, 8);
        Font myFont8 = new Font("Arial arrondi MT Bold", Font.BOLD + Font.ITALIC, 4);
     
        Font myFont9 = new Font("Serif", Font.BOLD, 12);
        Font myFont10 = new Font("Arial arrondi MT Bold", Font.BOLD, 7);
        Font myFont11 = new Font("Arial arrondi MT Bold", Font.BOLD + Font.ITALIC, 2);
     
     
        public Action() throws IOException {
     
        }
     
        @Override
     
        protected void paintComponent(Graphics g2) {
     
            super.paintComponent(g2);
            if (g2 instanceof Graphics2D) {
                switch (Main.size) {
     
                    case SIZE1:
                        if (Main.Overlay) {
     
     
     
     
                            g2.setColor(Color.gray);
                            g2.fillRoundRect(0, 0, 600, 310, 30, 30);
                            g2.setColor(Color.black);
                            g2.fillRoundRect(5, 5, 590, 300, 30, 30);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 45, 312, 40, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 95, 312, 40, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 144, 312, 40, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 192, 312, 40, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 240, 312, 40, 10, 10);
     
     
                            int x = (getWidth() - image1.getWidth()) / 2;
                            int y = (getHeight() - image1.getHeight()) / 2;
                            g2.drawImage(image1, 380, 34, this);
     
     
                            g2.setFont(myFont2);
                            g2.setColor(Color.WHITE);
                            g2.drawString("NoRecoil V.1 by R1beLlu2B copyright©   ", 225, 294);
                            g2.setFont(myFont1);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F10: Pause  F9: Resize  F8: Overlay  F7: R-Fire  F6: Arme  F5: Viseur  Num1: Slot1  Num2: Slot2 ", 97, 28);
     
     
     
     
                        }
     
     
     
                        g2.setColor(Main.enable ? Color.green : Color.RED);
                        g2.fillOval(14,18,10,10);
                        g2.setColor(Color.BLACK);
                        g2.drawRoundRect(14, 18, 10, 10, 10, 10);
                        g2.setFont(myFont);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("RapidFire :", 50, 75);
                        g2.setColor(Main.rapideFire ? Color.green : Color.RED);
                        g2.drawString(Main.rapideFire ? "ON" : "OFF", 245, 76);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Viseur :", 50, 222);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot1 :", 50, 125);
                        g2.setColor(Color.RED);
                        g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 230, 125);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot2 :", 50, 174);
                        g2.setColor(Color.BLUE);
                        g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 230, 174);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Arme :", 50, 270);
                        g2.setFont(myFont1);
                        g2.setColor(Color.WHITE);
                        g2.drawString("F12: To Quit", 31, 28);
     
     
                        switch (Main.armes) {
     
                            case ARMES1:
     
                                g2.setFont(myFont);
                                g2.setColor(Color.RED);
                                g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 230, 270);
                                break;
     
                            case ARMES2:
     
                                g2.setFont(myFont);
                                g2.setColor(Color.BLUE);
                                g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 230, 270);
                        }
     
                        switch (Main.choix) {
     
                            case CHOIX1:
                                g2.setColor(Color.GREEN);
                                g2.setFont(myFont);
                                g2.drawString(" RedDotX1", 180, 222);
                                break;
                            case CHOIX2:
                                g2.setFont(myFont);
                                g2.setColor(Color.GREEN);
                                g2.drawString("AimPointX2", 180, 222);
                                break;
                            case CHOIX3:
                                g2.setFont(myFont);
                                g2.setColor(Color.GREEN);
                                g2.drawString("  ACOGX4", 180, 222);
                                break;
     
                        }
                        break;
     
                    case SIZE2:
                        if (Main.Overlay) {
     
     
                            g2.setColor(Color.gray);
                            g2.fillRoundRect(0, 0, 550, 260, 30, 30);
                            g2.setColor(Color.BLACK);
                            g2.fillRoundRect(5, 5, 540, 250, 30, 30);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 45, 265, 30, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 85, 265, 30, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 125, 265, 30, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 165, 265, 30, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 205, 265, 30, 10, 10);
     
     
                            int x = (getWidth() - image1.getWidth()) / 2;
                           int y = (getHeight() - image1.getHeight()) / 2;
                           g2.drawImage(image1, 345, 36,  140, 210,this);
     
     
                            g2.setFont(myFont5);
                            g2.setColor(Color.WHITE);
                            g2.drawString("NoRecoil V.1 by R1beLlu2B copyright©   ", 225, 247);
                            g2.setFont(myFont4);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F10: Pause  F9: Resize  F8: Overlay  F7: R-Fire  F6: Arme  F5: Viseur  Num1: Slot1  Num2: Slot2 ", 95, 27);
     
     
     
                        }
     
     
                        g2.setColor(Main.enable ? Color.green : Color.RED);
                        g2.fillOval(14,18,9,9);
                        g2.setColor(Color.BLACK);
                        g2.drawRoundRect(14, 18, 9, 9, 10, 10);
                        g2.setFont(myFont3);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("RapidFire :", 45, 68);
                        g2.setColor(Main.rapideFire ? Color.GREEN : Color.RED);
                        g2.drawString(Main.rapideFire ? "ON" : "OFF", 207, 69);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Viseur :",45, 188);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot1 :", 45, 108);
                        g2.setColor(Color.RED);
                        g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 193, 108);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot2 :", 45, 148);
                        g2.setColor(Color.BLUE);
                        g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 193, 148);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Arme :",45, 227);
                        g2.setFont(myFont4);
                        g2.setColor(Color.WHITE);
                        g2.drawString("F12: To Quit", 31, 27);
     
     
                        switch (Main.armes) {
     
                            case ARMES1:
     
                                g2.setFont(myFont3);
                                g2.setColor(Color.RED);
                                g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 193, 227);
                                break;
     
                            case ARMES2:
     
                                g2.setFont(myFont3);
                                g2.setColor(Color.BLUE);
                                g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 193, 227);
                        }
     
                        switch (Main.choix) {
     
                            case CHOIX1:
                                g2.setColor(Color.GREEN);
                                g2.setFont(myFont3);
                                g2.drawString(" RedDotX1", 163, 188);
                                break;
                            case CHOIX2:
                                g2.setFont(myFont3);
                                g2.setColor(Color.GREEN);
                                g2.drawString("AimPointX2", 163, 188);
                                break;
                            case CHOIX3:
                                g2.setFont(myFont3);
                                g2.setColor(Color.GREEN);
                                g2.drawString("  ACOGX4", 163, 188);
                                break;
     
                        }
                        break;
                    case SIZE3:
                        if (Main.Overlay) {
     
     
                            g2.setColor(Color.gray);
                            g2.fillRoundRect(0, 0, 500, 210, 30, 30);
                            g2.setColor(Color.BLACK);
                            g2.fillRoundRect(5, 5, 490, 200, 30, 30);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 40, 222, 23, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 70, 222, 23, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 102, 222, 23, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 133, 222, 23, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 165, 222, 23, 10, 10);
     
                            int x = (getWidth() - image1.getWidth()) / 2;
                           int y = (getHeight() - image1.getHeight()) / 2;
                            g2.drawImage(image1, 315, 30,  113, 167,this);
     
     
                            g2.setFont(myFont8);
                            g2.setColor(Color.WHITE);
                            g2.drawString("NoRecoil V.1 by R1beLlu2B copyright©   ", 215, 197);
                            g2.setFont(myFont7);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F10: Pause     F9: Resize     F8: Overlay     F7: R-Fire     F6: Arme     F5: Viseur     Num1: Slot1     Num2: Slot2 ", 88, 25);
     
     
                        }
     
     
                        g2.setColor(Main.enable ? Color.green : Color.RED);
                        g2.fillOval(13,17,9,9);
                        g2.setColor(Color.BLACK);
                        g2.drawRoundRect(13, 17, 9, 9, 10, 10);
                        g2.setFont(myFont6);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("RapidFire :", 38, 57);
                        g2.setColor(Main.rapideFire ? Color.GREEN : Color.RED);
                        g2.drawString(Main.rapideFire ? "ON" : "OFF", 180, 58);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Viseur :",38, 150);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot1 :", 38, 88);
                        g2.setColor(Color.RED);
                        g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 171, 87);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot2 :", 38, 119);
                        g2.setColor(Color.BLUE);
                        g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 171, 120);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Arme :",38, 182);
                        g2.setFont(myFont7);
                        g2.setColor(Color.WHITE);
                        g2.drawString("F12: To Quit", 30, 25);
     
     
                        switch (Main.armes) {
     
                            case ARMES1:
     
                                g2.setFont(myFont6);
                                g2.setColor(Color.RED);
                                g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 171, 183);
                                break;
     
                            case ARMES2:
     
                                g2.setFont(myFont6);
                                g2.setColor(Color.BLUE);
                                g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 171, 183);
                        }
     
                        switch (Main.choix) {
     
                            case CHOIX1:
                                g2.setColor(Color.GREEN);
                                g2.setFont(myFont6);
                                g2.drawString(" RedDotX1", 149, 151);
                                break;
                            case CHOIX2:
                                g2.setFont(myFont6);
                                g2.setColor(Color.GREEN);
                                g2.drawString("AimPointX2", 149, 151);
                                break;
                            case CHOIX3:
                                g2.setFont(myFont6);
                                g2.setColor(Color.GREEN);
                                g2.drawString("  ACOGX4", 149, 151);
                                break;
     
                        }
                        break;
     
                    case SIZE4:
                        if (Main.Overlay) {
     
     
                            g2.setColor(Color.gray);
                            g2.fillRoundRect(0, 0, 445, 180, 30, 30);
                            g2.setColor(Color.BLACK);
                            g2.fillRoundRect(5, 5, 435, 170, 30, 30);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(27, 38, 205, 19, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(27, 64, 205, 19, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(27, 90, 205, 19, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(27, 116, 205, 19, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(27, 142, 205, 19, 10, 10);
     
     
                        int x = (getWidth() - image1.getWidth()) / 2;
                           int y = (getHeight() - image1.getHeight()) / 2;
                           g2.drawImage(image1, 290, 29,  100, 140,this);
     
     
                            g2.setFont(myFont11);
                            g2.setColor(Color.WHITE);
                            g2.drawString("NoRecoil V.1 by R1beLlu2B copyright©   ", 205, 169);
                            g2.setFont(myFont10);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F10: Pause    F9: Resize    F8: Overlay    F7: R-Fire    F6: Arme    F5: Viseur    Num1: Slot1    Num2: Slot2 ", 76, 24);
     
                        }
     
                        g2.setColor(Main.enable ? Color.green : Color.RED);
                        g2.fillOval(13,17,7,7);
                        g2.setColor(Color.BLACK);
                        g2.drawRoundRect(13, 17, 7, 7, 10, 10);
                        g2.setFont(myFont9);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("RapidFire :", 36, 52);
                        g2.setColor(Main.rapideFire ? Color.GREEN : Color.RED);
                        g2.drawString(Main.rapideFire ? "ON" : "OFF", 171, 53);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Viseur :",36, 130);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot1 :", 36, 78);
                        g2.setColor(Color.RED);
                        g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 167, 78);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot2 :", 36, 104);
                        g2.setColor(Color.BLUE);
                        g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 167, 104);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Arme :",36, 156);
                        g2.setFont(myFont10);
                        g2.setColor(Color.WHITE);
                        g2.drawString("F12: To Quit", 28, 24);
     
     
                        switch (Main.armes) {
     
                            case ARMES1:
     
                                g2.setFont(myFont9);
                                g2.setColor(Color.RED);
                                g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 167, 157);
                                break;
     
                            case ARMES2:
     
                                g2.setFont(myFont9);
                                g2.setColor(Color.BLUE);
                                g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 167, 157);
                        }
     
                        switch (Main.choix) {
     
                            case CHOIX1:
                                g2.setColor(Color.GREEN);
                                g2.setFont(myFont9);
                                g2.drawString(" RedDotX1", 150, 130);
                                break;
                            case CHOIX2:
                                g2.setFont(myFont9);
                                g2.setColor(Color.GREEN);
                                g2.drawString("AimPointX2", 150, 130);
                                break;
                            case CHOIX3:
                                g2.setFont(myFont9);
                                g2.setColor(Color.GREEN);
                                g2.drawString("  ACOGX4", 150, 130);
                                break;
     
                        }
                        break;
     
                    case SIZE5:
                        if (Main.Overlay) {
     
     
                            g2.setColor(Color.gray);
                            g2.fillRoundRect(0, 0, 500, 210, 30, 30);
                            g2.setColor(Color.BLACK);
                            g2.fillRoundRect(5, 5, 490, 200, 30, 30);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 40, 222, 23, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 70, 222, 23, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 102, 222, 23, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 133, 222, 23, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(28, 165, 222, 23, 10, 10);
     
     
                            int x = (getWidth() - image1.getWidth()) / 2;
                            int y = (getHeight() - image1.getHeight()) / 2;
                            g2.drawImage(image1, 315, 30,  113, 167,this);
     
     
                            g2.setFont(myFont8);
                            g2.setColor(Color.WHITE);
                            g2.drawString("NoRecoil V.1 by R1beLlu2B copyright©   ", 215, 197);
                            g2.setFont(myFont7);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F10: Pause     F9: Resize     F8: Overlay     F7: R-Fire     F6: Arme     F5: Viseur     Num1: Slot1     Num2: Slot2 ", 88, 25);
     
     
                        }
     
     
                        g2.setColor(Main.enable ? Color.green : Color.RED);
                        g2.fillOval(13,17,9,9);
                        g2.setColor(Color.BLACK);
                        g2.drawRoundRect(13, 17, 9, 9, 10, 10);
                        g2.setFont(myFont6);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("RapidFire :", 38, 57);
                        g2.setColor(Main.rapideFire ? Color.GREEN : Color.RED);
                        g2.drawString(Main.rapideFire ? "ON" : "OFF", 180, 58);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Viseur :",38, 150);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot1 :", 38, 88);
                        g2.setColor(Color.RED);
                        g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 171, 87);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot2 :", 38, 119);
                        g2.setColor(Color.BLUE);
                        g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 171, 120);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Arme :",38, 182);
                        g2.setFont(myFont7);
                        g2.setColor(Color.WHITE);
                        g2.drawString("F12: To Quit", 30, 26);
     
     
                        switch (Main.armes) {
     
                            case ARMES1:
     
                                g2.setFont(myFont6);
                                g2.setColor(Color.RED);
                                g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 171, 183);
                                break;
     
                            case ARMES2:
     
                                g2.setFont(myFont6);
                                g2.setColor(Color.BLUE);
                                g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 171, 183);
                        }
     
                        switch (Main.choix) {
     
                            case CHOIX1:
                                g2.setColor(Color.GREEN);
                                g2.setFont(myFont6);
                                g2.drawString(" RedDotX1", 149, 151);
                                break;
                            case CHOIX2:
                                g2.setFont(myFont6);
                                g2.setColor(Color.GREEN);
                                g2.drawString("AimPointX2", 149, 151);
                                break;
                            case CHOIX3:
                                g2.setFont(myFont6);
                                g2.setColor(Color.GREEN);
                                g2.drawString("  ACOGX4", 149, 151);
                                break;
     
                        }
                        break;
                    case SIZE6:
                        if (Main.Overlay) {
     
     
                            g2.setColor(Color.gray);
                            g2.fillRoundRect(0, 0, 550, 260, 30, 30);
                            g2.setColor(Color.BLACK);
                            g2.fillRoundRect(5, 5, 540, 250, 30, 30);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 45, 265, 30, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 85, 265, 30, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 125, 265, 30, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 165, 265, 30, 10, 10);
                            g2.setColor(Color.WHITE);
                            g2.drawRoundRect(30, 205, 265, 30, 10, 10);
     
     
                            int x = (getWidth() - image1.getWidth()) / 2;
                            int y = (getHeight() - image1.getHeight()) / 2;
                            g2.drawImage(image1, 345, 36,  140, 210,this);
     
     
     
                            g2.setFont(myFont5);
                            g2.setColor(Color.WHITE);
                            g2.drawString("NoRecoil V.1 by R1beLlu2B copyright©   ", 225, 247);
                            g2.setFont(myFont4);
                            g2.setColor(Color.WHITE);
                            g2.drawString("F10: Pause  F9: Resize  F8: Overlay  F7: R-Fire  F6: Arme  F5: Viseur  Num1: Slot1  Num2: Slot2 ", 95, 27);
                        }
     
     
                        g2.setColor(Main.enable ? Color.green : Color.RED);
                        g2.fillOval(14,18,9,9);
                        g2.setColor(Color.BLACK);
                        g2.drawRoundRect(14, 18, 9, 9, 10, 10);
                        g2.setFont(myFont3);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("RapidFire :", 45, 68);
                        g2.setColor(Main.rapideFire ? Color.GREEN : Color.RED);
                        g2.drawString(Main.rapideFire ? "ON" : "OFF", 207, 69);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Viseur :",45, 188);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot1 :", 45, 108);
                        g2.setColor(Color.RED);
                        g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 193, 108);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Slot2 :", 45, 148);
                        g2.setColor(Color.BLUE);
                        g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 193, 148);
                        g2.setColor(new Color(225, 96, 0));
                        g2.drawString("Arme :",45, 227);
                        g2.setFont(myFont4);
                        g2.setColor(Color.WHITE);
                        g2.drawString("F12: To Quit", 31, 27);
     
     
                        switch (Main.armes) {
     
                            case ARMES1:
     
                                g2.setFont(myFont3);
                                g2.setColor(Color.RED);
                                g2.drawString(ConfigManager1.getInstance1().getCurrentConfig().name, 193, 227);
                                break;
     
                            case ARMES2:
     
                                g2.setFont(myFont3);
                                g2.setColor(Color.BLUE);
                                g2.drawString(ConfigManager2.getInstance2().getCurrentConfig().name, 193, 227);
                        }
     
                        switch (Main.choix) {
     
                            case CHOIX1:
                                g2.setColor(Color.GREEN);
                                g2.setFont(myFont3);
                                g2.drawString(" RedDotX1", 163, 188);
                                break;
                            case CHOIX2:
                                g2.setFont(myFont3);
                                g2.setColor(Color.GREEN);
                                g2.drawString("AimPointX2", 163, 188);
                                break;
                            case CHOIX3:
                                g2.setFont(myFont3);
                                g2.setColor(Color.GREEN);
                                g2.drawString("  ACOGX4", 163, 188);
                                break;
     
                        }
                        break;
                }
            } g2.dispose();
        }
    }

    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par R1beLlu2B Voir le message
    Bonjour,

    alors, j'ai reussi a regule l'utilisation de la memoire avec ceci :
    Bonjour, j'ai un incendie. Mais c'est pas grave, on a résolu le problème avec un marabout qui a fait une dance....
    Non seulement l'appel au GC c'est à déconseiller, mais en plus là où tu la mis il fait juste placebo (bon la bonne nouvelle c'est qu'il ne cause pas de soucis majeur non plus, il sert juste à rien)....

    Ton code a des problèmes, les plus gros:

    Tu as un méthode paintComponent kilométrique hors de contrôle. Tu es sur un langage objet, agit comme tel, délègue les opérations de dessin à des objets Arme, ecran status, que sais-je que tu positionne dans ton écran. Ce qui permettra de résoudre le point 2 & 3
    supprime toutes ces variables statique, c'est une mauvaise pratique, fait des objets contenant l'état de ton système avec des méthode d'accès aux valeurs.
    Tu as une boucle qui redessine tout à intervalle régulier. C'est pas comme ça qu'on fait en swing: on schedule un redraw d'une partie en fonction de ce qui a changé. D'où la méthode repaint avec paramètres. Bien sur ce serait plus facile à faire si les différents composant de ton interface étaient des objets avec leur zone de travail et leur état, ce qui permettrait de savoir qui change et quelle influence ça a sur l'affichage...
    Enfin tu va me faire plaisir de retirer ce g2.dispose. C'est n'est pas toi qui a créé le Graphic, ce n'est pas à toi de le libérer.

    Enfin pour ta mémoire, l'appli prends tout ce dont elle dispose pour retarder au maximum le garbage collect. C'est le comportement normal de java, la mémoire va faire du yoyo: enfler, nettoyage de masse, enfler.... dans les limites que tu aura autorisé. Donc pas d'inquiétude à avoir. Il faut seulement s'inquiété quand la réduction n'arrive jamais, et ton code de dessin n'a a priori aucune raison de causer un leak.

  9. #9
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonsoir,

    Merci pour c'est precieux conseil.


    je vais regarde de la documentation de plus pret pour les g2d.

    Etant novice en java, j'ai ecrit le code comme ca venais et vue que ca marchais(marche ) toujours, je ne me suis pas trop poser de question.


    Pour le system GC, en ayant regardé la doc, je sais que c'est une trés trés mauvaise idée et je compte a cours terme le retire.

    juste a savoir qu'il n'a pas un effet "placebo", alors pourquoi du comment.... il me limite a 125 Mo de ram en permanence.

    Sans lui, mon application monte a 400 mo environ (c'etais juste pour information).

    Apres que mon application monte a 400mo de ram ne me gene pas non plus.

    J'aime bien que les chose soit bien faite et surtout aussi apprendre de la bonne manière.

    Dans l'idée je compte réecrire le code complet mais de la bonne manière


    R1beLlu2B

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 890
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 890
    Billets dans le blog
    53
    Par défaut
    Il y quelques soucis a appeler directement System.gc() ou de prendre l'habitude de se reposer dessus.

    Le premier c'est que cet appel peut tout simplement ne rien faire du tout quand ton programme tourne sur d'autres plateformes. En effet, sur certaines VM (ex: sur smart card, mobiles ou embedded) le garbage collector peut être complètement désactivé car nuirait aux faibles performances que le CPU de ces plateformes peut fournir pour faire tourner l'app et donc cet appel ne fera rien et ne sauvera pas ton programme en cas de fuite mémoire ou de sur-allocation d'instances temporaires d'objets. Ensuite, même si le GC est actif, la JVM peut quand même décider d'ignorer cette requête et de ne rien faire suivant ses paramètres de fonctionnement et de diagnostique interne.

    Le second est que cela cache souvent un problème de conception du code, avec entre autre :

    • Un ou des thread qui ne laissent assez de temps de repos au GC pour aller examiner et libérer la mémoire (c'est un peu moins un soucis avec le GC en parallèle). Ou alors du code qui alloue plein plein plein pleins d'objets spécialisés sans jamais contrôler leur nombre ni les réutiliser (un soucis classique de Swing avec les Dimension ou de JavaFX avec les Bounds2D ou dans sa gestion des CSS par exemple). Ce qui veut dire aussi que la remarque de tchize_ sur le fait d'avoir des objets dédiés n'est pas forcement tout le temps appropriée. Dans certains cas, notamment dans les jeux ou quand les performances ou encore le contrôle de la consommation mémoire doit être bien plus strict, il vaut mieux un code classique style C qui contrôle bien ses allocations plutôt que d'essayer de refourguer des objets spécialisés de partout.
    • Cela peut être aussi un problème de liaisons dures entre objets qui ne sont jamais libérées, un cache d'images par exemple ou encore ces fameux listeners qu'on met de partout dans AWT, Swing et JavaFX mais que tout le monde oublie de démonter après usage (idem pour le binding en JavaFX)...
    • Cela peut être également un soucis de gestion des gros volumes de données : il est très facile de charger directement en mémoire l'intégralité d'un petit fichier pour le traiter mais cette archi simpliste ne fonctionne pas du tout sur un énorme fichier de plusieurs giga. Donc il faut retomber sur des antiques pratiques d’accès par page, etc. pour limiter le volume alloué pour le traitement de ce genre de données. Idem pour les traitement des requêtes sur des bases, etc.


    Enfin, tous les GC ne fonctionnent pas de la même manière suivant le vendeur de la VM ou la plateforme d’exécution ou encore les paramètres de la VM : certains peuvent tourner en parallèle du thread principal de ton application ton application tandis que d'autres peuvent complètement stopper ou ralentir l’exécution lorsqu'on les invoque ce qui fait que selon le scenario que tu vises (libérer rapidement de la mémoire ou avoir des performances d’exécution constantes), cet appel peut ne pas vraiment faire ce que tu escomptes (la mémoire est libérée mais trop tard ou au contraire alors l'application ralentie un grand coup, d'autant plus si cet appel est invoqué trop souvent). Donc ce que tu peux expérimenter sur la JVM Windows d'Oracle, peut ne pas forcement se produire sur la JVM Linux ARM d'un autre vendeur, etc (en même temps des JVM de nos jours j'en connais bien moins qu'il y a 10 ans a part celles de l'OpenJDK, d'Oracle et d'IBM).

    Bon, après le contexte de l'application joue quand même aussi : il est tout a fait normal qu'un jeu veuille complètement vider la mémoire utilisée lorsqu'on charge un nouveau niveau et de nouveaux assets et dans ce cadre, un jeu lui il s'en fiche si on perd du temps sur l’écran de chargement de niveau pour arriver a vider le niveau précédent et ses assets. Ce contexte n'est pas du tout le meme que celui d'une application desktop qui interroge une BD ou un prog serveur senses tourner ad vitam eternam.

    Ensuite mon avis perso en 20 ans de Java a toujours été et reste le même : la préallocation massive de mémoire de la la JVM et son très faible taux / extrême lenteur a rendre la mémoire inutilisée peut probablement prendre tout son sens en environnement serveur. Par contre c'est vraiment intolérable en environnement client standard, ce qui a sans doute participé de longue date au fait que le ressenti du commun des mortels est que Java est lent, gourmand en RAM, etc. (les mauvaises pratiques de programmation EDT/Swing n'en sont pas la seule cause). De ce coté-la .NET semble bien plus efficace ; malgré des avancées intéressantes dans les GC les plus récents inclus dans la JVM on est encore loin du compte et de la self-tuning JVM ou il ne faudrait pas bidouiller tout un tas de flags abscons pour le client final annoncée par Oracle il y a 8+ ans de cela. Évidement, Java étant désormais plutôt absent coté desktop / end user (même s'il est encore présent coté desktop / entreprise), tout le monde s'en tape en fait...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. provoquer une fuite de memoire ?
    Par tastika dans le forum Général Java
    Réponses: 3
    Dernier message: 27/03/2009, 17h40
  2. fonction qui me fait une erreur
    Par griese dans le forum Langage
    Réponses: 12
    Dernier message: 28/07/2006, 10h46
  3. Réponses: 6
    Dernier message: 13/11/2005, 13h11
  4. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 09h46
  5. fonction qui en fait planter une autre
    Par ickis dans le forum C
    Réponses: 5
    Dernier message: 18/08/2003, 22h33

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