PDA

View Full Version : یک مثال عملی که prtable بودن java رو زیر سوال برد !!!



vahid18u
جمعه 06 اردیبهشت 1387, 02:07 صبح
سلام دوستان .
من یه برنامه نوشتم که یه آرایه با طول ورودی می سازه و به طور رندوم توش اطلاعات میریزه بعد به 4 روش مختلف اون رو sort میکنه و زمان انجام هر کدوم از الگوریتم ها رو هم بدست میاره و نتایج sort شده و زمان ها رو توی فایل txt ذخیره میکنه .

من این برنامه رو توی ویستا و fedora و ubuntu اجرا کردم و نتیجه منطقی بود . ولی نکته اینجاست که وقتی روی xp اجرا میکنم زمان یکی از الگوریتم ها همواره صفر میافته !!!! :متعجب:

لازم به ذکره که اون الگوریتم سورت (quick sort) که همیشه با xp صفر میندازه براش بازگشتیه .
اصلا برام قابل باور نیست !!

خوب نتیجه ی اخلاقی اینکه java توی مثال به این کوچکی , مستقل از پلاتفورم بودن خودش رو حفظ نکرده .

لینک دانلود سورس ها و کلاسها و فایل اجرایی http://www.2shared.com/file/3204406/36c01e0f/java_sample.html

fkohantorabi
جمعه 06 اردیبهشت 1387, 07:41 صبح
فکر نکنم این ربطی به مستقل از پلاتفورم بودن ربطی داشته باشه. قرار نیست که jvm سرعت مشابه روی پلاتفورم های مختلف داشته باشه. در عین حال می توانی برنامه رو روی xp بررسی کنی که ببینی تفاوت اصلی چیه. اون شاید معلوم کنه که آیا این واقعا در مورد تفاوت پلاتفورم هست یا نه.

فرزاد-

vahid18u
جمعه 06 اردیبهشت 1387, 17:26 عصر
فکر نکنم این ربطی به مستقل از پلاتفورم بودن ربطی داشته باشه. قرار نیست که jvm سرعت مشابه روی پلاتفورم های مختلف داشته باشه. در عین حال می توانی برنامه رو روی xp بررسی کنی که ببینی تفاوت اصلی چیه. اون شاید معلوم کنه که آیا این واقعا در مورد تفاوت پلاتفورم هست یا نه.

فرزاد-

اصلا دقت کردی چی گفتم دوست عزیز ؟ گفتم که روی XP اجرا کردم . خوب مسلمه که یه الگوریتم sort نمیتونه 10000 عدد رو زیر 1 میلی ثانیه سورت کنه ! لا اقل این چیزیه که اجرای برنامه روی پلاتفورمای دیگه به من میگه . چطور میشه یهو توی xp همواره صفر میشه ؟

اصلا شما بگو منطق برنامه ی من مشکل داره . دو جواب مختلف من دارم میگیرم همواره . اگر منطق مشکل داشته باشه تو تموم پلاتفورم ها داره .

unix_svr4
جمعه 06 اردیبهشت 1387, 18:50 عصر
دوست عزیز vahid18u
جاوا خیلی وقته که امتحانش رو در مورد مستقل بودن از پلاتفرم پس داده! شما نمی توانید با یک مثال ساده اثبات کنید که جاوا Croos-Plarform نیست!
شاید jvm شما باگ دارد. الان آخرین نسخه Java 6 Update 6 است؟ شما با کدام نسخه برنامه را اجرا می کنید؟؟؟
بهر حال هیچوقت تصمیم نگیرید. برنامه خود را Trace و Debug کنید، شاید واقعا برنامه شما یک مشکل منطقی دارد.

موفق باشید.

fkohantorabi
جمعه 06 اردیبهشت 1387, 19:03 عصر
اصلا دقت کردی چی گفتم دوست عزیز ؟ گفتم که روی XP اجرا کردم . خوب مسلمه که یه الگوریتم sort نمیتونه 10000 عدد رو زیر 1 میلی ثانیه سورت کنه ! لا اقل این چیزیه که اجرای برنامه روی پلاتفورمای دیگه به من میگه . چطور میشه یهو توی xp همواره صفر میشه ؟

اصلا شما بگو منطق برنامه ی من مشکل داره . دو جواب مختلف من دارم میگیرم همواره . اگر منطق مشکل داشته باشه تو تموم پلاتفورم ها داره .

هنوز می توانی یک اشتباهی چیزی کرده باشی. خواستی برنامت رو بفرست من وقت کردم بهش یک نگاه می کنم.


فرزاد-

vahid18u
جمعه 06 اردیبهشت 1387, 22:18 عصر
سال شکوفایی و نو آوری هست دیگه
استاد handinux می خواد با مثال عملی نشون بده که جاوا مشکل داره.
http://barnamenevis.org/forum/showthread.php?t=100730
استاد vahid18u با یک quick sort ساده کله portable بودن جاوا رو برد زیر سوال.

جناب فرزاد کهن ترابی من با شما از طریق J2EElist یاهو قبلا آشنا شده ام. آدمی مسئول و بنظر می آیید و این طور که نوشته شده از تحصیلات بالایی هم بر خورد دار هستید. قصد جسارت ندارم ولی به عنوان یک شاگرد حیف شما نیست.
من خودم از طریق email با بعضی از دوستان این فروم در حال ارتباط هستم و کسانی که واقعا دارن کار می کنند و می خوان یاد بگیرند چون من اعلام کردم که دیگه در این فروم چیزی نخواهم نوشت. من الان یکی از دوستان این آدرس رو برام فرستاد با این تیتر بخون و بخند.
ای کاش این گفته های من رو کسی سانسور نکنه. ولی این دوستان که الان نامشونم بردم باید بخودشون افتخار کنند و خسته نباشید بگم بهشون که انقدر نکته بین و نکته سنج هستند.

این مثالهای عملیتونم خواهشن برای من بی سواد و کسانی که مانند من هستند نفرسین برای خود سایت سان بفرستید.
خدا رو چه دیدید شاید فردا همین سان براتون یک پاسپورتی جور کرد و سر از سان و بعدشم به باقی دوستان ایرانی در NASA پیوستید.
اما استاتید خواهشن ما رو راهنمایی کنید که چی کار کنیم اول برناممون decompile نشه بعدهم بشه توی چندتا سیستم عامل مختلف درست جواب بده.
کدام زبان
کدام تکنولوژی را بیشنهاد می کنید؟

