আমি জাভাতে কীভাবে একটি সঠিক মাইক্রো-বেঞ্চমার্ক লিখব?


870

আপনি জাভাতে কীভাবে একটি সঠিক মাইক্রো-বেঞ্চমার্ক লিখবেন (এবং চালান)?

আমি কিছু কোডের নমুনা এবং বিভিন্ন বিষয় নিয়ে চিন্তা করার মতামত খুঁজছি।

উদাহরণ: মানদণ্ডের সময় / পুনরাবৃত্তি বা পুনরাবৃত্তি / সময় পরিমাপ করা উচিত এবং কেন?

সম্পর্কিত: স্টপওয়াচ বেঞ্চমার্কিং কি গ্রহণযোগ্য?


কিছু সম্পর্কিত তথ্যের জন্য কয়েক মিনিট আগে [এই প্রশ্ন] [1] দেখুন। সম্পাদনা: দুঃখিত, এটি কোনও উত্তর বলে মনে হচ্ছে না। আমার একটি মন্তব্য হিসাবে পোস্ট করা উচিত ছিল। [1]: স্ট্যাকওভারফ্লো.com
টিয়াগো

এই প্রশ্নের পোস্টারটিকে এই জাতীয় কোনও প্রশ্নে উল্লেখ করার পরিকল্পনা করার পরে আমি উল্লেখ করেছি যে এই প্রশ্নটি বিদ্যমান নেই। সুতরাং এটি এখানে, আশা করি এটি সময়ের সাথে সাথে কিছু ভাল টিপস একত্রিত করবে।
জন নিলসন

5
জাভা 9 মাইক্রো-বেঞ্চমার্কিংয়ের জন্য কিছু বৈশিষ্ট্য সরবরাহ করতে পারে: openjdk.java.net/jeps/230
রায়েডওয়াল্ড

1
@ রেয়েডওয়াল্ড আমি মনে করি যে জেপি জেডিকে কোডে কিছু মাইক্রো বেনমার্ক যুক্ত করার লক্ষ্য রাখে, তবে আমি মনে করি না যে
জেএমএইচ জেডিকে

1
ভবিষ্যত থেকে রেডওয়াল্ড হ্যালো এটি কাটা হয়নি
মাইকেল 16

উত্তর:


787

জাভা হটস্পটের নির্মাতাদের কাছ থেকে মাইক্রো বেনমার্ক লেখার বিষয়ে পরামর্শ :

বিধি 0: জেভিএম এবং মাইক্রো-বেঞ্চমার্কিং এর একটি নামী কাগজ পড়ুন। একটি ভাল একটি ব্রায়ান গোয়েজ, 2005 । মাইক্রো-বেঞ্চমার্ক থেকে খুব বেশি আশা করবেন না; তারা কেবলমাত্র JVM কর্মক্ষমতা বৈশিষ্ট্যের একটি সীমিত পরিসর পরিমাপ করে।

বিধি 1: সর্বদা একটি ওয়ার্মআপ পর্ব অন্তর্ভুক্ত করুন যা আপনার পরীক্ষার কার্নেলটি পুরো পথে চালায়, সময় পর্ব (গুলি) এর আগে সমস্ত সূচনা এবং সংকলনগুলি ট্রিগার করার জন্য যথেষ্ট। (ওয়ার্মআপ পর্বে কম পুনরাবৃত্তি ঠিক আছে thumb থাম্বের বিধিটি কয়েক হাজার হাজার অভ্যন্তরীণ লুপের পুনরাবৃত্তিগুলি)

রুল 2: সর্বদা দিয়ে চালানো -XX:+PrintCompilation, -verbose:gc,, ইত্যাদি যাতে আপনি যাচাই করতে পারেন যে কম্পাইলার এবং জেভিএম অন্যান্য অংশে আপনার সময়জ্ঞান সময়ে অপ্রত্যাশিত কাজ করছেন না।

