|
|
Publicēts 14.08.2017 16:49:22
|
|
|
|

VM inicializācijas laikā radās kļūda Nevarēja rezervēt pietiekami daudz vietas 3145728 KB objektu kaudzei
Nesen strādāju pie Java programmas. Sākotnēji man vienmēr ir patikusi Java atmiņas pārvaldība, nav jāuztraucas par atmiņas piešķiršanu, vienkārši piešķiriet, atkritumu savācējs atgūs atmiņu jūsu vietā. Tagad programma ir izstrādāta ar lielu datu apjomu, un ātruma labad es ielādēšu visu informāciju atmiņā, kas nodrošinās ātru reakciju. Es joprojām atkārtoti skaitu atmiņu, domājot par savu datu apjomu, kas sākumā būtu pietiekams (manai mašīnai ir 4G atmiņa, lai gan Windows atpazīst 3.5G, bet tam vajadzētu būt labi, salīdzinot ar manu pašreizējo datu apjomu).
Negaidīti pirmā eksperimenta programma darbojās dažas stundas un saskārās ar atmiņas trūkuma izņēmumu. Aplūkojot savus VM iestatījumus, es iestatīju -Xms512M -Xmx1024M. Nedomājot par to, es to tieši nomainīju uz -Xms512M -Xmx2048M, un rezultāts bija tāds, ka es nevarēju rezervēt pietiekami daudz vietas objektu kaudzei. Programma nevar piecelties. Tikai tad es sapratu, ka joprojām ir ierobežojums sākotnējai maksimālajai atmiņai. Es meklēju internetā un atradu daudzus rakstus, kuros tika apspriests šis jautājums. Visbeidzot, es atradu visnoderīgāko rakstu BEA DEV2DEV forumā
Šeit moderators YuLimin veica testu un nonāca pie secinājuma:
Kompānijas JVM versija Maksimālā atmiņa (mega) klients Maksimālā atmiņa (mega) serveris
SVĒTDIENA 1.5.x 1492 1520
SAULE 1.5.5 (Linux) 2634 2660
SVĒTDIENA 1.4.2 1564 1564
SAULE 1.4.2 (Linux) 1900 1260
IBM 1.4.2 (Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902
Es tagad JDK1.6.0_05 izmantoju, pārbaudīju to. Lielākā lieta klienta stāvoklī ir tā, ka mans JDK neatpazīst parametru -Server un nevar pārbaudīt servera stāvokli. Aplēses ir aptuveni tādas pašas.
SVĒTDIENA 1.6.0 1442 N/A
Šķiet, ka Java nav iespējams izmantot lielu atmiņu. Un vispārējs teiciens ir tāds, ka, ja atmiņa ir pārāk liela, atkritumu savākšanas laiks būs ilgs. Tas ir arī saprotams, parasti tiek savākts, ja atmiņa nav pietiekama, 2G atmiņas skenēšana, protams, ir daudz lēnāka nekā 1G, un ir vairāk atmiņas objektu, paredzamā attiecība eksponenciāli palielinās.
Zemāk ir pievienotas YuLimin testa metodes un testa ieraksti.
Testa metode:Pārbaudiet ar komandrindu java -XmxXXXXM -version, un pēc tam pakāpeniski palieliniet XXXX vērtību, ja tas tiek izpildīts normāli, tas nozīmē, ka ir pieejams norādītais atmiņas lielums, pretējā gadījumā tiks izdrukāts kļūdas ziņojums.
Pārbaudiet JVM maksimālo atbalstīto atmiņu un pēc tam iestatiet sistēmas vides mainīgos
Mainīgā nosaukums: _JAVA_OPTIONS Vērtība: - Xmx1G
|
Iepriekšējo:Tiek izmantots jQuery pilnekrāna spraudnis "jQuery pilnekrāna spraudnis"Nākamo:Atšķirība starp SSL, OV, DV un EV sertifikātiem
|