این همه شما توضیحات قشنگ دادی ولی هنوز یه چیز حل نشده ! هنوز صورت مسئله حل نشده !
من اگر هیچ چیز هم از جاوا نفهمم میتونم این رو بفهمم که الان به یه تناقض (هر چند کوچک و هرچند فقط در ذهن من) بوجود آمده . همین مسایل هست که آدم رو میکشونه به سمت یادگیری بیشتر . شاید اگه شما جای من بودی و چنین تناقضی رو میدیدی (هر چند کوچک) به چشمات شک میکردی و به جای طرح این سوال توی فروم مثلا میرفتی چشم پزشکی ! بالاخره
احتمال وجود باگ توی چشم شما بیشتره تا وجود باگ توی یه پروژه ی مهندسی آمریکایی!!!!

چقدر خوب میشد قبل از هر حرفی یادمون نره که بالاخره مساله قراره تهش حل بشه !!! نیومدیم که بحث و جدل کنیم !
و هر بچه ای هم میفهمه مجهول مساله چیه الان .
اگه فکر میکنید مجهول مساله قابل حله بسم الله ! این گوی و این میدان !

vahid18u
جمعه 06 اردیبهشت 1387, 22:21 عصر
دوست عزیز vahid18u
جاوا خیلی وقته که امتحانش رو در مورد مستقل بودن از پلاتفرم پس داده! شما نمی توانید با یک مثال ساده اثبات کنید که جاوا Croos-Plarform نیست!
شاید jvm شما باگ دارد. الان آخرین نسخه Java 6 Update 6 است؟ شما با کدام نسخه برنامه را اجرا می کنید؟؟؟
بهر حال هیچوقت تصمیم نگیرید. برنامه خود را Trace و Debug کنید، شاید واقعا برنامه شما یک مشکل منطقی دارد.

موفق باشید.

بسیار خوب بنده در اسرع وقت برنامه ام رو روی جدیدترین runtime تست خواهم کرد . و نتیجه را اینجا اعلام خواهم کرد .

vahid18u
جمعه 06 اردیبهشت 1387, 22:23 عصر
هنوز می توانی یک اشتباهی چیزی کرده باشی. خواستی برنامت رو بفرست من وقت کردم بهش یک نگاه می کنم.


فرزاد-

مرسی از لطف شما . بعد از تست کردن روی جدیدترین runtime این کار را خواهم کرد .
متشکرم

rezaTavak
شنبه 07 اردیبهشت 1387, 07:26 صبح
Portable بودن جاوا یعنی اینکه که برنامه نوشته شده در تمام ماشینهای مجازی جاوا قابلیت اجرا داشته باشد. این معنی را نمیدهد که پروسه اجرا هم دقیقا در آنها یکی باشد.

یک مثال:

شما در لینوکس ممکن است X داشته باشید یا نداشته باشید. خب به الطبع جاوا در محیطی که X ندارد قابلیت اجرای برنامه گرافیکی را ندارد. که این به معنی غیر قابل انتقال بودن جاوا نیست. مثل این است که کامیپوتر شما به شبکه اینترنت وصل نباشد و از جاوا انتظار داشته باشید فایلی را دانلود کنید.


قرار هم نیست همه ماشینهای مجازی توسط سان تولید شوند. مثلا سان در خصوص موبایلها (ممکن از از سان بخواهند تولید کند اما ...) ماشین مجازی ارائه میکند؟ جواب نه. فقط استاندارد مشخص شده طبق آن است.



البته قابلیت انتقال جاوا همه گیر نیست مثلا در خصوص JNI.

یا اینکه کلا اینطور نیست که جاوا مستقل از سیستم عامل و ماشین باشد. در واقع ماشین مجازی جاوا یک مفسر است. مثل اینکه شما در پیتون کدی را بنویسید و کلا کد را در تمام سیستم عاملها اجرا کنید.

kobari
شنبه 07 اردیبهشت 1387, 12:01 عصر
در مستندات جاوا ذکر شده است که کامپایلر جاوا برای بالا بردن سرعت پردازش، بر روی برخی از کد ها که نیازی به بایت کد کردن آنها نیست دقیقآ عمل کامپایل را منطبق بر دستورات ماشین native بر روی آنها انجام میدهد تا بدون تفسیر توسط ماشین مجازی مستقیمآ بر روی سیستم عامل قابل اجرا باشد . از جمله این کدها میتوان به کدهایی که شامل عملیات arithmetic است اشاره کرد که احتمالآ برنامه شما نیز در حال استفاده از این نوع کدها می باشد.
احتمال می رود که کد شما دارای باگهایی باشد که بدلیل robust بودن و بالا بودن آستانه تحمل سیستم عاملهای خانوده UNIX و LINUX در مقابل باگها، بر روی این گونه پلاتفرمها آشکار نشود و بلعکس برروی XP که سیستم عامل ضعیفی در مقابل باگها است، خود را نشان دهد.
بنا براین بهتر است بجای متهم کردن جاوا به غیر پرتابل بودن، همانطور که دوستان دیگر اشاره کردند سورس برنامه خودتان برای بررسی در فروم قرار دهید تا مشکل شما بصورت دقیقتری توسط دیگران مورد بررسی قرار گیرد.

vahid18u
شنبه 07 اردیبهشت 1387, 19:36 عصر
لینک دانلود کلاسها و سورس ها و فایل .jar :

http://www.2shared.com/file/3204406/36c01e0f/java_sample.html
------------------------------------------------------------------------------------------

سورس برنامه :


/*
* Sort_algorithm.java
*
* Created on April 17, 2008, 11:23 PM
*
*/
import java.util.Random;
import java.io.*;