বিধি ২.১: সময় ও ওয়ার্মআপ পর্যায়ের শুরু এবং শেষে বার্তা মুদ্রণ করুন, যাতে আপনি যাচাই করতে পারবেন যে সময়কালের সময় বিধি 2 থেকে কোনও আউটপুট নেই।

রুল 3: মধ্যে পার্থক্য সচেতন হতে হবে -clientএবং -serverএবং OSR এবং নিয়মিত সংকলন। -XX:+PrintCompilationপতাকা একটি অ্যাট চিহ্ন দিয়ে OSR সংকলন রিপোর্ট উদাহরণস্বরূপ, অ প্রাথমিক এন্ট্রি পয়েন্ট বোঝাতে: Trouble$1::run @ 2 (41 bytes)। আপনি সর্বোত্তম পারফরম্যান্সের পরে থাকলে ক্লায়েন্টকে সার্ভার এবং ওএসআর-এ নিয়মিত পছন্দ করুন।

বিধি 4: আরম্ভের প্রভাব সম্পর্কে সচেতন হন। আপনার টাইমিং পর্বে প্রথমবার মুদ্রণ করবেন না, যেহেতু প্রিন্টিং লোড এবং ক্লাস আরম্ভ করে initial ওয়ার্মআপ পর্বের (বা চূড়ান্ত প্রতিবেদনের পর্যায়ে) বাইরে নতুন ক্লাসগুলি লোড করবেন না, যদি না আপনি নির্দিষ্টভাবে ক্লাস লোডিং পরীক্ষা করে নিচ্ছেন (এবং সেক্ষেত্রে কেবল পরীক্ষার ক্লাস লোড করুন)। এই জাতীয় প্রভাবের বিরুদ্ধে বিধি 2 আপনার প্রতিরক্ষা প্রথম লাইন।

বিধি 5: ডিওপিমাইজেশন এবং পুনঃসংশোধনের প্রভাব সম্পর্কে সচেতন হন। টাইমিং পর্বে প্রথমবারের মতো কোনও কোড পাথ গ্রহণ করবেন না, কারণ সংকলকটি কোডটি আবর্জনা ও পুনঃসংযোগ করতে পারে, পূর্ববর্তী আশাবাদী অনুমানের ভিত্তিতে যে পথটি মোটেও ব্যবহৃত হচ্ছে না। এই জাতীয় প্রভাবের বিরুদ্ধে বিধি 2 আপনার প্রতিরক্ষা প্রথম লাইন।

বিধি 6: সংকলকের মন পড়তে উপযুক্ত সরঞ্জামগুলি ব্যবহার করুন এবং এটি উত্পন্ন কোডটি দেখে অবাক হওয়ার আশা করে expect কোনও কিছুর দ্রুত বা ধীর করে তোলে সে সম্পর্কে তত্ত্বগুলি গঠনের আগে কোডটি নিজেই পরীক্ষা করুন।

বিধি 7: আপনার পরিমাপের শব্দ কমিয়ে দিন। একটি নিখুঁত মেশিনে আপনার মানদণ্ড চালান, এবং বহিরাগতদের এড়িয়ে কয়েকবার চালান। -Xbatchঅ্যাপ্লিকেশনটির সাথে সংকলকটি সিরিয়ালাইজ করতে ব্যবহার করুন এবং সংকলকটিকে -XX:CICompilerCount=1নিজের সাথে সমান্তরালে চলতে বাধা দিতে সেটিং বিবেচনা করুন । জিসি ওভারহেড হ্রাস করতে আপনার যথাসাধ্য চেষ্টা করুন, Xmxসমান (যথেষ্ট বড়) সমপরিমাণ Xmsএবং UseEpsilonGCএটি উপলভ্য থাকলে ব্যবহার করুন ।

বিধি 8: আপনার বেনমার্কের জন্য একটি গ্রন্থাগার ব্যবহার করুন কারণ এটি সম্ভবত আরও দক্ষ এবং ইতিমধ্যে এই একমাত্র উদ্দেশ্যে ডিবাগ করা হয়েছিল। যেমন জাভা জন্য জেএমএইচ , ক্যালিপার বা বিল এবং পলের দুর্দান্ত ইউসিএসডি বেঞ্চমার্ক


