sql >> Databáze >  >> RDS >> Mysql

Únik paměti v JDBC4Connection

Duffymo má téměř jistě pravdu. Když jsme v minulosti měli úniky paměti, byl to prakticky VŽDY ovladač MySQL JDBC. Jen jsem někde zapomněl zavřít jeden malý ResultSet nebo Connection nebo Statement. Nakonec jsem auditoval celou kódovou základnu pokaždé, když jsme je použili, abychom našli problém a zajistili, že budou uzavřeny.

Pokud jde o HashMap, také jsem to viděl. Nedíval jsem se na zdroj, ale můj dojem byl, že ovladač MySQL uložil řádky (alespoň hodnoty řádků) v HashMaps interně.

Únik ResultSets je žalostně snadný. Myšlenka těch uzavíratelných zdrojů, které se o to postarají samy přicházející v JDK 7 nebo 8, mě ​​z tohoto důvodu opravdu láká.

Někde byste mohli vložit třídu shim (řekněme pro Connection), abyste zaprotokolovali každý otevřený/uzavřený zdroj, abyste zjistili, zda můžete zjistit, kde je únik, aniž byste museli přímo číst celý váš zdroj.



  1. Použití Robolectric s SQLiteAssetHelper

  2. Jak získat soubor z BLOB v Oracle?

  3. ListView neukazuje správné obrázky, které jsou ve výkresu podle jejich názvu ve sqlite

  4. Vytvořte Lucene Index v databázi pomocí JdbcDirectory