class Sort_algorithm{
private int input_array[];
private int size;
private int Insertion[];
private int merge[];
private int quick[];
private int bubble[];
private int temp[];
private long start_bubble;
private long start_merge;
private long start_Insertion;
private long start_quick;
private long end_bubble;
private long end_merge;
private long end_Insertion;
private long end_quick;
Sort_algorithm(int s){
size=s;
input_array=new int[size];
bubble=new int[size];
Insertion=new int[size];
quick=new int[size];
merge=new int[size];
temp=new int [size];

}
void input_data(){
Random randomNumbers=new Random();
int number;
for(int counter=0;counter<size;counter++)
{
number=1+randomNumbers.nextInt(5000);
input_array[counter]=number;

bubble[counter]=number;
Insertion[counter]=number;
quick[counter]=number;
merge[counter]=number;


}
}//input
void bubble_sort(){
int i,j,temp;

start_bubble=System.currentTimeMillis();
//bubble sort algorithm starts from here
for(i=0;i<size;i++)
{
for(j=0;j<i;j++)
{
if (bubble[i]<bubble[j]){
temp=bubble[i];
bubble[i]=bubble[j];
bubble[j]=temp;
}
}
}
System.out.println("Bubble sort was successfully done.\n");
//bubble sort algorithm finishs here




end_bubble=System.currentTimeMillis();
}


void Insertion_sort(){
int i,j,current;

start_Insertion=System.currentTimeMillis();
//Insertion sort algorithm starts from here
for(j=1;j<size;j++)
{
current=Insertion[j];
i=j-1;
while ((i>=0) &&(Insertion[i]>current) )
{
Insertion[i+1]=Insertion[i];
i--;
}//while
Insertion[i+1]=current;

}

System.out.println("Insertion sort was successfully done.\n");
//Insertion sort algorithm finishs here
end_Insertion=System.currentTimeMillis();
}

void write_in_file1(){
String s="random input data: ";
FileOutputStream f0;
try
{
f0=new FileOutputStream ("random_input.txt");
for(int i=0;i<size;i++){
s=s+input_array[i];
s=s+", ";
}
new PrintStream(f0).println (s);
System.out.println("\nrandom input data were stored to random_input.txt\n");
f0.close();
}
catch (IOException e)
{
System.err.println ("Unable to write to file random_input.txt\n");
System.exit(-1);
}


}//write_in_file1
void write_result(){

System.out.print("\nPLEASE WAIT while program writes the results to result.txt\n");
FileOutputStream f1;
try
{
f1=new FileOutputStream ("result.txt");

String s="Results: \n"
+"bubble sort run time : "+(end_bubble-start_bubble)+" ms\n"
+"Insertion sort run time : "+(end_Insertion-start_Insertion)+" ms\n"
+"Merge sort run time : "+(end_merge-start_merge)+" ms\n"
+"Quick sort run time : "+(end_quick-start_quick)+" ms\n"
+"--------------------\n"
+"bubble sort result: \n";
for(int i=0;i<size;i++){
s=s+bubble[i];
s=s+", ";}
s=s+"\nalgorithm run time : "
+(end_bubble-start_bubble)+" ms\n--------------------\n";
new PrintStream(f1).println (s);

s="Insertion sort result: \n";
for(int i=0;i<size;i++){
s=s+Insertion[i];
s=s+", ";}
s=s+"\nalgorithm run time : "
+(end_Insertion-start_Insertion)+" ms\n--------------------\n";
new PrintStream(f1).println (s);


s="Merge sort result: \n";
for(int i=0;i<size;i++){
s=s+merge[i];
s=s+", ";}
s=s+"\nalgorithm run time : "
+(end_merge-start_merge)+" ms\n--------------------\n";
new PrintStream(f1).println (s);

s="Quick sort result: \n";
for(int i=0;i<size;i++){
s=s+quick[i];
s=s+", ";}
s=s+"\nalgorithm run time : "
+(end_quick-start_quick)+" ms\n--------------------\n";
new PrintStream(f1).println (s);


f1.close();
}//try

catch (IOException e)
{
System.err.println ("Unable to write to file result.txt");
System.exit(-1);
}

}

//////////////////////////////////////////////////////////////
public void Merge_sort()
{
start_merge=System.currentTimeMillis();
//merge sort algorithm starts from here
sortArray( 0, size-1 ); // split entire array
System.out.println("merge sort was successfully done.\n");
//merge sort algorithm finishs here
end_merge=System.currentTimeMillis();


} // end method sort

private void sortArray( int low, int high )
{
// test base case; size of array equals 1
if ( ( high - low ) >= 1 ) // if not base case
{
int middle1 = ( low + high ) / 2; // calculate middle of array
int middle2 = middle1 + 1; // calculate next element over


// split array in half; sort each half (recursive calls)
sortArray( low, middle1 ); // first half of array
sortArray( middle2, high ); // second half of array

// merge two sorted arrays after split calls return
merge_it ( low, middle1, middle2, high );
} // end if
} // end method split

// merge two sorted subarrays into one sorted subarray


private void merge_it( int left, int middle1, int middle2, int right )
{
int leftIndex = left; // index into left subarray
int rightIndex = middle2; // index into right subarray
int combinedIndex = left; // index into temporary working array
int[] combined = new int[ size ]; // working array

// merge arrays until reaching end of either
while ( leftIndex <= middle1 && rightIndex <= right )
{
// place smaller of two current elements into result
// and move to next space in arrays
if ( merge[ leftIndex ] <= merge[ rightIndex ] )
combined[ combinedIndex++ ] = merge[ leftIndex++ ];
else
combined[ combinedIndex++ ] = merge[ rightIndex++ ];
} // end while

// if left array is empty
if ( leftIndex == middle2 )
// copy in rest of right array
while ( rightIndex <= right )
combined[ combinedIndex++ ] = merge[ rightIndex++ ];
else // right array is empty
// copy in rest of left array
while ( leftIndex <= middle1 )
combined[ combinedIndex++ ] = merge[ leftIndex++ ];

// copy values back into original array
for ( int i = left; i <= right; i++ )
merge[ i ] = combined[ i ];

} // end method merge

// method to output certain values in array


void Quick_sort()
{
start_quick=System.currentTimeMillis();
//quick sort algorithm starts from here
qsort(0, size-1);
System.out.println("quick sort was successfully done.\n");
//quick sort algorithm finishs here
end_quick=System.currentTimeMillis();

}

public void qsort(int low, int high)
{
if (low >= high) return;
int p = partition(low, high);
qsort(low, p);
qsort(p + 1, high);
}

private int partition(int low, int high)
{
// First element
int pivot = quick[low];

// Middle element
//int middle = (low + high) / 2;
//int pivot = a[middle];
int temp;
int i = low - 1;
int j = high + 1;
while (i < j)
{
i++; while (quick[i] < pivot) i++;
j--; while (quick[j] > pivot) j--;
if (i < j)
{
temp=quick[i];
quick[i]=quick[j];
quick[j]=temp;
}
}
return j;
}


}//Sort_algorithm


/*
* sortclass.java
*
* Created on April 17, 2008, 11:21 PM
*
*/
import java.util.Scanner;
public class sortclass {
private int arrays[];

public static void main(String args[]){
Scanner input=new Scanner(System.in);
int size;
System.out.print("Enter the size of input array : ");
size=input.nextInt();
Sort_algorithm sort_algorithm=new Sort_algorithm(size);
sort_algorithm.input_data();
sort_algorithm.write_in_file1();
sort_algorithm.bubble_sort();
sort_algorithm.Insertion_sort();
sort_algorithm.Merge_sort();
sort_algorithm.Quick_sort();
sort_algorithm.write_result();
}

}




----------------------------------------------------------------
این برنامه اولش یه عدد میگیره معادل طول آرایه ای که میخواد سورت کنه . مثلا بدید 3000
بعد به صورت راندوم عدد میریزه توش و عدد ها رو میریزه توی فایلی به نام random_input.txt در کنار فایل اجرایی .

نمونه ی فایل random_input.txt :


random input data: 1695, 3496, 3614, 3706, 4535, 2861, 4563, 2141, 2663, 3396, 4643, 264, 4501, 4095, 4679, 4121, 4948, 4300, 239, 2882, 4793, 2251, 3473, 3760, 4724, 1967, 1795, 469, 381, 1970, 2669, 3369, 1288, 1016, 4734, 2500, 1999, 838, 4041, 3302, 971, 955, 2179, 1295, 631, 2140, 1964, 3706, 177, 2190, 1664, 1380, 3357, 732, 4521, 2803, 1223, 1865, 2275, 3073, 37, 2975, 3756, 4152, 2327, 3054, 1861, 3911, 500, 1992, 3881, 3274, 4130, 841, 993, 4665, 2937, 2579, 1385, 4543, 1765, 1288, 2515, 4434, 1503, 41, 4358, 354, 3695, 4891, 906, 2442, 1743, 2193, 4411, 516, 4359, 4940, 168, 1009, 1024, 112, 2567, 710, 4343, 216, 1942, 3234, 4521, 4002, 4312, 684, 3661, 4500, 4363, 4913, 4427, 2198, 330, 1179, 4719, 1953, 1340, 3157, 1929, 645, 1112, 4930, 4236, 2000, 4394, 4038, 2625, 2530, 191, 4172, 2879, 174, 4353, 839, 2001, 2395, 1671, 2956, 1189, 689, 4156, 1068, 4660, 2318, 2947, 3840,بعد 4 الگوریتم مختلف سورت رو روش انجام میده و زمان اجرای هر کدوم رو هم میگیره . بعد نتایج سورت ها و زمان ها رو میریزه توی فایلی به اسم result.txt

نمونه ی فایل result.txt :

Results:

bubble sort run time : 401 ms
Insertion sort run time : 117 ms
Merge sort run time : 548 ms
Quick sort run time : 16 ms
--------------------
bubble sort result:
1, 1, 1, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 7, 8, 8, 8, 8, 9, 9, 10, 11, 12, 12, 13, 15, 16, 16, 17, 18, 19, 19, 19, 19, 21, 21, 22, 22, 23, 23, 23, 23, 24, 25, 25, 28, 29, 29, 29, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 35, 35, 37, 37, 37, 37, 37, 38, 39, 39, 39, 39, 39, 40, 40, 41, 41, 41, 41, 41, 43, 43, 43, 44, 44, 44, 45, 45, 46, 46, 48, 48, 50, 51, 51, 51, 51, 51, 51, 52, 52, 53, 53, 54, 54, 54, 55, 55, 57, 57, 57, 57, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 61, 61, 62, 65, 65, 65, 65, 66, 67, 67, 68, 68, 69, 69, 69, 70, 70, 71, 72, 72, 72, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 76, 78, 79, 79, 79, 79, 79, 80, 80, 80, 80, 81, 81, 83, 84, 84, 84, 85, 85, 86, 87, 87, 87..........---------------------------
و ما مشکل کار اینجاست که توی ویندوز xp نتیجه ی quick sort همواره صفره .

اگر توی xp یا vista خواستید نتیجه ی text رو ببینید ترجیحا با wordpad ببینید نه notepad .

محیط اجراش هم توی خط فرمان فقط .

vahid18u
شنبه 07 اردیبهشت 1387, 19:48 عصر
Portable بودن جاوا یعنی اینکه که برنامه نوشته شده در تمام ماشینهای مجازی جاوا قابلیت اجرا داشته باشد. این معنی را نمیدهد که پروسه اجرا هم دقیقا در آنها یکی باشد.

یک مثال:

شما در لینوکس ممکن است X داشته باشید یا نداشته باشید. خب به الطبع جاوا در محیطی که X ندارد قابلیت اجرای برنامه گرافیکی را ندارد. که این به معنی غیر قابل انتقال بودن جاوا نیست. مثل این است که کامیپوتر شما به شبکه اینترنت وصل نباشد و از جاوا انتظار داشته باشید فایلی را دانلود کنید.


قرار هم نیست همه ماشینهای مجازی توسط سان تولید شوند. مثلا سان در خصوص موبایلها (ممکن از از سان بخواهند تولید کند اما ...) ماشین مجازی ارائه میکند؟ جواب نه. فقط استاندارد مشخص شده طبق آن است.



البته قابلیت انتقال جاوا همه گیر نیست مثلا در خصوص JNI.

یا اینکه کلا اینطور نیست که جاوا مستقل از سیستم عامل و ماشین باشد. در واقع ماشین مجازی جاوا یک مفسر است. مثل اینکه شما در پیتون کدی را بنویسید و کلا کد را در تمام سیستم عاملها اجرا کنید.

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

vahid18u
شنبه 07 اردیبهشت 1387, 19:49 عصر
در مستندات جاوا ذکر شده است که کامپایلر جاوا برای بالا بردن سرعت پردازش، بر روی برخی از کد ها که نیازی به بایت کد کردن آنها نیست دقیقآ عمل کامپایل را منطبق بر دستورات ماشین native بر روی آنها انجام میدهد تا بدون تفسیر توسط ماشین مجازی مستقیمآ بر روی سیستم عامل قابل اجرا باشد . از جمله این کدها میتوان به کدهایی که شامل عملیات arithmetic است اشاره کرد که احتمالآ برنامه شما نیز در حال استفاده از این نوع کدها می باشد.
احتمال می رود که کد شما دارای باگهایی باشد که بدلیل robust بودن و بالا بودن آستانه تحمل سیستم عاملهای خانوده UNIX و LINUX در مقابل باگها، بر روی این گونه پلاتفرمها آشکار نشود و بلعکس برروی XP که سیستم عامل ضعیفی در مقابل باگها است، خود را نشان دهد.
بنا براین بهتر است بجای متهم کردن جاوا به غیر پرتابل بودن، همانطور که دوستان دیگر اشاره کردند سورس برنامه خودتان برای بررسی در فروم قرار دهید تا مشکل شما بصورت دقیقتری توسط دیگران مورد بررسی قرار گیرد.
:متفکر:
مرسی از توضیحاتتون . اگر فرصت کردید شما هم نگاهی به کد هام بندازید . متشکرم

