ජාවා හි නිවැරදි ක්ෂුද්‍ර මිණුම් ලකුණක් ලියන්නේ කෙසේද?


882

ජාවා හි නිවැරදි ක්ෂුද්‍ර මිණුම් ලකුණක් ඔබ ලියන්නේ කෙසේද?

මම සිතිය යුතු විවිධ දේ නිදර්ශනය කරන කේත සාම්පල සහ අදහස් කිහිපයක් සොයමි.

උදාහරණය: මිණුම් ලකුණ කාලය / පුනරාවර්තනය හෝ පුනරාවර්තනය / වේලාව මැනිය යුතුද? ඒ ඇයි?

ආශ්‍රිත: නැවතුම් ඔරලෝසු මිණුම් සලකුණු කිරීම පිළිගත හැකිද?


අදාළ තොරතුරු සඳහා මිනිත්තු කිහිපයකට පෙර සිට [මෙම ප්‍රශ්නය] [1] බලන්න. සංස්කරණය කරන්න: සමාවන්න, මෙය පිළිතුරක් විය යුතු නැත. මම අදහස් දැක්වීමක් ලෙස පළ කළ යුතුව තිබුණි. [1]: stackoverflow.com/questions/503877/…
ටියාගෝ

මෙම ප්‍රශ්නයේ පෝස්ටරය මෙවැනි ප්‍රශ්නයකට යොමු කිරීමට සැලසුම් කිරීමෙන් පසුව මෙම ප්‍රශ්නය නොපවතින බව මම සටහන් කළෙමි. ඉතින් මෙන්න එය, කාලයත් සමඟ එය හොඳ ඉඟි කිහිපයක් රැස් කරනු ඇතැයි බලාපොරොත්තු වෙමු.
ජෝන් නිල්සන්

5
ජාවා 9 ක්ෂුද්‍ර මිණුම් සලකුණු කිරීම සඳහා සමහර විශේෂාංග ලබා දිය හැකිය: openjdk.java.net/jeps/230
රයිඩ්වෝල්ඩ්

1
A රේඩ්වෝල්ඩ් ජේඩීකේ කේතයට මයික්‍රෝ මිණුම් ලකුණක් එක් කිරීම ජේඊපී හි අරමුණ යැයි මම සිතමි, නමුත් ජේඑම්කේ ජේඩීකේ තුළට ඇතුළත් වනු ඇතැයි මම නොසිතමි ...
ඇසිලියස්

1
A රේඩ්වෝල්ඩ් අනාගතයේ සිට ආයුබෝවන්. එය කප්පාදුව සිදු කළේ නැත .
මයිකල්

Answers:


796

ජාවා හොට්ස්පොට් හි නිර්මාතෘවරුන්ගෙන් ක්ෂුද්‍ර මිණුම් සලකුණු ලිවීම පිළිබඳ උපදෙස් :

රීතිය 0: ජේවීඑම් සහ ක්ෂුද්‍ර මිණුම් සලකුණු පිළිබඳ පිළිගත් පත්‍රිකාවක් කියවන්න. හොඳ එකක් තමයි බ්‍රයන් ගොට්ස්, 2005 . ක්ෂුද්‍ර මිණුම් සලකුණු වලින් ඕනෑවට වඩා බලාපොරොත්තු නොවන්න; ඒවා මනිනු ලබන්නේ සීමිත පරාසයක ජේවීඑම් කාර්ය සාධන ලක්ෂණ පමණි.

රීති 1: සෑම විටම ඔබගේ පරීක්ෂණ කර්නලය ක්‍රියාත්මක වන උණුසුම් කිරීමේ අවධියක් ඇතුළත් කරන්න, කාල අදියර (න්) ට පෙර සියලු ආරම්භක සහ සම්පාදනයන් අවුලුවාලීමට එය ප්‍රමාණවත් වේ. (උණුසුම් කිරීමේ අදියරේදී පුනරාවර්තන අඩුයි. මාපට ඇඟිල්ලේ රීතිය අභ්‍යන්තර ලූප පුනරාවර්තන දස දහස් ගණනකි.)

රීති 2: සෑම විටම , ආදිය සමඟ ධාවනය කරන්න -XX:+PrintCompilation, -verbose:gcඑවිට ඔබේ කාල අවධියේදී සම්පාදකයා සහ ජේවීඑම් හි අනෙකුත් කොටස් අනපේක්ෂිත වැඩ නොකරන බව ඔබට තහවුරු කර ගත හැකිය.

