PDA

View Full Version : گفتگو: گفتگو در مورد کارایی برنامه های جاوا



kingtak
چهارشنبه 01 بهمن 1393, 12:19 عصر
از دوستانی که در ضمینه جاوا کار میکنن چند تا سوال در مورد کارایی جاوا دارم:
همونطور که توی سایت های مختلف در مورد کارایی جاوا و سرعت اجرای برنامه های دسکتاپ جاوا بحث شده این سوال برای من هم پیش اومده که که آیا جاوا برای برنامه های دسکتاپ مناسبه؟
چون اکثر برنامه های جاوایی که من دیدم سرعت اجرای پایینی دارن و بعضا RAM خیلی زیادی مصرف میکنن.نمونش رو توی FXSampler یا نمونه های دیگه ای که با سویینگ نوشته شدن میبینیم.در حال که بعضی ها معتقدن سرعت برنامه های جاوا زیاده و اونو با برنامه های نوشته شده با سی شارپ هم مقایسه میکنند.
از طرفی بعضی برنامه ها مثل اکلیپس یا نت بینز رو میبینیم که این مشکل رو ندارن و مثل برنامه های native با کارایی بالایی اجرا میشن.آیا اینها از تکنولوژی خاصی استفآده میکنند؟
همچنین این سوال رو دارم که این دوتا برنامه بصورت فایل jar نیستند؟بخاطر این در مورد اینکه این برنامه های کاملا با جاوا نوشته شدن شک میکنم.؟
آیا شما راهکاری برای اینکه برنامه های جاوا برای دسکتاپ مشکل سرعت و استفاده بهینه از رم و CPU داشته باشن دارید؟

persianshadow
جمعه 03 بهمن 1393, 18:10 عصر
البته این بحث قدری چالشی هست. ولی به عنوان تجربه شخصی خودم در شرکتی که ۲ پروژه جاوایی و دات نتی داشت و هر دو پروژه بخش Desktop application پیچیده‌ای داشتن میشه گفت هم جاوا و هم دات نت از پس کار بر اومدن و صد البته هر دو ضعف های هم داشتن که با قدری صرف وقت مرتفع میشد.
فرضآ بحث استفاده بهینه از رم و CPU تا حد زیادی به نحوه کد نویسی هم برمیگرده که با Profile کردن و تصحیح کدها همه چیز حل میشه.
اکثر نرم افزارهای معروف محصول ها سال‌ها کار و بهبود کد و تکنولوژی هستند و یا اینکه از فریم ورک های مناسبی بهره بردن. فرضآ اگه شما میخوایید یه نرم افزار Desktop بنویسید خب مستقیم از Swing و یا JavaFX استفاده نکنید. از Netbeans Application Framework استفاده کنید که همون تلاش سال ها رو به رایگان به شما میده :).

kingtak
جمعه 03 بهمن 1393, 22:43 عصر
فرضآ اگه شما میخوایید یه نرم افزار Desktop بنویسید خب مستقیم از Swing و یا JavaFX استفاده نکنید. از Netbeans Application Framework استفاده کنید که همون تلاش سال ها رو به رایگان به شما میده :).

ممنون از توجهتون:لبخندساده:
میشه در این مورد یه کم توضیح بدید یا لینک یا منبعی معرفی کنید؟

-سیّد-
دوشنبه 24 فروردین 1394, 10:06 صبح
چون اکثر برنامه های جاوایی که من دیدم سرعت اجرای پایینی دارن و بعضا RAM خیلی زیادی مصرف میکنن.نمونش رو توی FXSampler یا نمونه های دیگه ای که با سویینگ نوشته شدن میبینیم.در حال که بعضی ها معتقدن سرعت برنامه های جاوا زیاده و اونو با برنامه های نوشته شده با سی شارپ هم مقایسه میکنند.