fkohantorabi
شنبه 07 اردیبهشت 1387, 20:59 عصر
:متفکر:
مرسی از توضیحاتتون . اگر فرصت کردید شما هم نگاهی به کد هام بندازید . متشکرم

من رو دستگاه خودم اجراش کردم و quicksort در 10 میلی ثانیه انجام شد. دستگاه من تک cpu هستش و از جاوا 1.6.0 استفاده می کنم. در ضمن سیستم عامل ویندوز xp هستش.



فرزاد-

vahid18u
شنبه 07 اردیبهشت 1387, 21:40 عصر
من رو دستگاه خودم اجراش کردم و quicksort در 10 میلی ثانیه انجام شد. دستگاه من تک cpu هستش و از جاوا 1.6.0 استفاده می کنم. در ضمن سیستم عامل ویندوز xp هستش.



فرزاد- :متعجب: جدی میگی ؟ wow مسئله داره پیچیده میشه ! من روی 2 تا xp تست کردم 0 شد .
به هر حال متشکرم دوست عزیز . من روی xp های دیگری هم تست میکنم ببینم مشکل چیه .
تشکر از توجهتون

kobari
شنبه 07 اردیبهشت 1387, 22:18 عصر
در مستندات جاوا ذکر شده است که کامپایلر جاوا برای بالا بردن سرعت پردازش، بر روی برخی از کد ها که نیازی به بایت کد کردن آنها نیست دقیقآ عمل کامپایل را منطبق بر دستورات ماشین native بر روی آنها انجام میدهد تا بدون تفسیر توسط ماشین مجازی مستقیمآ بر روی سیستم عامل قابل اجرا باشد .
با عرض پوزش من باید بخش اول جمله ام را بشکل زیر تصحیح کنم:
در مستندات جاوا ذکر شده است که هرچند برنامه های جاوا به بایت کت تبدیل میشوند اما پلاتفرم جاوا برای بالا بردن سرعت پردازش تمامآ از بایت کد تشکیل نشده است و بخشهایی از آن که در ارتباط با محاسبات است از کد ماشین native تشکیل شده است . تا از این طریق برنامه های در حال اجرا با سرعت بلایی اجرا شوند . متدهایی نیز که رشته کاراکترها را manipulate میکنند از این جمله اند .

تست اولیه برنامه برروی دستگاه من با سیستم XP و java 1.6.0.3 برای یک آرایه 10000 تایی نتیجه زیر را حاصل کرد
Quick sort run time : 0 ms

fkohantorabi
شنبه 07 اردیبهشت 1387, 22:39 عصر
:متعجب: جدی میگی ؟ wow مسئله داره پیچیده میشه ! من روی 2 تا xp تست کردم 0 شد .
به هر حال متشکرم دوست عزیز . من روی xp های دیگری هم تست میکنم ببینم مشکل چیه .
تشکر از توجهتون

یک تستی می توانی بکنی اینه که وقتی می پرسه سایز ورودی چقدر بری توی task manager و affinity پروسس جاوا را بزاری روی یک cpu و ببینی آیا فرقی میکنه یا نه. سیستم عاملهای مختلف می توانند کاملا سیاست متفاوتی نسبت به اینکه چگونه cpu رو بین پروسس ها تقسیم کنند دارند.


فرزاد-

vahid18u
یک شنبه 08 اردیبهشت 1387, 00:21 صبح
با عرض پوزش من باید بخش اول جمله ام را بشکل زیر تصحیح کنم:
در مستندات جاوا ذکر شده است که هرچند برنامه های جاوا به بایت کت تبدیل میشوند اما پلاتفرم جاوا برای بالا بردن سرعت پردازش تمامآ از بایت کد تشکیل نشده است و بخشهایی از آن که در ارتباط با محاسبات است از کد ماشین native تشکیل شده است . تا از این طریق برنامه های در حال اجرا با سرعت بلایی اجرا شوند . متدهایی نیز که رشته کاراکترها را manipulate میکنند از این جمله اند .

تست اولیه برنامه برروی دستگاه من با سیستم XP و java 1.6.0.3 برای یک آرایه 10000 تایی نتیجه زیر را حاصل کرد
Quick sort run time : 0 ms

ممنون از توضیحاتتون دوست گرامی . و متشکر از این که برنامه رو تست کردید .

خوب این دوستمون اجرا کرده برنامه رو و نتیجه همون بود که گفتم . حالا دو تا مورد داریم که هردو روی XP هستن و نتایج متفاوته . دوستان حرفه ای کمک کنن . مشکل کجاست ؟

vahid18u
یک شنبه 08 اردیبهشت 1387, 00:25 صبح
یک تستی می توانی بکنی اینه که وقتی می پرسه سایز ورودی چقدر بری توی task manager و affinity پروسس جاوا را بزاری روی یک cpu و ببینی آیا فرقی میکنه یا نه. سیستم عاملهای مختلف می توانند کاملا سیاست متفاوتی نسبت به اینکه چگونه cpu رو بین پروسس ها تقسیم کنند دارند.
فرزاد-
:متفکر: فکر جالبیه . من الان xp ندارم . بعدا تست میکنم .

fkohantorabi
یک شنبه 08 اردیبهشت 1387, 02:25 صبح
:متفکر: فکر جالبیه . من الان xp ندارم . بعدا تست میکنم .

من حرفم رو پس می گیرم. من به سورس برنامه هنوز نگاه نکرده بودم و الان که نگاه کردم این مساله نباید تصیری داشته باشه.


فرزاد-

fkohantorabi
یک شنبه 08 اردیبهشت 1387, 02:49 صبح
:متفکر: فکر جالبیه . من الان xp ندارم . بعدا تست میکنم .

