Wsimport من مشكلات الذاكرة في Java 1.6
سؤال
أنا أستخدم WSimport في Java 1.6 (أي بناء 1.6.0-B105) على Windows XP 5.1 وأحصل على استثناء من الذاكرة. اعتدت على jconsole ويبدو أن عملية wsimport هي الحد الأقصى عند 64 ميغابايت. كيف يمكنني زيادة ذاكرة الكومة لـ wsimport؟
شكرًا،
المحلول
بالنسبة لي ضبط البيئة المتغير wsimport_opts (المقترح في إجابة أخرى ، ويبدو أن العمل في الإصدارات القديمة من WSimport) لا يبدو له أي تأثير.
بالنسبة لي فيما يلي يفعل العمل: بدلا من wsimport
استعمال
java -classpath $JAVA_HOME/lib/tools.jar com.sun.tools.internal.ws.WsImport
أين $JAVA_HOME
هو مجلد جذر JDK (وليس JRE).
في سطر أوامر Java هذا ، يمكنك إضافة أي خيارات JVM التي تريدها. (كنت بحاجة -Djavax.net.debug=all
لتصحيح أخطاء الثقة SSL.)
(أنا أستخدم Ubuntu مع OpenJdk 6 ، Package Version 6B20-1.9.7-0ubuntu1.)
نصائح أخرى
يقبل Wsimport وسيطات JVM من خلال متغير بيئة WSIMPORT_OPTS. لذلك على Windows ، حاول تشغيل "SET WSIMPORT_OPTS = -XMX512M" على سطر الأوامر قبل تشغيل WSimport لإعطاء CENT 512MB من الكومة.
إذا كنت في JDK حديثة بما فيه الكفاية ، يمكنك استخدام -Xnocompile
الخيار ثم تزويد javac
العملية بذاكرة إضافية بالطريقة المعتادة. (محاولة wsimport --help
لمعرفة ما إذا كانت نسختك تدعم العلم.)
يبدو أن Wsimport قادر على المرور عبر وسيطات Java باستخدام خيار -J:
wsimport -J-Xmx1024M ...
يجب أن تعمل.
كنت أحسب أن تجاوزت هذه القضية. أسهل طريقة هي استخدام NetBeans (أنا أستخدم V6.8). استبدل إعدادات الذاكرة الافتراضية في دليل NetBeans.Conf تحت /etc مثل هذا: -j -xms768m -j -xmx768m -j -xx: permsize = 128m واتبع الطريقة المعتادة لإنشاء عميل خدمة الويب بعد Jax WS في Netbeans. من JConsole ، أرى أن تحميل ~ 18500 فئة بشكل عام في الذاكرة يميل إلى استخدام ما بين 400 ميجابايت إلى 650 ميجابايت ~. # من الفصول التي تم إنشاؤها على أساس WSDL/Schemas هي ~ 1500 فئة. آمل أن يساعد هذا لشخص ما في مواجهة قضية مماثلة.
فقط افعل ما يلي (Windows)
set CLASSPATH=<JAVA_HOME>\lib\tools.jar;%classpath%
java -Xmx1024m com.sun.tools.internal.ws.WsImport <YOUR_WSDL>
يجب أن تعمل