Avatar billede thundergod Nybegynder
06. juni 2007 - 11:47 Der er 6 kommentarer

-Xmx ved JNI_CreateJavaVM() fejler

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
:-)
Avatar billede thundergod Nybegynder
06. juni 2007 - 11:51 #1
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
Avatar billede mikkelbm Nybegynder
06. juni 2007 - 12:19 #2
Har du prøvet at køre det fra kommandoprompten. Altså uden om dit C program?
Avatar billede thundergod Nybegynder
06. juni 2007 - 12:33 #3
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å).
Avatar billede mikkelbm Nybegynder
06. juni 2007 - 13:33 #4
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.
Avatar billede mikkelbm Nybegynder
12. juni 2007 - 22:49 #5
Fandt I frem til hvad problemet var?
Avatar billede thundergod Nybegynder
13. juni 2007 - 11:01 #6
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 :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester