PDA

View Full Version : اجرای بهتر برنامه



dasssnj
شنبه 27 اردیبهشت 1393, 15:18 عصر
سلامی دوباره.
اگر ما متغیر هایی که به مقدار دهی دوباره نیاز ندارند و کلاس هایی که احتیاج نیست ازشون مشتق بشه رو به صورت final بنویسیم تاثیری بر سرعت اجرای برنام داره؟
چه راه هایی برای سریع تر شدن برنامه وجود داره؟

cups_of_java
شنبه 27 اردیبهشت 1393, 19:23 عصر
بله. چون برای متد های final امکان Late Binding وجود نداره و اونها در زمان کامپایل bind میشن بنابراین سریع تر هستن. اما این سریع تر بودن در حد چند میکرو ثانیه هست و محسوس نیست برای شما. مگر در متد های low level و سیستمی و api call های سیستم عامل که بعضن ممکنه در هر ثانیه چندین هزار بار فراخوانی بشن...

vahid-p
شنبه 27 اردیبهشت 1393, 22:08 عصر
بله. چون برای متد های final امکان Late Binding وجود نداره و اونها در زمان کامپایل bind میشن بنابراین سریع تر هستن.

منظور از bind شدن چیه دقیقا؟ constant که نیست، چون میتونی هر وقت خواستی یکبار new اش کنی!
متوجه bind شدن در زمان کامپایل نمیشم!

cups_of_java
یک شنبه 28 اردیبهشت 1393, 08:50 صبح
منظور از bind شدن چیه دقیقا؟

من از Method Binding صحیت می کنم و این به معنی چسباندن یا وصل کردن بدنه متد به فراخوانی متد هستش. یعنی اینکه کامپایلر بدونه فراخوانی متد به کدوم تعریف متد مربوط میشه.




constant که نیست، چون میتونی هر وقت خواستی یکبار new اش کنی!

ما راجع به متد ها حرف میزنیم نه اشیا. از متد ها که چیزی نبو نمیشه. ضمنن کانستنت در مورد متغیر ها به این معنی نیست که نشه نیو کرد بلکه به این معناست که وقتی نیو شد دیگه نشه مقدار رفرنسش رو عوض کرد




متوجه bind شدن در زمان کامپایل نمیشم!

کامپایلر در زمانی که کد رو داره کامپایل میکنه خب متوجه میشه که هر کدوم از فراخوانی ها مربوطه به کدوم تابع تعریف شده توی کد هستش. به این میگن Early Binding یا Static Binding یا همون بایندینگ در زمان کامپایل...
اما حالتی هم وجود داره (متد های Override شده توی کلاس های فرزند) که کامپایلر می تونه این اتصال رو انجام نده... صبر کنه در زمان اجرا بر اساس نوع شی ای که تو حافظه هست یکی از اون متد های Override شده رو دقیق وصل کنه به فراخوانیش

پس متد ها همه توی جاوا در زمان اجرا متصل میشن چون زبان کاملن شی گرا هستش... اما خب متد Final متدی هست که قابل Override کردن نیست. بنابراین دیگه نیازی به بایندیگ در زمان اجرا نیست (چون چند نسخه از اون تابع وجود نداره دیگه) بنابراین متد های فاینال در زمان کامپیایل بایند میشن و بنابراین سریع تر فراخوانی میشن.

dasssnj
یک شنبه 28 اردیبهشت 1393, 10:08 صبح
اگه به جای int از short استفاده کنم هم آیا تاثیری داره؟ چون مثلا برای شمارشگر حلقه و ... به عدد های بزرگ نیازی نیست.
و اگه پارامتر ها را فینال کنم هم آیا تاثیری داره؟

public void ok(final test t, final int ali){}

cups_of_java
یک شنبه 28 اردیبهشت 1393, 10:27 صبح
نه اینطور فکر نمی کنم باشه...
شما اصلن خودتون رو درگیر این ملاحظات نکنید. حتی فاینال کردن توابع خیلی کمکی به شما نمی کنن و این بهینه سازی ها انقدر ریز و کوچیک هستن از نظر زمانی که تاثیری روی اجرای برنامه شما ندارن... اکثر برنامه هایی که با جاوا نوشته میشن برنامه های آکادمیک و تجاری هستن نه درایور های سخت افزاری و یا لایه های سیستم عاملی و ...

dasssnj
یک شنبه 28 اردیبهشت 1393, 10:50 صبح
راستی شما که بلدی میشه یه تاپیک بزنی و در مورد ترد ها و مولتی تردینگ کمی توضیح بدی؟ اصلن نمی دونم چه به درد می خوره.
خیلی ها هستن مثل من با ترد ها مشکل دارن.

cups_of_java
یک شنبه 28 اردیبهشت 1393, 12:30 عصر
شما اگه انگلیسیت ضعیف نیست که با خوندن چند تا مقاله کوچیک و فصل نخ ها تو یه کتاب جاوا به راحتی می تونی درکشون کنی. اگه سوال داشتی بپرس اینجا