من یک مقدار برنامه رو دیباگ کردم و بنظر میاد که از جهتی که الگوریتم quicksort از هیچ لوپی استفاده نمی کند و فقط از call stack استفاده می کند دارای سرعت متفاوت روی osهای مختلف داشته باشد. من دقیقا نمی دونم که چقدر jvm برای اینجور چیزها از توانایی های os استفاده می کند ولی دور از ذهن هم نمیدونم اگر کمی ارتباط این وسط وجود داشته باشد. کاربرهای دیگه که در مورد ساختار jvm و ارتباطش با os بیشتر می دونند شاید بهتر باشه که در این مورد نظر بدن.

در ضمن من این برنامه رو روی یک کامپیوتر بهتر اجرا کردم و با ورودی 3000تایی همون جواب 0 رو گرفتم ولی با ورودی 20000تایی دیگه مدت زمان صفر نبود که تا همین جا برنامه تست sanity رو پاس می کنه. در ضمن هم زیاد هم دور از ذهن نیست که Vista کلا ساختار خیلی مهکمی نداشته باشه ولی چون من اصولا یک رب بیشتر با ویستا کار نکردم سعی میکنم که زیاد حرف نزنم. :چشمک:


فرزاد-

vahid18u
یک شنبه 08 اردیبهشت 1387, 12:55 عصر
من یک مقدار برنامه رو دیباگ کردم و بنظر میاد که از جهتی که الگوریتم quicksort از هیچ لوپی استفاده نمی کند و فقط از call stack استفاده می کند دارای سرعت متفاوت روی osهای مختلف داشته باشد. من دقیقا نمی دونم که چقدر jvm برای اینجور چیزها از توانایی های os استفاده می کند ولی دور از ذهن هم نمیدونم اگر کمی ارتباط این وسط وجود داشته باشد. کاربرهای دیگه که در مورد ساختار jvm و ارتباطش با os بیشتر می دونند شاید بهتر باشه که در این مورد نظر بدن.

در ضمن من این برنامه رو روی یک کامپیوتر بهتر اجرا کردم و با ورودی 3000تایی همون جواب 0 رو گرفتم ولی با ورودی 20000تایی دیگه مدت زمان صفر نبود که تا همین جا برنامه تست sanity رو پاس می کنه. در ضمن هم زیاد هم دور از ذهن نیست که Vista کلا ساختار خیلی مهکمی نداشته باشه ولی چون من اصولا یک رب بیشتر با ویستا کار نکردم سعی میکنم که زیاد حرف نزنم. :چشمک:


فرزاد-

تشکر مجدد از شما . راست به نظر من اگه 20000 بار یه متد خالی از کد هم صدا زده بشه بیشتر از 1ms باید طول بکشه ! ولی خوب واقعا خیلی باید عجیب باشه که این quick sort اینقدر سریع نسبت به بقیه توی جاوا run میشه .

rezaTavak
یک شنبه 08 اردیبهشت 1387, 13:13 عصر
دقت کنید جاوا بدون خطا در هر سیستمی کار میکند اصل بر نتیجه است اگر اینطوری نبود بسیاری از چیزها در جاوا نبود مثلا :



File f = new File("a");
System.out.println(f.separator);
در یونیکس / و در ویندوز \\ جواب میدهد. یا :


f.pathSeparator
در یونیکس : و در ویندوز ; است!



پس من هم چه نتیجه‌ای بگیرم؟


یا این لینک:
http://java.sun.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/UnixSystem.html

mazdadoost
پنج شنبه 19 اردیبهشت 1387, 10:36 صبح
سلام به همهگی!
من تست کردم با ورودی : 20000 نتیجه :
Results:
bubble sort run time : 1331 ms
Insertion sort run time : 571 ms
Merge sort run time : 5268 ms
Quick sort run time : 10 ms
ویندوز من -JDK6-XP SP2 Last FullUpdate jun2008
با توجه به موارد بالا :
1- ممکنه سیستم وCPU یکی از سورت هارو با توجه به قدرتشون و روش Native پیاده سازی در پلت فرم و همچنین الویت بندی خود CPU با سرعت بیشتری انجام بدن.یعنی در کسری از میلی ثانیه.پروفایلر من هم نمیتونه کسر کمتر از این رو رد یابی کنه.(جالبه بدونید پروفایلر برای Quick sort عدد 12 رو نشون میداد!)
2-من تا حالا در سیستم های چند هسته ای Performance Tuning نکردم ولی بعید نیست که پیاده سازی System.CurentTime.. در ویندوز با توجه به Atomic بودن جاوا برای خودش - ویندوز برای خودش و Cpu برای خودش با اخلال مواجه شده! یا مثلا پردازنده هایی که 64 بیت بودن رو تقلید میکنن.!این برای سیستم هایی که از همون ابتدا با تفکر چند پردازشگری مثل linux هستن و ورژن های عادیشون تا 32 CPU رو پشتیبانی میکنن قدر مسلم کمتر پیش میاد!
3-طبق استاندارد برنامه شما در همه پلت فرم ها باید اجرا شه!اما مستقل از پلات فرم بودن به این معنی نیست که همه چیز یک جور به نظر بیاد!
مثال ها : UI>در هر سیستم عاملی یه جور نمایش داده میشه.شکل و کارایی متفاوت! IO> در javaEE > هر شرکتی که EE رو پیاده کرده یه شکل نحوه اختصاصی برای دیپلوی نهایی داره.کد ها و روش برنامه یکسان هستن ولی در نهایت این مثلا Jrun.xml-Jboss.xml و غیره هستن که برنامه EE شما رو به کانتینر اون شرکت معرفی میکنه!

4-در دنیای واقعی تا الان Write onse ,run anywhere و نه Write onse ,Deploy anywhere به شکل ایده ال عملی نشدن.اما پیشرفت ها عالی بوده!و واقعا در هزینه ها در توسعه برنامه برای سیستم های مختلف با همین ایده کم شده .
با تشکر.

saeed_Z_F
پنج شنبه 19 اردیبهشت 1387, 11:07 صبح
سلام

این احتمال رو هم در نظر بگیرید زمان مرتب سازی آنقدر کوچک هست که به سمت صفر میل می کند .