5
এটিও একটি আকর্ষণীয় নিবন্ধ ছিল: আইবিএম
জন নিলসন

142
এছাড়াও, আপনি যখন + বা - 15 এমএস নির্ভুলতার সাথে ঠিক না থাকেন তবে সিস্টেম কভারেন্টটাইমমিলিস () কখনই ব্যবহার করবেন না, যা বেশিরভাগ ওএস + জেভিএম সংমিশ্রণে আদর্শ। পরিবর্তে System.nanoTime () ব্যবহার করুন।
স্কট কেরি

5
জাভাওন থেকে কিছু কাগজ: আজুলসিস্টমস
বেসট্যাস

93
এটা লক্ষনীয় যে System.nanoTime()করা হয় না নিশ্চিত চেয়ে বেশি সঠিক বলে System.currentTimeMillis()। এটি কেবল কমপক্ষে যথাযথ হওয়ার গ্যারান্টিযুক্ত। তবে এটি সাধারণত যথেষ্ট নিখুঁত হয়।
মাধ্যাকর্ষণ

41
এর System.nanoTime()পরিবর্তে একজনকে অবশ্যই ব্যবহার করতে হবে তার প্রধান কারণটি System.currentTimeMillis()হ'ল প্রাক্তনটি মনোোটোনিকভাবে বাড়ার গ্যারান্টিযুক্ত। দুটি অনুরোধ ফিরে পেয়েছে মানগুলি বিয়োগ করা currentTimeMillisআসলে নেতিবাচক ফলাফল দিতে পারে, সম্ভবত কিছু সময় এনটিপি ডিমন দ্বারা সিস্টেম সময় সামঞ্জস্য করা হয়েছিল।
ওয়ালধেঞ্জ

239

আমি জানি এই প্রশ্নের উত্তর হিসাবে চিহ্নিত করা হয়েছে তবে আমি দুটি গ্রন্থাগার উল্লেখ করতে চেয়েছিলাম যা মাইক্রো বেঞ্চমার্ক লিখতে আমাদের সহায়তা করে

গুগল থেকে ক্যালিপার

টিউটোরিয়াল শুরু করা

  1. http://codingjunkie.net/micro-benchmarking-with-caliper/
  2. http://vertexlabs.co.uk/blog/caliper

ওপেনজেডিকে থেকে জেএমএইচ

টিউটোরিয়াল শুরু করা

  1. জেভিএম-তে বেঞ্চমার্কিংয়ের সমস্যাগুলি এড়ানো
  2. http://nitschinger.at/Using-JMH-for-Java-Microbenchmarking
  3. http://java-performance.info/jmh/

37
+1 এটিকে গ্রহণযোগ্য উত্তরের বিধি 8 হিসাবে যুক্ত করা যেতে পারে: বিধি 8: কারণ অনেক কিছুই ভুল হতে পারে, আপনার নিজের চেষ্টা করার চেয়ে সম্ভবত একটি বিদ্যমান লাইব্রেরিটি ব্যবহার করা উচিত!
Assylias

8
@ পাঙ্গিয়া জেএমএইচ আজকাল সম্ভবত ক্যালিপারের চেয়ে উচ্চতর, আরও দেখুন: গ্রুপ. google.com/forum/#!msg/mechanical-sympathy/m4opvy4xq3U/…
Assylias

86

