Jeg har et C program (View), der starter en Java VM via JNI for at tilgå min datamodel (Model+Control). Som argument til JNI_CreateJavaVM indgår der et JavaVMInitArgs objekt der indeholder et array af JavaVMOption. Én af de options vi sætter er '-Xmx=512M'. Dette pga. til tider højt hukommelsesforbrug i applikationen og for at undgå OutOfMemoryException.
Dette setup har jeg haft i flere år, men siden slutningen af Maj (ca.) har dette hørt op med at virke. Oprettelsen af JVM fejler. Hvis jeg fjerner -Xmx512M helt virker alt fint, bortset fra at min applikation fejler pga. OutOfMemoryException.
Svar på dette spørgsmål skal gå ud på at fortælle hvad jeg kan gøre for at undgå problemet. Alm. info (med kilder) om hvorfor problemet er opstået accepteres selvfølgelig også som svar.
Følgende svar behøver ikke at indgå som kommentarer: - Kod programmet om så det anvender mindre hukommelse - Drop JNI og lav det hele i Java - Drop Java og lav det hele i C :-)
Mød en af Nordens fremmeste eksperter i adfærdsdesign – Morten Münster, der bl.a. har skrevet ” Jytte fra marketing er desværre gået for i dag” – på Computerworld Cloud & AI Festival.
Spm. er også oprettet under Programmering:C/C++ for at opnå bedre dækning. Begge spørgsmål vil naturligvis få deres svar accepteret (2*200 = 400point tilgængelige) http://www.eksperten.dk/spm/781947
God pointe. Det havde jeg glemt at nævne. Kører man en simpel: java -Xmx=512M -version virker det fint (man kan anvende den kommando til at se hvad ens max er.
Når Java bliver startet for sig selv, dvs. via java.exe så virker alt i skønneste orden. Problemet er at mit program er et add-on til et andet program hvorfor vi ikke har 'fuld' kontrol over alt hvad der foregår, dvs. heller ikke størrelse på heap.
Det store spørgsmål er bare hvorfor det lige sker nu??
Additional info: Java version: 1.5 update 08, 11 og 12 (sikkert også andre men det er dem jeg har kigget på).
Du har ikke tilfældigvis rettet i dit C program for nylig? Har du eventuelt prøvet at udskrive den kommando du starter java-programmet med? Altså den kommando du generere i C-programmet.
Et eller andet kunne tyde på, at det er kommandoen den er gal med, når nu det virker fint ved almindelig start med java.exe.
Nej, vi har ikke rettet i launch sekvensen. At det virker ved alm. start og ikke ved initiering via vores plug-in har noget at gøre med hukommelsesallokeringen i heap for host applikationen. Idét vi ikke starter java op som en selvstændig applikation, men via dens dll indeni den eksisterende heap. At problemet, formodentlig, ligger der er vi opmærksomme på. Spørgsmålet er bare hvorfor dette issue kommer lige nu (har virket i årevis) og så på systemer med en opsætning der er uændret (samme JRE, samme OS, dog har OS selvfølgelig fået MS-opdateringer).
Nej, vi har endnu ikke fundet frem til problemet (kræver at man kan efterprøve). Komentarer, idéer o.l. modtages gerne :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.