vahid18u
پنج شنبه 26 اردیبهشت 1387, 20:39 عصر
سلام به همهگی!
من تست کردم با ورودی : 20000 نتیجه :
Results:
bubble sort run time : 1331 ms
Insertion sort run time : 571 ms
Merge sort run time : 5268 ms
Quick sort run time : 10 ms
ویندوز من -JDK6-XP SP2 Last FullUpdate jun2008
با توجه به موارد بالا :
1- ممکنه سیستم وCPU یکی از سورت هارو با توجه به قدرتشون و روش Native پیاده سازی در پلت فرم و همچنین الویت بندی خود CPU با سرعت بیشتری انجام بدن.یعنی در کسری از میلی ثانیه.پروفایلر من هم نمیتونه کسر کمتر از این رو رد یابی کنه.(جالبه بدونید پروفایلر برای Quick sort عدد 12 رو نشون میداد!)
2-من تا حالا در سیستم های چند هسته ای Performance Tuning نکردم ولی بعید نیست که پیاده سازی System.CurentTime.. در ویندوز با توجه به Atomic بودن جاوا برای خودش - ویندوز برای خودش و Cpu برای خودش با اخلال مواجه شده! یا مثلا پردازنده هایی که 64 بیت بودن رو تقلید میکنن.!این برای سیستم هایی که از همون ابتدا با تفکر چند پردازشگری مثل linux هستن و ورژن های عادیشون تا 32 CPU رو پشتیبانی میکنن قدر مسلم کمتر پیش میاد!
3-طبق استاندارد برنامه شما در همه پلت فرم ها باید اجرا شه!اما مستقل از پلات فرم بودن به این معنی نیست که همه چیز یک جور به نظر بیاد!
مثال ها : UI>در هر سیستم عاملی یه جور نمایش داده میشه.شکل و کارایی متفاوت! IO> در javaEE > هر شرکتی که EE رو پیاده کرده یه شکل نحوه اختصاصی برای دیپلوی نهایی داره.کد ها و روش برنامه یکسان هستن ولی در نهایت این مثلا Jrun.xml-Jboss.xml و غیره هستن که برنامه EE شما رو به کانتینر اون شرکت معرفی میکنه!

4-در دنیای واقعی تا الان Write onse ,run anywhere و نه Write onse ,Deploy anywhere به شکل ایده ال عملی نشدن.اما پیشرفت ها عالی بوده!و واقعا در هزینه ها در توسعه برنامه برای سیستم های مختلف با همین ایده کم شده .
با تشکر.

مرسی ازتوضیحات کاملتون . ولی آیا میشه گفت که با توجه به مورد ۳ شما میشه نتیجه گرفت که روی برخی سیستم ها صفر شدن زمان اجرای quick sort برای حتی تعداد داده های بالا همچنان مورد ۳ قابل توجیه نیست ؟