රීති 2.1: වේලාව සහ උණුසුම් කිරීමේ අදියරවල ආරම්භයේ සහ අවසානයේ පණිවුඩ මුද්‍රණය කරන්න, එවිට කාල අදියර තුළ 2 වන රීතියෙන් ප්‍රතිදානයක් නොමැති බව ඔබට තහවුරු කර ගත හැකිය.

3 වන රීතිය:-client සහ -server, සහ OSR සහ සාමාන්‍ය සම්පාදනයන් අතර වෙනස ගැන සැලකිලිමත් වන්න . මෙම -XX:+PrintCompilationධජය උදාහරණයක් ලෙස,-මූලික නොවන පිවිසුම් ස්ථානය දැක්වීමට දී-ලකුණක් සමග OSR compilations වාර්තා: Trouble$1::run @ 2 (41 bytes). ඔබ හොඳම කාර්ය සාධනයෙන් පසුව නම් සේවාදායකයාට සේවාදායකයාට සහ OSR වෙත නිතිපතා කැමති වන්න.

4 වන රීතිය: ආරම්භක බලපෑම් පිළිබඳව සැලකිලිමත් වන්න. ඔබේ කාල අවධියේදී පළමු වරට මුද්‍රණය නොකරන්න, මුද්‍රණය පැටවීම සහ පන්ති ආරම්භ කිරීම. ඔබ විශේෂයෙන් පන්ති පැටවීම පරීක්ෂා කරන්නේ නම් මිස (සහ එම අවස්ථාවේ දී පරීක්ෂණ පන්ති පමණක් පටවන්න) මිස, උණුසුම් කිරීමේ අවධියෙන් පිටත (හෝ අවසාන වාර්තා කිරීමේ අදියර) නව පන්ති පැටවීම නොකරන්න. 2 වන රීතිය එවැනි බලපෑම් වලට එරෙහිව ඔබේ පළමු ආරක්ෂක මාර්ගයයි.

5 වන රීතිය: ඩියෝප්ටිමීකරණය සහ නැවත සකස් කිරීමේ බලපෑම් පිළිබඳව සැලකිලිමත් වන්න. කාලානුරූපී අවධියේදී පළමු වරට කිසිදු කේත මාර්ගයක් නොගන්න, මන්ද යත්, සම්පාදකයා විසින් කේතය අවුල් කර නැවත සකස් කළ හැකි බැවිනි. 2 වන රීතිය එවැනි බලපෑම් වලට එරෙහිව ඔබේ පළමු ආරක්ෂක මාර්ගයයි.

6 වන රීතිය: සම්පාදකයාගේ මනස කියවීමට සුදුසු මෙවලම් භාවිතා කරන්න, එය නිපදවන කේතය ගැන පුදුම වීමට බලාපොරොත්තු වන්න. යමක් වේගවත් හෝ මන්දගාමී වන්නේ කුමක් ද යන්න පිළිබඳ න්‍යායන් සැකසීමට පෙර කේතය ඔබම පරීක්ෂා කරන්න.

7 වන රීතිය: ඔබේ මිනුම්වල ශබ්දය අඩු කරන්න. නිශ්ශබ්ද යන්ත්‍රයක් මත ඔබේ මිණුම් ලකුණ ධාවනය කර පිටස්තරයින් ඉවතලමින් එය කිහිප වතාවක් ධාවනය කරන්න. -Xbatchයෙදුම සමඟ සම්පාදකයා අනුක්‍රමික කිරීමට භාවිතා කරන්න , සහ -XX:CICompilerCount=1සම්පාදකයා තමාට සමාන්තරව ක්‍රියාත්මක වීම වැළැක්වීම සඳහා සැකසුම සලකා බලන්න . GC පොදු කාර්ය අවම කිරීම සඳහා ඔබේ උපරිමය උත්සාහ කරන්න, Xmx(ප්‍රමාණවත් තරම් විශාල) සමාන Xmsකර UseEpsilonGCඑය තිබේ නම් භාවිතා කරන්න .

8 වන රීතිය: ඔබේ මිණුම් ලකුණ සඳහා පුස්තකාලයක් භාවිතා කරන්න, මන්ද එය වඩාත් කාර්යක්ෂම වන අතර මෙම එකම අරමුණ සඳහා දැනටමත් නිදොස් කර ඇත. වැනි JMH , කැලිපරය හෝ පනත් කෙටුම්පත හා ජාවා සඳහා පාවුල් විශිෂ්ට UCSD මිනුම් දඬු .


