abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:11 | Nová verze

    Příručka Linux From Scratch pro sestavení základního linuxového systému byla aktualizována v pravidelném půlročním termínu. Vydání 13.1 shrnuje přes 40 nových verzí balíčků a několik patchů. Navazující příručka Beyond Linux From Scratch s recepty pro sestavení dalších knihoven a aplikací zatím vydána nebyla, ačkoliv vývojová verze stále dostává aktualizace. Lze je číst online nebo stáhnout v HTML či PDF.

    |🇵🇸 | Komentářů: 0
    dnes 12:44 | IT novinky

    Národní bezpečnostní tým CSIRT.CZ koordinovaný sdružením CZ.NIC přichází se službou Strážci internetu, která má sjednotit způsob hlášení doménových jmen zneužívaných k páchání trestné činnosti. Službu mohou uživatelé využívat také prostřednictvím rozšíření do prohlížeče. Nový nástroj podporuje jak hlášení vyžadující autorizaci, tak anonymní reporting, u kterého však nebude možné zapojit takovou míru automatizace jako u

    … více »
    Ladislav Hagara | Komentářů: 13
    dnes 12:22 | Komunita

    Firefox pro iOS přichází s integrovaným blokováním reklam. Funkce je ve výchozím nastavení vypnutá a lze ji aktivovat v Settings > Browsing > Ad Blocker.

    Ladislav Hagara | Komentářů: 3
    dnes 11:22 | IT novinky

    Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila (𝕏) open-source robota Microduck. Předobjednat jej lze za 340 eur.

    Ladislav Hagara | Komentářů: 1
    dnes 10:55 | Nová verze

    Open-source autonomní AI agent OpenClaw (Wikipedie) byl vydán ve verzi 2026.8.1 aneb 2.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 18:55 | Nová verze

    Byla vydána první veřejná preview verze PrusaSliceru 3.0. Přesně 15 let po zveřejnění první verze Slic3ru, které připadlo na 1. září 2011. Jedná se o dosud největší upgrade PrusaSliceru: "Řídili jsme se tím, co skutečně potřebujete, a tak jsme například zcela zahodili stávající uživatelské rozhraní a vytvořili ho znovu od nuly. Přinášíme také nový systém projektů, kompletně přepracované profily navržené pro moderní tiskárny s větším

    … více »
    Ladislav Hagara | Komentářů: 1
    včera 15:55 | Nová verze

    Byl vydán Mozilla Firefox 155.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze Smart Window, zatím ale dostupné pouze pro uživatele v USA, Kanadě a Francii. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 155 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 12:33 | IT novinky

    Tima Cooka na pozici generálního ředitele společnosti Apple dnešním dnem nahradil John Ternus, který byl dosud odpovědný za hardware. Tim Cook vedl Apple od roku 2011, kdy funkci převzal od později zesnulého spoluzakladatele společnosti Stevea Jobse. Za 15 let v čele Applu více než zdvojnásobil tržní hodnotu firmy.

    Ladislav Hagara | Komentářů: 3
    včera 11:00 | Pozvánky

    Organizátoři konference LinuxDays ukončil veřejné přihlašování přednášek. Teď je na vás, abyste vybrali nejlepší témata pro letošní ročník. Hlasovat můžete do pondělí 7. září, poté bude podle výsledků hlasování sestaven program pro letošní ročník.

    Petr Krčmář | Komentářů: 5
    včera 10:55 | Nová verze

    Servo, engine webového prohlížeče napsaný v Rustu, byl vydán ve verzi 0.5.0. Novinky shrnuje přehled projektu za červenec. Došlo k dalšímu pokroku ve vykreslování webových stránek. Současným cílem projektu je vytvořit komponentu webového prohlížeče jako WebView pro použití v jiných aplikacích.

    |🇵🇸 | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (29%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2536 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: Java

    10.8.2009 15:28 L.A.
    Java
    Přečteno: 554×

    Dobry den, delam program na prohlizeni obrazku. Na zacatku mi nasledujici metoda nacte vsechny obrazky. V seznamu imageNames jsou jmena vsech obrazku v urcite slozce.

    private void loadImages()
        {
            mediaTracker = new MediaTracker(this);
            Toolkit toolkit = Toolkit.getDefaultToolkit();
    
            for (String imageName : imageNames)
                images.add(toolkit.getImage(imageName));
    
            for (int i = 0; i < 10; i++)
                mediaTracker.addImage(images.get(i), i);
    
            try
            {
                for (int i = 0; i<10; i++)
                    mediaTracker.waitForID(i);
            } catch (InterruptedException ex)
            {
                ex.printStackTrace();
            }
        }
    

    Pres mediaTracker.addImage() a mediaTracker.waitForID() nactu a pridam pouze prvnich 10 obrazku - kdybych nacetl vsechny tak zbytecne zaplacam RAM a trvalo by to hoodne dlouho.

    Potom mam metodu pro zobrazeni nasledujiciho obrazku po stisku sipky doprava:

    private void drawNextImage()
        {
            if ((++imageIndex) == images.size())
                imageIndex = 0;
            // ic je Canvas do ktereho obrazek vykresluji
            ic.drawLoadedImage(images.get(imageIndex));
            ...
            mediaTracker.addImage(images.get(imageIndex+10), imageIndex+10);
            try
            {
                mediaTracker.waitForID(imageIndex+10);
            } catch (InterruptedException ex)
            {
                ex.printStackTrace();
            }
    
            if ((imageIndex - 10) >=  0)
                mediaTracker.removeImage(images.get(imageIndex - 10), imageIndex - 10);
        }
    

    V promenne imageIndex je index aktualniho zobrazeneho obrazku. V te metode si tedy pripravim nasledujici jeste nenacteny obrazek, tzn ten na indexu imageIndex+10 a zaroven ten o 10 mist dozadu (pokud je to mozne) odstranim. Mam tedy v pameti nacteno vzdy jen male mnozstvi obrazku, ne vsechny.

    Program testuji v adresari, kde mam 65 fotek, zadna asi 2MB. Prvnich 10 fotek je uz prednactenych, takze se vzdy po stisku sipky doprava zobrazi velmi rychle, u 11. fotky je uz poznat rozdil a vzdy kolem 30. fotky dostanu toto:

    Exception in thread "Image Fetcher 1" java.lang.OutOfMemoryError: Java heap space
            at java.awt.image.DataBufferInt. init (DataBufferInt.java:41)
            at java.awt.image.Raster.createPackedRaster(Raster.java:458)
            at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
            at sun.awt.image.ImageRepresentation.createBufferedImage(ImageRepresentation.java:230)
            at sun.awt.image.ImageRepresentation.setPixels(ImageRepresentation.java:484)
            at sun.awt.image.ImageDecoder.setPixels(ImageDecoder.java:120)
            at sun.awt.image.JPEGImageDecoder.sendPixels(JPEGImageDecoder.java:97)
            at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
            at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119)
            at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:246)
            at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
            at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
    

    Pak mohu jeste dolistovat k cca 40. fotce - to dava smysl, protoze 10 fotek dopredu je prednactenych a pote se fotky uz vubec nezobrazuji. Pro jednoduchost jeste neresim to ze nacitam fotky z indexu, ktery uz neexistuje (je vetsi nebo roven images.size())

    Proto otazka - jak mam tu pamet uvolnovat, abych predesel OutOfMemoryError?

    Odpovědi

    10.8.2009 16:50 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: Java
    Treba zariadit, aby sa nikde nerzali referencie na tie objekty; v Tvojom pripade patrne v objekte MediaTracker. Treba si uvedomit, ze obrazok v programe obsahuje dekomprimovane bitmapove udaje vo formate ARGB a je teda omnoho vacsi ako JPEG/PNG subor na disku.

    Pozri tiez toto:

    http://code.google.com/p/javagems/source/browse/trunk/srcs/gems/easteregg/shower/Shower.java
    10.8.2009 17:48 L.A.
    Rozbalit Rozbalit vše Re: Java

    No prave kvuli tomu, aby se dany objekt obrazku z MediaTrackeru odstranil volam toto:

    mediaTracker.removeImage(image, index);

    K cemu pak ta metoda slouzi? V tom kodu Shower.java jsem nenasel nic co by mi s timto pomohlo, mel jste tam na mysli neco konktretniho?

    10.8.2009 18:01 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: Java
    Skus znizit hranicu 10 obrazkov, ale nastavit vacsi heap pomocou -Xmx; inac povedane, je mozne ze ani tych 10 obrazkov sa do defaultneho heapu nezmesti.
    10.8.2009 18:54 L.A.
    Rozbalit Rozbalit vše Re: Java

    Ok, zkusil jsem tu hranici 10 snizit na 1, takze nacitam pouze jeden obrazek dopredu. Takto to zvladlo 37 fotek (predtim 30) a na 38 zase ta chyba.

    Nechal jsem hranici stale na 1 jeda a program spustil s -Xmx1024m coz by melo programu poskytnout giga pameti, jestli jsem to dobre pochopil - takto to zvladlo 56 fotek, 57 hodila moji oblibenou chybu. Jak je prosim mozny, ze takovy programek na prohlizeni obrazku s predbufferovanim jednoho obrazku sezere 1GB RAM? Jedine prijatelne vysvetleni je asi to, ze ty nactanene obrazky stale zustavaji v pameti, co myslite?

    Doted jsem automatickou spravu pameti v Jave bral jakou velkou vyhodu oproti treba C++, ale nyni mi pekne komplikuje zivot... Nejake navrhy?

    10.8.2009 19:13 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: Java
    Ale do premennej images nacitavas vsetky obrazky...
    10.8.2009 19:58 L.A.
    Rozbalit Rozbalit vše Re: Java

    Tak jsem seznam objektu Image odstranil, obrazky nacitam az v pripade potreby podle seznamu imageNames a vypada to, ze to pomohlo. Ja ten problem porad daval za vinu MediaTrackeru a on az to mohl obycejny seznam objektu Image... zajimave.

    10.8.2009 20:07 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: Java
    Nic zaujimave na tom nieje; ten zoznam jednoducho drzal zive referencie na vsetky objekty Image; akekolvek ich odstranovanie z trackera ich uvolneniu z pamate nemohlo pomoct. Mozem sa Ti zarucit, ze garbage collection v Jave funguje sakramensky dobre.

    Este odporucam pozriet si javadoc k Tookit.getImage() a Image.flush().
    10.8.2009 21:01 moira | skóre: 30 | blog: nesmysly
    Rozbalit Rozbalit vše Re: Java
    No spise nez zajimave je to naprosto normalni :) To, ze jsi odstranil obrazek z MediaTrackeru je sice fajn, ale v kolekci images na ten obrazek porad zustaval odkaz, takze ho GC nemohl odstranit. Jinak to, co se ti prave prihodilo, je typicky priklad "memory leakage" v Jave.
    Překladač ti nikdy neřekne: "budeme kamarádi"

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.