জাভা মানদণ্ডের জন্য গুরুত্বপূর্ণ জিনিসগুলি হ'ল:

  • কোড বেশ কয়েকবার চলমান প্রথম জে আই টি JIT উষ্ঞ আপ সময়জ্ঞান আগে এটা
  • সেকেন্ডে বা (আরও ভাল) দশক সেকেন্ডে ফলাফল পরিমাপ করতে সক্ষম হওয়ার জন্য আপনি এটি দীর্ঘকাল চালাচ্ছেন তা নিশ্চিত করুন
  • আপনি System.gc()পুনরাবৃত্তির মধ্যে কল করতে পারবেন না , এটি পরীক্ষার মধ্যে চালানো ভাল ধারণা, যাতে প্রতিটি পরীক্ষা আশা করে কাজ করার জন্য একটি "পরিষ্কার" মেমরির স্থান পাবে। (হ্যাঁ, gc()গ্যারান্টির চেয়ে আরও একটি ইঙ্গিত, তবে এটি সম্ভবত আমার অভিজ্ঞতায় আবর্জনা সংগ্রহ করবে very
  • আমি পুনরাবৃত্তি এবং সময়, এবং সময় / পুনরাবৃত্তির একটি স্কোর প্রদর্শন করতে পছন্দ করি যা স্কেল করা যায় যা "সেরা" অ্যালগরিদম ১.০ এর স্কোর পায় এবং অন্যরা আপেক্ষিক ফ্যাশনে স্কোর হয়। এর অর্থ আপনি একটি দীর্ঘ সময়ের জন্য সমস্ত অ্যালগরিদম চালাতে পারেন , পুনরাবৃত্তি এবং সময় উভয় সংখ্যক ভিন্ন হলেও তবুও তুলনীয় ফলাফল পেতে পারেন।

আমি নেট। নেট মধ্যে একটি বেঞ্চমার্কিং ফ্রেমওয়ার্ক ডিজাইন সম্পর্কে ব্লগিং প্রক্রিয়া করছি। আমি পেয়েছেন দম্পতি এর আগে পোস্ট যা আপনাকে কিছু ধারনা দিতে সক্ষম হতে পারে - না সবকিছু উপযুক্ত হতে হবে অবশ্যই, কিন্তু এটি কিছু হতে পারে।


3
গৌণ নিটপিক: আইএমও "যাতে প্রতিটি পরীক্ষা" হয় "যাতে প্রতিটি পরীক্ষা পেতে পারে" কারণ প্রাক্তন ধারণাটি দেয় যে কল করা gc সর্বদা অব্যবহৃত স্মৃতি মুক্ত করে।
সঞ্জয় টি শর্মা

@ সঞ্জয়টি.শর্মা: আচ্ছা, অভিপ্রায়টি আসলে এটি করে। যদিও এটি কঠোরভাবে গ্যারান্টিযুক্ত নয়, এটি আসলে বেশ শক্তিশালী ইঙ্গিত। পরিষ্কার হতে সম্পাদনা করবে।
জন স্কিটি

1
আমি সিস্টেম.gc () কল করার সাথে একমত নই। এটি একটি ইঙ্গিত, সব। এমনকি "এটি আশা করি কিছু করবে" না। আপনার কখনই এটি কল করা উচিত নয়। এটি প্রোগ্রামিং, শিল্প নয় not
গাইর্জ্যাব্রাহাম

13
@ গ্যাব্রাহাম: হ্যাঁ, এটি একটি ইঙ্গিত - তবে এটি যা আমি দেখেছি সাধারণত গ্রহণ করা উচিত। সুতরাং যদি আপনি ব্যবহার করতে পছন্দ করেন না System.gc(), তবে পূর্ববর্তী পরীক্ষাগুলিতে তৈরি করা সামগ্রীর কারণে আপনি কীভাবে একটি পরীক্ষায় আবর্জনা সংগ্রহকে হ্রাস করার প্রস্তাব করবেন? আমি বাস্তববাদী, গোপনীয় নয়।
জন স্কিটি

9
@ গ্যাব্রাহাম: "গ্রেট ফ্যালব্যাক" বলতে আপনার অর্থ কী তা আমি জানি না। আপনি কী আরও বিস্তারিত বলতে পারেন এবং আবারও - আপনার কাছে আরও ভাল ফলাফল দেওয়ার প্রস্তাব রয়েছে? আমি স্পষ্টভাবে বলেছি যে এটি কোনও গ্যারান্টি নয় ...
জন স্কিটে

48

জেএমএইচ ওপেনজেডিকে সাম্প্রতিক সংযোজন এবং এটি ওরাকল থেকে কিছু পারফরম্যান্স ইঞ্জিনিয়ার লিখেছেন। অবশ্যই এক নজর মূল্য।

জেএমএইচ জাভা এবং অন্যান্য ভাষায় লিখিত ন্যানো / মাইক্রো / ম্যাক্রো বেঞ্চমার্কগুলি জেভিএমকে লক্ষ্য করে বিল্ডিং, চলমান এবং বিশ্লেষণের জন্য জাভা জোতা।

নমুনা পরীক্ষাগুলিতে সমাহিত তথ্যের খুব আকর্ষণীয় টুকরা ।

আরো দেখুন:


1
জেএমএইচ দিয়ে শুরু করার বিষয়ে বিস্তারিত জানতে এই ব্লগ পোস্টটিও দেখুন: psy-lob-saw.blogspot.com/2013/04/…
নিতসান ওয়াকার্ট

অবগতির জন্য, JEP 230: Microbenchmark সুইট একটি হল OpenJDK এই উপর ভিত্তি করে প্রস্তাব জাভা Microbenchmark জোতা (JMH) প্রকল্প। জাভা 9 এর জন্য কাটটি তৈরি করেনি তবে পরে যুক্ত করা যেতে পারে।
তুলসী বাউরক

23

মানদণ্ডের সময় / পুনরাবৃত্তি বা পুনরাবৃত্তি / সময় পরিমাপ করা উচিত এবং কেন?

এটি আপনি যা পরীক্ষা করার চেষ্টা করছেন তার উপর নির্ভর করে ।

আপনি যদি বিলম্ব করতে আগ্রহী হন , সময় / পুনরাবৃত্তি ব্যবহার করুন এবং আপনি যদি থ্রুপুটটিতে আগ্রহী হন তবে পুনরাবৃত্তি / সময় ব্যবহার করুন।


16

আপনি যদি দুটি অ্যালগরিদমের তুলনা করার চেষ্টা করছেন তবে ক্রমের পরিবর্তে প্রত্যেকের জন্য কমপক্ষে দুটি মানদণ্ড করুন। অর্থাৎ,

for(i=1..n)
  alg1();
for(i=1..n)
  alg2();
for(i=1..n)
  alg2();
for(i=1..n)
  alg1();

আমি বিভিন্ন পাসে একই অ্যালগরিদমের রানটাইমে কিছু লক্ষণীয় পার্থক্য (কখনও কখনও 5-10%) পেয়েছি ..

এছাড়াও, নিশ্চিত হয়ে নিন যে এন খুব বড়, যাতে প্রতিটি লুপের রানটাইম খুব কমপক্ষে 10 সেকেন্ড বা তার বেশি হয়। যত বেশি পুনরাবৃত্তি হবে, আপনার বেঞ্চমার্কের সময়টিতে আরও তাত্পর্যপূর্ণ পরিসংখ্যান এবং ডেটা তত বেশি নির্ভরযোগ্য।


5
স্বাভাবিকভাবে অর্ডার পরিবর্তন করা রানটাইমকে প্রভাবিত করে। জেভিএম-অপটিমাইজেশন এবং ক্যাশিং-এফেক্টস এখানে কাজ করতে চলেছে। জেভিএম-অপটিমাইজেশনকে 'ওয়ার্ম আপ' করা, একাধিক রান তৈরি করা এবং আলাদা আলাদা জেভিএমে প্রতিটি পরীক্ষার মানদণ্ড করা ভাল।
মেনিমেথ

15

নিশ্চিত হয়ে নিন যে আপনি কোনওভাবে ফলাফলগুলি ব্যবহার করেছেন যা বেঞ্চমার্ক কোডে গণনা করা হয়েছে। অন্যথায় আপনার কোড দূরে অনুকূলিত করা যেতে পারে।


13

জাভাতে মাইক্রো-বেঞ্চমার্ক লেখার জন্য অনেকগুলি সম্ভাব্য সমস্যা রয়েছে।

প্রথম: আপনাকে এমন সব ধরণের ইভেন্টের সাথে গণনা করতে হবে যা সময় কম বা বেশি এলোমেলোভাবে লাগে: আবর্জনা সংগ্রহ, ক্যাশেিং ইফেক্টস (ফাইলগুলির জন্য ওএসের এবং মেমরির জন্য সিপিইউ), আইও ইত্যাদি

দ্বিতীয়: আপনি খুব স্বল্প বিরতির জন্য পরিমাপ করা সময়ের যথার্থতার উপর বিশ্বাস করতে পারবেন না।

তৃতীয়: JVM কার্যকর করার সময় আপনার কোডটি অনুকূলিত করে। সুতরাং একই জেভিএম-ইনস্ট্যান্সে বিভিন্ন রান দ্রুত এবং দ্রুত হয়ে উঠবে।

আমার প্রস্তাবনাগুলি: আপনার বেঞ্চমার্কটি কয়েক সেকেন্ড রান করা করুন, এটি রানটাইম ওভার মিলিসেকেন্ডের চেয়ে বেশি নির্ভরযোগ্য। জেভিএম উষ্ণ করুন (মানে মাপ না দিয়ে কমপক্ষে একবার বেঞ্চমার্ক চালানো, যে জেভিএম অপ্টিমাইজেশন চালাতে পারে)। এবং আপনার মানদণ্ডটি একাধিকবার চালিত করুন (সম্ভবত 5 বার) এবং মধ্যম মানের নিন। প্রতিটি মাইক্রো-বেঞ্চমার্ককে একটি নতুন জেভিএম-ইনস্ট্যান্সে চালান (প্রতিটি বেঞ্চমার্ক নতুন জাভা কল করুন) অন্যথায় জেভিএমের অপ্টিমাইজেশান প্রভাবগুলি চলমান পরীক্ষাগুলিকে প্রভাবিত করতে পারে। ওয়ার্মআপ-পর্বে মৃত্যুদণ্ড কার্যকর করা হয় না এমন জিনিসগুলি নির্বাহ করবেন না (কারণ এটি শ্রেণি-বোঝা এবং পুনরায় সংশোধন করতে পারে)।


8

এটিও লক্ষ করা উচিত যে বিভিন্ন বাস্তবায়নের তুলনা করার সময় মাইক্রো বেঞ্চমার্কের ফলাফলগুলি বিশ্লেষণ করাও গুরুত্বপূর্ণ হতে পারে। সুতরাং একটি তাত্পর্য পরীক্ষা করা উচিত।

এটি কারণ বাস্তবায়নের Aচেয়ে মানদণ্ডের বেশিরভাগ রান চলাকালীন সময়ে বাস্তবায়ন দ্রুত হতে পারে B। তবে এর Aউচ্চতর বিস্তারটিও থাকতে পারে, সুতরাং এর Aসাথে তুলনা করা হলে পরিমাপ করা পারফরম্যান্স সুবিধাটি কোনও তাত্পর্যপূর্ণ হবে না B

সুতরাং একটি মাইক্রো বেঞ্চমার্কটি সঠিকভাবে লেখা এবং চালানো গুরুত্বপূর্ণ, তবে এটি সঠিকভাবে বিশ্লেষণ করাও।


8

অন্যান্য চমৎকার পরামর্শ যুক্ত করতে, আমি নিম্নলিখিতগুলি সম্পর্কেও সচেতন হই:

কিছু সিপিইউগুলির জন্য (যেমন টার্বোবউস্টের সাথে ইন্টেল কোর আই 5 রেঞ্জ) তাপমাত্রা (এবং বর্তমানে ব্যবহৃত কোরগুলির সংখ্যা, পাশাপাশি ততোধিক ব্যবহারের শতাংশ) ঘড়ির গতিকে প্রভাবিত করে। যেহেতু সিপিইউগুলি গতিশীলভাবে আটকে রয়েছে তাই এটি আপনার ফলাফলগুলিকে প্রভাবিত করতে পারে। উদাহরণস্বরূপ, যদি আপনার একক থ্রেডযুক্ত অ্যাপ্লিকেশন থাকে তবে সমস্ত কোর ব্যবহার করে অ্যাপ্লিকেশনটির চেয়ে সর্বাধিক ঘড়ির গতি (টার্বো বুস্ট সহ) বেশি higher এটি তাই কিছু সিস্টেমে একক এবং বহু-থ্রেডেড পারফরম্যান্সের তুলনায় হস্তক্ষেপ করতে পারে। মনে রাখবেন যে তাপমাত্রা এবং ভোল্টেজগুলি কতক্ষণ টার্বো ফ্রিকোয়েন্সি বজায় থাকে তা প্রভাবিত করে।

সম্ভবত আপনি আরও নিয়ন্ত্রণ করতে পারেন যে আরও একটি মৌলিক গুরুত্বপূর্ণ দিক: আপনি সঠিক জিনিসটি মাপছেন তা নিশ্চিত করুন! উদাহরণস্বরূপ, আপনি যদি কিছু System.nanoTime()নির্দিষ্ট কোডের বেঞ্চমার্ক ব্যবহার করে থাকেন তবে সেই জায়গাগুলিতে অ্যাসাইনমেন্টে কলগুলি রাখুন যা আপনার আগ্রহী নয় এমন জিনিসগুলি পরিমাপ করা এড়ানোর জন্য বোধগম্য example উদাহরণস্বরূপ, এটি করবেন না:

long startTime = System.nanoTime();
//code here...
System.out.println("Code took "+(System.nanoTime()-startTime)+"nano seconds");

সমস্যাটি হ'ল কোডটি শেষ হয়ে গেলে আপনি অবিলম্বে শেষ সময় পাচ্ছেন না। পরিবর্তে, নিম্নলিখিত চেষ্টা করুন:

final long endTime, startTime = System.nanoTime();
//code here...
endTime = System.nanoTime();
System.out.println("Code took "+(endTime-startTime)+"nano seconds");

হ্যাঁ সময়যুক্ত অঞ্চলের সাথে সম্পর্কযুক্ত কাজ না করা গুরুত্বপূর্ণ, তবে আপনার প্রথম উদাহরণটি এখনও ঠিক। এখানে কেবল একটি কল রয়েছে println, একটি পৃথক শিরোনাম লাইন বা অন্য কিছু নয় এবং সেই কলটির জন্য স্ট্রিং আর্গ তৈরির প্রথম পদক্ষেপ System.nanoTime()হিসাবে মূল্যায়ন করতে হবে । সংকলক প্রথমটি করতে পারে যা তারা দ্বিতীয়টির সাথে করতে পারে না এমন কিছুই নেই, এবং কেউই এমনকি তাদের স্টপ টাইম রেকর্ড করার আগে অতিরিক্ত কাজ করতে উত্সাহিত করছে না।
পিটার

7

http://opt.sourceforge.net/ জাভা মাইক্রো বেঞ্চমার্ক - বিভিন্ন প্ল্যাটফর্মে কম্পিউটার সিস্টেমের তুলনামূলক কর্মক্ষমতা বৈশিষ্ট্য নির্ধারণের জন্য প্রয়োজনীয় কাজগুলি নিয়ন্ত্রণ করুন। অপ্টিমাইজেশান সিদ্ধান্তগুলি গাইড করতে এবং বিভিন্ন জাভা বাস্তবায়নের তুলনা করতে ব্যবহার করা যেতে পারে।


2
জাভা কোডের একটি স্বেচ্ছাসেবী নয়, কেবল JVM + হার্ডওয়্যারকে বেনমার্ক বলে মনে হচ্ছে।
স্টিফান এল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.