5
මෙයද සිත්ගන්නාසුලු ලිපියක් විය: ibm.com/developerworks/java/library/j-jtp12214
ජෝන් නිල්සන්

146
බොහෝ OS + JVM සංයෝජනයන්හි සාමාන්‍ය වන + හෝ 15 ms නිරවද්‍යතාවයෙන් ඔබ හරි නම් මිස System.currentTimeMillis () භාවිතා නොකරන්න. ඒ වෙනුවට System.nanoTime () භාවිතා කරන්න.
ස්කොට් කේරි

5
JavaOne වෙතින් සමහර කඩදාසි: azulsystems.com/events/javaone_2009/session/…
bestsss

95
වඩා නිවැරදි System.nanoTime()බව සහතික නොවන බව සැලකිල්ලට ගත යුතුය System.currentTimeMillis(). එය සහතික වන්නේ අවම වශයෙන් නිවැරදි බව පමණි. කෙසේ වෙතත් එය සාමාන්‍යයෙන් සැලකිය යුතු ලෙස නිවැරදි ය.
ගුරුත්වාකර්ෂණය

43
System.nanoTime()වෙනුවට යමෙකු භාවිතා කළ යුතු ප්‍රධාන හේතුව වන්නේ System.currentTimeMillis()කලින් ඇති දේ ඒකාකාරී ලෙස වැඩි වන බවට සහතික වීමයි. ආපසු ලබා දුන් අගයන් අඩු කිරීමෙන් currentTimeMillisආයාචනා දෙකක් ඇත්ත වශයෙන්ම negative ණාත්මක ප්‍රති results ල ලබා දිය හැකිය, සමහර විට පද්ධතියේ වේලාව සමහර එන්ටීපී ඩීමන් විසින් සකස් කර ඇති නිසා විය හැකිය.
වොල්ඩයින්ස්

241

මෙම ප්‍රශ්නයට පිළිතුරු ලෙස සලකුණු කර ඇති බව මම දනිමි, නමුත් ක්ෂුද්‍ර මිණුම් සලකුණු ලිවීමට අපට උපකාර වන පුස්තකාල දෙකක් සඳහන් කිරීමට මට අවශ්‍ය විය

ගූගල් වෙතින් කැලිපර්

නිබන්ධන ආරම්භ කිරීම

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

OpenJDK වෙතින් JMH

නිබන්ධන ආරම්භ කිරීම

  1. ජේවීඑම් හි මිණුම් සලකුණු වළක්වා ගැනීම
  2. http://nitschinger.at/Using-JMH-for-Java-Microbenchmarking
  3. http://java-performance.info/jmh/

37
+1 එය පිළිගත් පිළිතුරේ 8 වන රීතිය ලෙස එකතු කළ හැකිය: 8 වන රීතිය: බොහෝ දේ වැරදිය හැකි බැවින්, ඔබ එය තනිවම කිරීමට උත්සාහ කරනවාට වඩා දැනට පවතින පුස්තකාලයක් භාවිතා කළ යුතුය!
assylias

8
An පන්ජියා ජේඑම් වර්තමානයේ කැලිපර්ට වඩා උසස් ය, මෙයද බලන්න: groups.google.com/forum/#!msg/mechanical-sympathy/m4opvy4xq3U/…
assylias

87

ජාවා මිණුම් සලකුණු සඳහා වැදගත් දේ:

  • වේලාවට පෙර කිහිප වතාවක් කේතය ධාවනය කිරීමෙන් පළමුව JIT උණුසුම් කරන්න එය
  • තත්පර කිහිපයකින් හෝ (වඩා හොඳ) තත්පර දහයකින් මිනුම් කිරීමට හැකි වන පරිදි ඔබ එය දිගු කාලයක් ධාවනය කර ඇති බවට වග බලා ගන්න
  • ඔබට System.gc()පුනරාවර්තන අතර ඇමතිය නොහැකි අතර, එය පරීක්ෂණ අතර ධාවනය කිරීම හොඳ අදහසකි, එවිට සෑම පරීක්ෂණයකටම වැඩ කිරීමට "පිරිසිදු" මතක අවකාශයක් ලැබෙනු ඇත. (ඔව්, gc()සහතිකයකට වඩා ඉඟියක් වැඩිය, නමුත් එය බොහෝ දුරට ඉඩ තිබේ මගේ අත්දැකීම් අනුව කුණු එකතු කිරීමට .)
  • මම පුනරාවර්තන හා වේලාව ප්‍රදර්ශනය කිරීමට කැමතියි, සහ “හොඳම” ඇල්ගොරිතමයට ලකුණු 1.0 ක් සහ අනෙක් ඒවා සාපේක්ෂ ආකාරයකින් ලකුණු වන පරිදි පරිමාණය කළ හැකි කාල / පුනරාවර්තන ලකුණු. මෙයින් අදහස් කරන්නේ ඔබට සියලු ඇල්ගොරිතම දිගු කාලයක් සඳහා ධාවනය කළ හැකි අතර එය පුනරාවර්තන ගණන සහ වේලාව යන දෙකම වෙනස් වන නමුත් තවමත් සැසඳිය හැකි ප්‍රති .ල ලබා ගැනීමයි.