در مورد بحث desktop application دوستمون به خوبی توضیح دادن.
اما دلیل این که اکثر برنامه‌های جاوا سرعت اجرای پایینی دارن و رم زیادی مصرف می‌کنن، دلایل مختلفی می‌تونه داشته باشه. یکیش اینه که توی جاوا دستوری به نام delete مثل ++C نداریم! بنابراین شما شیء رو درست می‌کنید، و رهاش می‌کنید به امان خدا! تا وقتی که Garbage Collector بیاد سراغش و حذفش کنه. اما توی ++C شما خودتون باید شیء رو از بین ببرید. برای همین معمولاً کسی که می‌تونه کد ++C بزنه، کدش سریعتر و بهینه‌تر هست! و البته سخت‌تر، برای همین هم کمتر به سمت ++C می‌رن.
نکته‌ی دیگه اینه که جاوا یه JVM داره که ماشین مجازی هست و کد رو اون اجرا می‌کنه، نه این که سیستم عامل و CPU مستقیم کد رو اجرا کنن. که این خودش یه لایه‌ی اضافه هست و باعث کندتر شدنش می‌شه (البته موجودی به نام JIT هم وجود داره که این مشکل رو تا حد زیادی رفع می‌کنه).

و در نهایت هم یه نکته در مورد بهینه‌سازی کد جاوا بگم: یکی از راه‌های سریع‌تر کردن اجرای کد جاوا، بهینه‌سازی تنظیمات JVM هست، یعنی تغییری توی کد نداره و فقط پارامترهای JVM رو دستکاری می‌کنید. مثلاً تنظیمات GC خییییلی می‌تونن توی بالا رفتن performance کد جاوا تأثیر داشته باشن (مخصوصاً توی RAM های بالا، مثلاً ۴ گیگ و بالاتر).



از طرفی بعضی برنامه ها مثل اکلیپس یا نت بینز رو میبینیم که این مشکل رو ندارن و مثل برنامه های native با کارایی بالایی اجرا میشن.آیا اینها از تکنولوژی خاصی استفآده میکنند؟
همچنین این سوال رو دارم که این دوتا برنامه بصورت فایل jar نیستند؟بخاطر این در مورد اینکه این برنامه های کاملا با جاوا نوشته شدن شک میکنم.؟

به عنوان مثال من eclipse رو مطرح می‌کنم: یه فایل هست کنار فایل اجرایی eclipse به نام eclipse.ini که توش آدرس کلاس اصلی اجرایی eclipse نوشته شده:
org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
همچنین دو تا دایرکتوری توی eclipse وجود داره که شامل فایل‌های jar اش هست:
plugins
و
features
خلاصه: مطمئن باشید با جاوا نوشتنش! :)
دلیلش هم اینه که وقتی زبون سطح بالاتر می‌ره، سرعت کد زدن براش بیشتر می‌شه، به دو دلیل: یکی این که توی زبان‌های سطح بالاتر درگیر یه سری مسائل سطح پایین نمی‌شید و در نتیجه تمرکزتون روی کل کار بیشتر می‌شه. دوم این که زبان‌های سطح بالاتر راحت‌تر از زبان‌های سطح پایین‌تر هستند، و در نتیجه تعداد بیشتری آدم پیدا می‌کنید که روش کار کنن و همچنین community بزرگتری دارن.
یه دلیل دیگه که اینا رو با جاوا می‌نویسن اینه که pluggable باشه. اگه نگاه کنید، تعداد plugin های موجود برای eclipse خیییییییییییییییییییییییی ییلی زیاده! خوب دلیلش اینه که پلاگین نوشتن برای جاوا خیلی راحت‌تر از پلاگین نوشتن برای ++C هست. کلاً زبان‌هایی که VM دارن خیلی قابلیت انعطافشون بالاتره و در نتیجه خیلی راحت‌تر می‌تونن از پلاگین‌ها پشتیبانی کنن.

و در نهایت یه نکته بگم: این که می‌گید مثلاً eclipse این مشکل رو نداره و مثل برنامه‌های native با کارایی بالا اجرا می‌شه، خیلی درست نیست. eclipse هم بعضی وقتها چنان قاطی می‌کنه که دیگه تکون نمی‌خوره! هر کاری می‌خواین توش بکنین بدون اغراق ۵ ثانیه طول می‌کشه! اعصاب آدم به هم می‌ریزه! البته معمولاً با یه restart مشکلش حل می‌شه! تا وقتی که دوباره به این وضعیت برسه!
یعنی کلاً برنامه‌های جاوایی از برنامه‌های native سنگین‌تر هستن...