mazdadoost
پنج شنبه 26 اردیبهشت 1387, 23:03 عصر
دوست من :
چرا که نه.چنانچه هر مشکل نرم افزاری در هر سطحی معرف نوعی اخلال در برنامه و شکل صحیح اجراش در عمل باشه مثلا اینکه در یک برنامه با ماموریت کنترل منابع بحرانی مثل برنامه های اتوماسیون صنعتی .مسئله زمانبندی سیستم به شدت حیاتیه.در صورتی که برنامه به جاوا نوشته شه, انتظار داریم برنامه در تمام سیستم های کارخونه به ما زمان انجام شدن یه پروسه مثلا ترکیب دو ماده و ایجاد محصول رو بده!اگه این زمان ها برای یک سیستم لینوکس با یه سخت افزار و سیستم ویندوز با یک سخت افزار مقادیر متفاوتی از یک منبع (برای مثال یه تراشه PLC که به
یک کوارتز وصل شده بدن عملا سیستم قابلیت اعتمادشو از دست میده.چنین سناریویی بسیار محتمل و البته متداوله!در مورد برنامه شما بنده فقط برنامرو تست و پروفایل کردم.و همونطور که دیدید برای 20000 ورددی عدد 10 میلی ثانیه بدست اومد.تا همین الان هم این برنامه مقداری رو برای الگوریتم آخری گزارش میده.
و این یعنی
JRE
من در این زمینه باگی نداره.حالا بیاین به این مسئله توجه کنیم که آیا در پلت فرمی مثل دات نت که قراره در همه ویندوز هایی که ازش پشتیبانی میکنن به یه شکل اجرا بشه وضعیت به شچه شکله.یه تست کوچک برای لود کردن یه یک دیتاست در حافظه در دو سیستم متفاوت دو عدد متفاوت در دو سیستم جداگانه زمان های متفاوتی رو میده.نکته جالب اینکه با دو بار فراخانی همین متد در فواصل معین در همون سیستم باز هم زمان های مختلف حتی اختلاف های فاحش داره.از طرفی همونطور که گفتم دات نت هم به عنوان یه Runtime
قراره در سیستم های مختلف مایکروسافت یه کاربرد و یک تجربه رو ایجاد کنه مثل جاوا.با این تفاوت که جاوا این کارو با مقیاس بزرگتری انجام میده.بذارید اینطور نتیجه گیری کنم :
1-تنها عاملی که میتونه منجر به اشکالی در برنامه بشه باگه!چنانچه در سیستم من و شما این الگوریتم آخر به هیچ عنوان زمانی رو برای اجرا گزارش نکنه مطمعنا با یه باگ عمومی مواجهیم.همینطور اگه در سیستم من به هر حال عددی بده و برای شما به هر حال نه در اینجا میتونیم بگیم این مسئله مربوط به سیستم شماست.و اینکه احتمالا چیزی در اون سیستم با مشکل مواجهه.در هر صورت باگ وخطا در هر سیستم نرم افزاری و حتی سخت افزاری مخصوصا اگه پیچیده باشه امری مرسوم و متداول!باگ شاخ و دم نداره که.شما در همین مثال شاید با یه باگ مواجه شدین که در شرایط خاصی باعث میشه الگوریتم آخر اصلا برای اجراش زمانی گزارش نکنه!همه سیستم ها لینوکس ویندوز و نرم افزار های مربوطشون تحت شرایطی چنین باگ هایی رو گزارش می کنن.یا با مشکلاتی مواجه میشن.این یه مثال سادست.ما در پروژه های عملیمون باگهایی به مراتب یاس آورتر رو تجربه کردیم!چه در جاوا چه در دات نت.
2-همونطور که عرض کردم مسائلی مثل زمان مصرفی برای یه متد یا در کل یه آلگوریتم در سیستم های متفاوت و روش های متفاوت امری فی نفسه وابسته به سیستم شامل سیستم عامل-سخت افزار I/O
و...خوب اینکه فهمیدن چنین امری چقدر میتونه برای یه برنامه جاوا مهم باشه فقط برای بهینه سازی و افزایش کارایی برنامست.مثل مثالی که برای اتوماسیون صنعتی گفتم اهمیت نداره!
3-حالا برمیگردیم به استقلال از پلت فرم!گفتم که این مسئله یه ایده آل هست.برای مثال آلگوریت های سورت کردن آرایه ها یا Vector
ها در پیاده سازی های مختلف کارایی های مختلفی دارن.استقلال برای پلت فرم یعتی شما در همه سیستم ها با این آلگوریتم ها به یک شکل کار کنید.یا اینکه امضای متد main
در همه سیستم ها به چه شکلی باشه.استقلال از پلت فرم برای جاوا یعنی چه شکلی بودن.یعنی شکل واحد داشتن.نه یک چگونگی داشتن.و این فلسفه جاواست.همین مسئله به ما در درک این مسئله کمک میکه تا بفهمیم در کل این مثال اصولا از نظر منطقی مهمله!چرا که به چگونه بودن پیاده سازی جاوا مربوطه.نه به مشخصاتی که سان برای چه شکلی بودن جاوا در همه سیستم ها به یک شکل واحد وضع کرده.
حالا
IBM به روش خودش SUN یه جور و اراکل یه جور!
امیدوارم مفید بوده باشه. وبا تشکر از لطف شما.

vahid18u
جمعه 27 اردیبهشت 1387, 20:34 عصر
دوست من :
چرا که نه.چنانچه هر مشکل نرم افزاری در هر سطحی معرف نوعی اخلال در برنامه و شکل صحیح اجراش در عمل باشه مثلا اینکه در یک برنامه با ماموریت کنترل منابع بحرانی مثل برنامه های اتوماسیون صنعتی .مسئله زمانبندی سیستم به شدت حیاتیه.در صورتی که برنامه به جاوا نوشته شه, انتظار داریم برنامه در تمام سیستم های کارخونه به ما زمان انجام شدن یه پروسه مثلا ترکیب دو ماده و ایجاد محصول رو بده!اگه این زمان ها برای یک سیستم لینوکس با یه سخت افزار و سیستم ویندوز با یک سخت افزار مقادیر متفاوتی از یک منبع (برای مثال یه تراشه PLC که به
یک کوارتز وصل شده بدن عملا سیستم قابلیت اعتمادشو از دست میده.چنین سناریویی بسیار محتمل و البته متداوله!در مورد برنامه شما بنده فقط برنامرو تست و پروفایل کردم.و همونطور که دیدید برای 20000 ورددی عدد 10 میلی ثانیه بدست اومد.تا همین الان هم این برنامه مقداری رو برای الگوریتم آخری گزارش میده.
و این یعنی
JRE
من در این زمینه باگی نداره.حالا بیاین به این مسئله توجه کنیم که آیا در پلت فرمی مثل دات نت که قراره در همه ویندوز هایی که ازش پشتیبانی میکنن به یه شکل اجرا بشه وضعیت به شچه شکله.یه تست کوچک برای لود کردن یه یک دیتاست در حافظه در دو سیستم متفاوت دو عدد متفاوت در دو سیستم جداگانه زمان های متفاوتی رو میده.نکته جالب اینکه با دو بار فراخانی همین متد در فواصل معین در همون سیستم باز هم زمان های مختلف حتی اختلاف های فاحش داره.از طرفی همونطور که گفتم دات نت هم به عنوان یه Runtime
قراره در سیستم های مختلف مایکروسافت یه کاربرد و یک تجربه رو ایجاد کنه مثل جاوا.با این تفاوت که جاوا این کارو با مقیاس بزرگتری انجام میده.بذارید اینطور نتیجه گیری کنم :
1-تنها عاملی که میتونه منجر به اشکالی در برنامه بشه باگه!چنانچه در سیستم من و شما این الگوریتم آخر به هیچ عنوان زمانی رو برای اجرا گزارش نکنه مطمعنا با یه باگ عمومی مواجهیم.همینطور اگه در سیستم من به هر حال عددی بده و برای شما به هر حال نه در اینجا میتونیم بگیم این مسئله مربوط به سیستم شماست.و اینکه احتمالا چیزی در اون سیستم با مشکل مواجهه.در هر صورت باگ وخطا در هر سیستم نرم افزاری و حتی سخت افزاری مخصوصا اگه پیچیده باشه امری مرسوم و متداول!باگ شاخ و دم نداره که.شما در همین مثال شاید با یه باگ مواجه شدین که در شرایط خاصی باعث میشه الگوریتم آخر اصلا برای اجراش زمانی گزارش نکنه!همه سیستم ها لینوکس ویندوز و نرم افزار های مربوطشون تحت شرایطی چنین باگ هایی رو گزارش می کنن.یا با مشکلاتی مواجه میشن.این یه مثال سادست.ما در پروژه های عملیمون باگهایی به مراتب یاس آورتر رو تجربه کردیم!چه در جاوا چه در دات نت.
2-همونطور که عرض کردم مسائلی مثل زمان مصرفی برای یه متد یا در کل یه آلگوریتم در سیستم های متفاوت و روش های متفاوت امری فی نفسه وابسته به سیستم شامل سیستم عامل-سخت افزار I/O
و...خوب اینکه فهمیدن چنین امری چقدر میتونه برای یه برنامه جاوا مهم باشه فقط برای بهینه سازی و افزایش کارایی برنامست.مثل مثالی که برای اتوماسیون صنعتی گفتم اهمیت نداره!
3-حالا برمیگردیم به استقلال از پلت فرم!گفتم که این مسئله یه ایده آل هست.برای مثال آلگوریت های سورت کردن آرایه ها یا Vector
ها در پیاده سازی های مختلف کارایی های مختلفی دارن.استقلال برای پلت فرم یعتی شما در همه سیستم ها با این آلگوریتم ها به یک شکل کار کنید.یا اینکه امضای متد main
در همه سیستم ها به چه شکلی باشه.استقلال از پلت فرم برای جاوا یعنی چه شکلی بودن.یعنی شکل واحد داشتن.نه یک چگونگی داشتن.و این فلسفه جاواست.همین مسئله به ما در درک این مسئله کمک میکه تا بفهمیم در کل این مثال اصولا از نظر منطقی مهمله!چرا که به چگونه بودن پیاده سازی جاوا مربوطه.نه به مشخصاتی که سان برای چه شکلی بودن جاوا در همه سیستم ها به یک شکل واحد وضع کرده.
حالا
IBM به روش خودش SUN یه جور و اراکل یه جور!
امیدوارم مفید بوده باشه. وبا تشکر از لطف شما.
مرسی از توضیحاتتون . و همچنین از اینکه برنامه رو تست کرده بودین .