.NET හි මිණුම් සලකුණු රාමුවක් සැලසුම් කිරීම ගැන මම බ්ලොග්කරණයේ යෙදී සිටිමි. මම තියෙනවා යුවලක් වන මීට පෙර තනතුරු ඔබ යම් අදහස් ලබා ගැනීමට හැකි විය හැකි - ඇත්තෙන්ම, නැති හැම දෙයක්ම සුදුසු වනු ඇත, නමුත් එය යම් විය හැක.


3
සුළු නිට්පික්: IMO "එවිට සෑම පරීක්ෂණයකටම" විය යුතුය "එවිට එක් එක් පරීක්ෂණය ලබා ගත හැකිය" කලින් ඇමතුම gc සෑම විටම භාවිතයට නොගත් මතකය නිදහස් කරයි යන හැඟීම ඇති කරයි.
සංජේ ටී. ෂර්මා

@ සංජේ ටී.ශර්මා: හොඳයි, අභිප්‍රාය එය සැබවින්ම සිදු කිරීමයි. එය තදින් සහතික කර නොමැති අතර, එය සැබවින්ම ශක්තිමත් ඉඟියක්. පැහැදිලි වීමට සංස්කරණය කරනු ඇත.
ජෝන් ස්කීට්

1
System.gc () ඇමතීමට මම එකඟ නොවෙමි. එය ඉඟියක්, එපමණයි. "එය බලාපොරොත්තු සහගතව යමක් කරනු ඇත". ඔබ එය කිසි විටෙකත් නොකියන්න. මෙය වැඩසටහන්කරණය මිස කලාව නොවේ.
gyorgyabraham

13
@gyabraham: ඔව්, එය ඉඟියක් - නමුත් එය සාමාන්‍යයෙන් ගත යුතු බව මම නිරීක්ෂණය කළෙමි. එබැවින් ඔබ භාවිතා System.gc()කිරීමට අකමැති නම්, පෙර පරීක්ෂණ වලදී නිර්මාණය කරන ලද වස්තූන් හේතුවෙන් එක් පරීක්ෂණයකදී කසළ එකතු කිරීම අවම කිරීමට ඔබ යෝජනා කරන්නේ කෙසේද? මම ප්‍රායෝගිකයි.
ජෝන් ස්කීට්

10
@gyabraham: “මහා පසුබෑම” යන්නෙන් ඔබ අදහස් කරන්නේ කුමක්දැයි මම නොදනිමි. ඔබට විස්තාරණය කළ හැකිද, නැවත - වඩා හොඳ ප්‍රති results ල ලබා දීමට ඔබට යෝජනාවක් තිබේද? මම පැහැදිලිවම කිව්වේ එය සහතිකයක් නොවන බවයි ...
ජෝන් ස්කීට්

48

jmh යනු OpenJDK හි මෑත කාලීන එකතු කිරීමක් වන අතර එය ලියා ඇත්තේ ඔරකල් හි සමහර කාර්ය සාධන ඉංජිනේරුවන් විසිනි. බැලීමට වටිනවා.

Jmh යනු JVM ඉලක්ක කරගත් ජාවා සහ වෙනත් භාෂාවලින් ලියා ඇති නැනෝ / මයික්‍රෝ / සාර්ව මිණුම් සලකුණු තැනීම, ධාවනය කිරීම සහ විශ්ලේෂණය කිරීම සඳහා ජාවා පටි වේ.

නියැදිය තුළ තැන්පත් කර ඇති ඉතා රසවත් තොරතුරු කොටස් අදහස් දැක්වීම් පරීක්ෂා කරයි.

මෙයද බලන්න:


1
ජේඑම්එච් සමඟ ආරම්භ කිරීම පිළිබඳ විස්තර සඳහා මෙම බ්ලොග් සටහන ද බලන්න: psy-lob-saw.blogspot.com/2013/04/… .
නිට්සන් වකාර්ට්


23

මිණුම් ලකුණ කාලය / පුනරාවර්තනය හෝ පුනරාවර්තනය / වේලාව මැනිය යුතුද? ඒ ඇයි?

එය ඔබ පරීක්ෂා කිරීමට උත්සාහ කරන දේ මත රඳා පවතී .

ඔබ ප්‍රමාදය ගැන උනන්දුවක් දක්වන්නේ නම් , කාලය / පුනරාවර්තනය භාවිතා කරන්න සහ ඔබ ප්‍රතිදානය ගැන උනන්දුවක් දක්වන්නේ නම් , පුනරාවර්තන / වේලාව භාවිතා කරන්න.


16

ඔබ ඇල්ගොරිතම දෙකක් සංසන්දනය කිරීමට උත්සාහ කරන්නේ නම්, ඇණවුම වෙනස් කරමින්, එක් එක් සඳහා අවම වශයෙන් මිණුම් සලකුණු දෙකක් වත් කරන්න. එනම්:

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

එකම ඇල්ගොරිතමයේ ධාවන කාලය තුළ විවිධ පාස් වල සැලකිය යුතු වෙනස්කම් (සමහර විට 5-10%) මම සොයාගෙන ඇත ..

තවද, n ඉතා විශාල බවට වග බලා ගන්න , එවිට එක් එක් ලූපයේ ධාවන කාලය අවම වශයෙන් තත්පර 10 ක් හෝ ඊට වැඩි වේ. වැඩි වැඩියෙන් පුනරාවර්තනයන්, ඔබේ මිණුම් දණ්ඩේ වේලාවේ වඩා වැදගත් සංඛ්‍යා සහ දත්ත වඩාත් විශ්වාසදායකය.


5
ස්වාභාවිකවම අනුපිළිවෙල වෙනස් කිරීම ධාවන කාලයට බලපෑම් කරයි. JVM- ප්‍රශස්තිකරණය සහ හැඹිලි-බලපෑම් මෙහි ක්‍රියාත්මක වේ. වඩා හොඳ වන්නේ ජේවීඑම් ප්‍රශස්තිකරණය 'උණුසුම් කිරීම', විවිධ ලකුණු ලබා ගැනීම සහ වෙනස් ජේවීඑම් හි සෑම පරීක්‍ෂණයක්ම මිණුම් සලකුණු කිරීමයි.
Mnementh

15

මිණුම් සලකුණු කළ කේතයෙන් ගණනය කර ඇති ප්‍රති results ල ඔබ කෙසේ හෝ භාවිතා කරන බවට වග බලා ගන්න. එසේ නොමැතිනම් ඔබේ කේතය ප්‍රශස්තිකරණය කළ හැකිය.


13

ජාවා හි ක්ෂුද්‍ර මිණුම් සලකුණු ලිවීම සඳහා බොහෝ අන්තරායන් ඇත.

පළමුවැන්න: අහඹු ලෙස වැඩි හෝ අඩු කාලයක් ගතවන සියලු ආකාරයේ සිදුවීම් සමඟ ඔබ ගණනය කළ යුතුය: කසළ එකතු කිරීම, හැඹිලි බලපෑම් (ලිපිගොනු සඳහා මෙහෙයුම් පද්ධතිය සහ මතකය සඳහා CPU), IO ආදිය.

දෙවනුව: ඉතා කෙටි කාල පරාසයන් සඳහා මනින ලද වේලාවන්හි නිරවද්‍යතාවය ඔබට විශ්වාස කළ නොහැක.

තෙවනුව: ක්‍රියාත්මක කිරීමේදී JVM ඔබේ කේතය ප්‍රශස්ත කරයි. එබැවින් එකම JVM- උදාහරණයේ විවිධ ලකුණු වේගවත් හා වේගවත් වනු ඇත.

මගේ නිර්දේශ: ඔබේ මිණුම් ලකුණ තත්පර කිහිපයක් ධාවනය කරන්න, එය මිලි තත්පරයට වඩා වැඩ කරන වේලාවට වඩා විශ්වාසදායකය. ජේවීඑම් උණුසුම් කරන්න (මෙයින් අදහස් කරන්නේ මිනුම් නොකර අවම වශයෙන් එක් වරක් මිණුම් ලකුණ ධාවනය කිරීම, ජේවීඑම් හට ප්‍රශස්තිකරණයන් ක්‍රියාත්මක කළ හැකි බවයි). ඔබේ මිණුම් ලකුණ කිහිප වතාවක් ධාවනය කරන්න (සමහර විට 5 වතාවක්) සහ මධ්‍ය අගය ගන්න. සෑම ක්ෂුද්‍ර මිණුම් ලකුණක්ම නව ජේවීඑම්-නිදසුනක් තුළ ධාවනය කරන්න (සෑම නව මිණුම් දණ්ඩක් සඳහාම අමතන්න) එසේ නොමැතිනම් ජේවීඑම් හි ප්‍රශස්තිකරණ බලපෑම් පසුව ධාවනය වන පරීක්ෂණ වලට බලපෑම් කළ හැකිය. උණුසුම් කිරීමේ අදියරේදී ක්‍රියාත්මක නොවන දේවල් ක්‍රියාත්මක නොකරන්න (මෙය පන්ති භාරය සහ නැවත සකස් කිරීම අවුලුවන බැවින්).


8

විවිධ ක්‍රියාත්මක කිරීම් සංසන්දනය කිරීමේදී ක්ෂුද්‍ර මිණුම් ලකුණෙහි ප්‍රති results ල විශ්ලේෂණය කිරීම ද වැදගත් විය හැකි බව සැලකිල්ලට ගත යුතුය. එබැවින් වැදගත්කම පිළිබඳ පරීක්ෂණය කළ යුතුය.

මෙයට හේතුව Aමිණුම් ලකුණෙහි බොහෝ ධාවන කාලය තුළ ක්‍රියාත්මක කිරීම වේගවත් කිරීමට වඩා වේගවත් විය හැකි බැවිනි B. නමුත් Aඉහළ ව්‍යාප්තියක් ද තිබිය හැක, එබැවින් මනින ලද කාර්යසාධන ප්‍රතිලාභය Aසමඟ සසඳන විට කිසිදු වැදගත්කමක් නොලැබේB .

එබැවින් මයික්‍රෝ මිණුම් දණ්ඩක් නිවැරදිව ලිවීම සහ ධාවනය කිරීම පමණක් නොව එය නිවැරදිව විශ්ලේෂණය කිරීම ද වැදගත් ය.


8

අනෙක් විශිෂ්ට උපදෙස් වලට එකතු කිරීම සඳහා, මම පහත සඳහන් කරුණු ගැන ද සැලකිලිමත් වෙමි:

සමහර CPU සඳහා (උදා: ටර්බෝබූස්ට් සමඟ ඉන්ටෙල් කෝර් i5 පරාසය), උෂ්ණත්වය (සහ දැනට භාවිතා වන මධ්‍ය ගණන සහ ඒවායේ උපයෝගීතා ප්‍රතිශතය) ඔරලෝසු වේගයට බලපායි. CPUs ගතිකව ඔරලෝසු කර ඇති බැවින් මෙය ඔබගේ ප්‍රති .ල කෙරෙහි බලපායි. උදාහරණයක් ලෙස, ඔබට තනි නූල් යෙදුමක් තිබේ නම්, උපරිම ඔරලෝසු වේගය (ටර්බෝබූස්ට් සමඟ) සියලු හරයන් භාවිතා කරන යෙදුමකට වඩා වැඩිය. එබැවින් සමහර පද්ධතිවල තනි හා බහු-නූල් කාර්ය සාධනය සංසන්දනය කිරීමට මෙය බාධාවක් විය හැකිය. උෂ්ණත්වය සහ වාෂ්පීකරණ ද ටර්බෝ සංඛ්‍යාතය කොපමණ කාලයක් පවත්වා ගෙන යනවාද යන්න මතක තබා ගන්න.

ඔබට සෘජුවම පාලනය කළ හැකි වඩාත් මූලික වශයෙන් වැදගත් අංගයක් විය හැකිය: ඔබ නිවැරදි දේ මනින බවට වග බලා ගන්න! නිදසුනක් ලෙස, ඔබ System.nanoTime()යම් කේතයක් මිණුම් සලකුණු කිරීමට භාවිතා කරන්නේ නම්, ඔබ උනන්දුවක් නොදක්වන දේවල් මැනීමෙන් වැළකී සිටීමට අර්ථවත් ස්ථානවල ඇමතුම් පැවරුමට දමන්න. උදාහරණයක් ලෙස, එසේ නොකරන්න:

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 + දෘඩාංග මිණුම් දණ්ඩක් ලෙස පෙනේ, අත්තනෝමතික ජාවා කේතයක් නොවේ.
ස්ටෙෆාන් එල්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.