জাভা কেন সি ++ এর চেয়ে দ্রুততর হতে পারে?


79

কখনও কখনও জাভা বেঞ্চমার্কগুলিতে সি ++ ছাড়িয়ে যায়। অবশ্যই, কখনও কখনও সি ++ আউটপারফর্ম করে।

নিম্নলিখিত লিঙ্কগুলি দেখুন:

তবে এটি কীভাবে সম্ভব? এটি আমার মনের কথা ভঙ্গ করে যে ব্যাখ্যা করা বাইটকোড কোনও সংকলিত ভাষার চেয়ে দ্রুততর হতে পারে।

কেউ দয়া করে ব্যাখ্যা করতে পারেন? ধন্যবাদ!


2
আপনি দেখে নিতে পারেন shootout.alioth.debian.org/u32/... সমস্যার প্যাটার্ন / C ++ ... দেখ, একথা জাভা উপর দ্রুত চালানোর সমস্যার ধরনের দেখতে এবং এই নির্দিষ্ট সমস্যার ...
c0da

2
দেখুন জাভা কেন ধীর হওয়ার খ্যাতি পেয়েছিল? এই বিষয়ে বিস্তারিত অনেক জন্য।
প্যাটার তুরিক

11
এটা আইনের বিরুদ্ধে (বিভাগ 10.101.04.2c) একটি জাভা ভার্চুয়াল মেশিনের যে সি সঙ্গে ++, উত্পাদিত একটি এক্সিকিউটেবল বাইনারি তুলনায় দ্রুততর সঞ্চালিত উত্পাদন করতে।
মতিন উলহাক

1
@ মন্টু পৃথিবীতে আপনার অর্থ কী? ধারা 10.101.04.2c কি?
হাইল্যান্ড মার্ক

3
@HiglandMark আপনি এই চেনাশোনাটির সদস্য নন। চেনাশোনাটির ভিতরে কী চলে সে সম্পর্কে আপনাকে জানতে হবে না। চেনাশোনাটি সম্পূর্ণ - চক্রের আইনগুলি প্রকৃতির মতোকে ছাড়িয়ে যায়। আপনি চেনাশোনাটিকে অস্বীকার বা প্রশ্ন করতে পারবেন না। আমি বৃত্ত এবং বৃত্তটি আমি।
মতিন উলহাক

উত্তর:


108

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

দ্বিতীয়ত, জড়িত বেশিরভাগ মানদণ্ডগুলি বেশ পক্ষপাতদুষ্ট বলে মনে হয় (উদ্দেশ্য বা অক্ষমতা দ্বারা, আমি সত্যিই বলতে পারি না)। উদাহরণস্বরূপ, কয়েক বছর আগে আমি পোস্ট করেছি যে কোনও লিঙ্ক থেকে লিঙ্কযুক্ত কিছু উত্স কোডের দিকে তাকিয়েছিলাম। এটির মতো কোড ছিল:

  init0 = (int*)calloc(max_x,sizeof(int));
  init1 = (int*)calloc(max_x,sizeof(int));
  init2 = (int*)calloc(max_x,sizeof(int));
  for (x=0; x<max_x; x++) {
    init2[x] = 0;
    init1[x] = 0;
    init0[x] = 0;
  }

যেহেতু callocইতিমধ্যে শূন্যযুক্ত মেমরি সরবরাহ করে তাই forলুপটিকে আবার শূন্য করতে ব্যবহার করা অবশ্যই অব্যর্থ। এটি (অন্যথায় যদি মেমোরি পরিবেশন করে) অন্য ডেটা দিয়ে মেমরিটি পূরণ করে (এবং এটির উপর নির্ভরতা শূন্য হওয়ার কোনও কারণ নেই) অনুসরণ করা হয়েছিল, সুতরাং সমস্ত শূন্যস্থান যাইহোক সম্পূর্ণ অপ্রয়োজনীয় ছিল। উপরের কোডটি একটি সাধারণ malloc(যেমন কোনও বুদ্ধিমান ব্যক্তি দিয়ে শুরু করা উচিত) দিয়ে প্রতিস্থাপন করা জাভা সংস্করণকে (যথেষ্ট স্মৃতিতে প্রসারিত, যদি বিস্তৃত প্রশস্ত মার্জিন দ্বারা) যথেষ্ট পরিমাণে সি ++ সংস্করণের গতি উন্নত করে।

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

class Toggle {
public:
    Toggle(bool start_state) : state(start_state) { }
    virtual ~Toggle() {  }
    bool value() {
        return(state);
    }
    virtual Toggle& activate() {
        state = !state;
        return(*this);
    }
    bool state;
};

সমালোচনা অংশটি পরিণত হয় state = !state;। যখন আমরা রাষ্ট্রটির intপরিবর্তে কোডটিকে পরিবর্তিত করতে কোডটি পরিবর্তন করি তখন কী হয় তা বিবেচনা করুন bool:

class Toggle {
    enum names{ bfalse = -1, btrue = 1};
    const static names values[2];
    int state;

public:
    Toggle(bool start_state) : state(values[start_state]) 
    { }
    virtual ~Toggle() {  }
    bool value() {  return state==btrue;    }

    virtual Toggle& activate() {
        state = -state;
        return(*this);
    }
};

এই সামান্য পরিবর্তন সামগ্রিক গতি প্রায় 5: 1 মার্জিন দ্বারা উন্নত করে । যদিও বেঞ্চমার্কটি পদ্ধতি কলের সময়টি পরিমাপের উদ্দেশ্যে করা হয়েছিল , বাস্তবে এটি যা পরিমাপ করছিল তার বেশিরভাগ সময়ই ছিল intএবং মধ্যে রূপান্তর করার সময় bool। আমি অবশ্যই একমত হব যে মূল দ্বারা প্রদর্শিত অদক্ষতা দুর্ভাগ্যজনক - তবে সত্যিকারের কোডটিতে এটি খুব কমই দেখা যাচ্ছে এবং যখন / যদি এটি উত্থাপিত হয় তখন যে স্বাচ্ছন্দ্যের সাথে এটি স্থির করা যায়, তা মনে করার জন্য আমার একটা কঠিন সময় আছে এটি অনেক অর্থ হিসাবে।

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

public Toggle activate() {
this.counter += 1;
if (this.counter >= this.count_max) {
    this.state = !this.state;
    this.counter = 0;
}
return(this);
}

this.stateসরাসরি কারসাজির পরিবর্তে বেস ফাংশনটিতে এটি কল করা যথেষ্ট গতির উন্নতি দেয় (পরিবর্তিত সি ++ সংস্করণটি রাখার জন্য যথেষ্ট না হলেও)।

সুতরাং, আমরা যা শেষ করব তা হ'ল ব্যাখ্যা করা বাইট কোডগুলি সম্পর্কে বনাম ever উভয়ই অর্থবহ ফলাফল দিচ্ছে না।

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

[সম্পাদনা করুন: উপরে এক জায়গায় যেমন বোঝানো হয়েছে তবে আমার সম্ভবত যতটা সরাসরি হওয়া উচিত তা কখনই বলা হয়নি, আমি যে ফলাফলগুলি উদ্ধৃত করছি সেগুলি হ'ল আমি যখন ~ 5 বছর আগে এটি পরীক্ষা করেছিলাম তখন সি ++ এবং জাভা বাস্তবায়ন যা সেই সময়ে বর্তমান ছিল । আমি বর্তমান বাস্তবায়নগুলি দিয়ে পরীক্ষাগুলি পুনরায় চালিত করিনি। তবে এক নজরে ইঙ্গিত দেয় যে কোডটি ঠিক করা হয়নি, সুতরাং যে সমস্ত পরিবর্তন হয়েছে তা কোডের সমস্যাগুলি আচ্ছাদন করার সংকলকটির ক্ষমতা ছিল]]

তবে আমরা যদি জাভা উদাহরণগুলিকে অগ্রাহ্য করি তবে সংক্ষেপিত কোডের চেয়ে দ্রুত ব্যাখ্যা করা কোডটির পক্ষে সম্ভব (যদিও কিছুটা কঠিন এবং কিছুটা অস্বাভাবিক)।

এটির স্বাভাবিক উপায়টি হ'ল কোডটি ব্যাখ্যা করা হচ্ছে মেশিন কোডের চেয়ে অনেক বেশি কমপ্যাক্ট, বা এটি কোনও সিপিইউতে চলছে যা কোড ক্যাশের চেয়ে বড় ডেটা ক্যাশে রয়েছে।

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

সুতরাং, যদি ক্যাশের এন এর কোনও উপাদান দ্বারা প্রধান মেমরির চেয়ে দ্রুত হয় এবং প্রতিটি বাইট কোডটি প্রয়োগ করতে এন মেশিন কোড নির্দেশাবলীর চেয়ে কম লাগে, বাইট কোডটি জিততে হবে (আমি সরল করছি, তবে আমি মনে করি সাধারণ ধারণাটি এখনও হওয়া উচিত আপত্তি করা)।


26
+1, সম্পূর্ণ এসি বিশেষত "ভাষা প্রোগ্রামারস এবং ডিজাইনের তুলনায় খুব কমই পার্থক্য আনবে" - আপনি প্রায়শই এমন সমস্যা নিয়ে হোঁচট খেয়ে যাবেন যেখানে আপনি অ্যালগরিদমকে অনুকূল করতে পারেন, যেমন বিগ-ও উন্নত করবে যা সেরা সংকলকটির চেয়ে অনেক বেশি বাড়িয়ে দেবে।
schnaader

1
"যদি কেউ জড়িত মাপদণ্ডগুলি পুনরায় চালানোর সিদ্ধান্ত নেয় ..." না! 2005 সালে ফিরে সেই পুরানো কাজগুলি বাতিল করা হয়েছিল এবং তাদের এখন প্রতিস্থাপনের খেলাগুলিতে প্রদর্শিত টাস্কগুলি প্রতিস্থাপন করা হয়েছিল। Benchmarks খেলা হোম পেজে দেখানো বর্তমান কাজের জন্য বর্তমান প্রোগ্রাম পুনরায় চালানোর দয়া কেহ কিছু প্রোগ্রাম তারপর পুনরায় চালানোর করতে চায় shootout.alioth.debian.org
igouy

@ আইগোই: কিছু লোক হয়তো বেঁচে থাকা মানদণ্ডগুলি থেকে ফলাফলগুলি নিশ্চিত / অস্বীকার করতে চাইলে কমপক্ষে সংশোধনের ন্যূনতমতার সাথে তাদের বাস্তবের সাথে কিছুটা ন্যূনতম সম্পর্ক দেওয়ার জন্য প্রয়োজনীয় হতে পারে। একই সময়ে, আপনি মূলত সঠিক: প্রশ্নে থাকা মানদণ্ডগুলি এতটাই খারাপ যে সর্বাধিক সুস্পষ্ট ত্রুটিগুলি ঠিক করা খুব বেশি কার্যকর হতে পারে না।
জেরি কফিন

এবং সে কারণেই, ২০০ 2005 সালে, এগুলি বাতিল করে তাদের প্রতিস্থাপন করা হয়েছিল এবং এখন বেঞ্চমার্কস গেমটিতে প্রদর্শিত কার্যগুলি দ্বারা প্রতিস্থাপন করা হয়েছিল। যে সমস্ত লোকেরা জানেন না তারা সেই পুরানো প্রোগ্রামগুলি পুনরায় চালাবেন।
igouy

13
+1 আমি সি বা জাভা উভয় ক্ষেত্রেই লোকজন সি ++ কোডিং করে এবং তারপরে জাভাটিকে উচ্চতর বলে উল্লেখ করি। দাবি অস্বীকার: আমি কোনও ভাষাকে উচ্চতর বলি না, তবে অন্য ভাষার সাথে উপযুক্তভাবে উপযুক্ত হতে পারে এমন স্টাইলে কৃপণ সি ++ কোড লিখলে উভয় ভাষা তুলনীয় হয় না।
খ্রিস্টান রাউ

111

সীমাহীন সময়ের সাথে বিশেষজ্ঞের দ্বারা সম্পন্ন হ্যান্ড রোলড সি / সি ++ জাভা থেকে কমপক্ষে দ্রুত বা দ্রুত হতে চলেছে। শেষ পর্যন্ত, জাভা নিজেই সি / সি ++ এ লিখিত হয়েছে যাতে আপনি পর্যাপ্ত প্রকৌশল প্রচেষ্টা চালাতে ইচ্ছুক হলে অবশ্যই জাভা যা কিছু করতে পারে তা আপনি অবশ্যই করতে পারেন।

তবে অনুশীলনে, জাভা প্রায়শই নিম্নলিখিত কারণে খুব দ্রুত সম্পাদন করে:

  • জেআইটি সংকলন - জাভা ক্লাসগুলি বাইটকোড হিসাবে সঞ্চিত থাকলেও, প্রোগ্রামটি শুরু হওয়ার সাথে সাথে এটি (সাধারণত) জেআইটি সংকলক দ্বারা স্থানীয় কোডে সংকলিত হয়। একবার সংকলিত হয়ে গেলে এটি খাঁটি নেটিভ কোড - সুতরাং তাত্ত্বিকভাবে প্রোগ্রামটি দীর্ঘকাল ধরে চলার পরে ঠিক যেমন সি / সি ++ সংকলন করা যায় ঠিক তেমন প্রত্যাশা করা যেতে পারে (যেমনটি সমস্ত জেআইটি সংকলন শেষ হওয়ার পরে)
  • জাভাতে আবর্জনা সংগ্রহ অত্যন্ত দ্রুত এবং দক্ষ - হটস্পট জিসি সম্ভবত বিশ্বের সেরা অল-রাউন্ড জিসি বাস্তবায়ন। এটি সান এবং অন্যান্য সংস্থাগুলির বহু মানব-অভিজ্ঞতার প্রচেষ্টা ফলাফল। খুব সুন্দর যে কোনও জটিল মেমরি পরিচালন সিস্টেম আপনি নিজেকে সি / সি ++ এ রোল করেন তা আরও খারাপ হবে। অবশ্যই আপনি সি / সি ++ তে বেশ দ্রুত / লাইটওয়েট বেসিক মেমরি ম্যানেজমেন্ট স্কিম লিখতে পারেন, তবে সেগুলি পুরো জিসি সিস্টেমের মতো প্রায় বহুমুখী হবে না। যেহেতু বেশিরভাগ আধুনিক সিস্টেমে জটিল মেমরি পরিচালনার প্রয়োজন, তাই জাভা রিয়েল-ওয়ার্ল্ড পরিস্থিতিগুলির জন্য একটি বড় সুবিধা।
  • আরও ভাল প্ল্যাটফর্ম লক্ষ্যবস্তু - অ্যাপ্লিকেশন স্টার্ট-আপ (জেআইটি সংকলন ইত্যাদি) সংকলন বিলম্ব করে জাভা সংকলক যে সঠিক প্রসেসরটি চালাচ্ছে তা জানেন যে এটি গ্রহণ করতে পারে । এটি এমন কিছু খুব উপকারী অপ্টিমাইজেশন সক্ষম করতে সক্ষম হয়েছে যা আপনি প্রাক-সংকলিত সি / সি ++ কোডে করতে সক্ষম হবেন না যা একটি "সর্বনিম্ন সাধারণ ডিনোমিনেটর" প্রসেসরের নির্দেশ সেটকে লক্ষ্য করতে হবে।
  • রানটাইম পরিসংখ্যান - কারণ জেআইটি সংকলন রানটাইম সময়ে সম্পন্ন হয়, এটি প্রোগ্রামটি সঞ্চালনের সময় এটি পরিসংখ্যান সংগ্রহ করতে পারে যা আরও ভাল অপটিমাইজেশন সক্ষম করে (যেমন কোনও নির্দিষ্ট শাখা নেওয়া হয়েছে এমন সম্ভাবনা জেনে)। এটি জাভা জেআইটি সংকলকগুলিকে সি / সি ++ সংকলকগুলির চেয়ে ভাল কোড তৈরি করতে সক্ষম করতে পারে (যা সম্ভবত সবচেয়ে সম্ভবত শাখাটি "অনুমান" করতে হবে, একটি ধারণা যা প্রায়শই ভুল হতে পারে)।
  • খুব ভাল লাইব্রেরি - জাভা রানটাইমটিতে ভাল পারফরম্যান্সের সাথে খুব ভাল লিখিত গ্রন্থাগার রয়েছে (বিশেষত সার্ভার-সাইড অ্যাপ্লিকেশনগুলির জন্য)। আপনি নিজের লেখার চেয়ে বা সি / সি ++ এর জন্য সহজেই অর্জন করার চেয়ে এগুলি প্রায়শই ভাল।

একই সাথে সি / সি ++ এরও কিছু সুবিধা রয়েছে:

  • উন্নততর অপ্টিমাইজেশানগুলি করার জন্য আরও সময় - সি / সি ++ সংকলন একবার হয়ে যায় এবং তাই এটির জন্য কনফিগার করলে আপনি উন্নত অপ্টিমাইজেশানগুলি করতে যথেষ্ট সময় ব্যয় করতে পারেন। জাভা একইরকম করতে না পারার কোনও তাত্ত্বিক কারণ নেই, তবে বাস্তবে আপনি জাভা তুলনামূলকভাবে JIT- সংকলন কোড করতে চান, তাই জেআইটি সংকলক "সরল" অপটিমাইজেশনে ফোকাস করতে চান।
  • বাইটোকোডে দৃশ্যমান নয় এমন নির্দেশাবলী - জাভা বাইটকোড পুরোপুরি সাধারণ উদ্দেশ্য হয়ে গেলেও, এমন কিছু জিনিস এখনও রয়েছে যা আপনি বাইকোডে করতে পারবেন না এমন নিম্ন স্তরে আপনি কিছু করতে পারেন (চেক না করা পয়েন্টার পাটিগণিত একটি ভাল উদাহরণ!)। (আব) এই ধরণের কৌশল ব্যবহার করে আপনি কিছু কার্যকারিতা সুবিধা পেতে পারেন
  • কম "সুরক্ষা" প্রতিযোগিতা - প্রোগ্রামগুলি নিরাপদ এবং নির্ভরযোগ্য তা নিশ্চিত করতে জাভা কিছু অতিরিক্ত কাজ করে। উদাহরণস্বরূপ অ্যারেগুলিতে সীমাবদ্ধ চেকগুলি, নির্দিষ্ট সমঝোতার গ্যারান্টি, নাল পয়েন্টার চেক, কাস্টগুলিতে সুরক্ষা টাইপ করা ইত্যাদি C

সার্বিক:

  • জাভা এবং সি / সি ++ একই গতি অর্জন করতে পারে
  • সি / সি ++ এর সম্ভবত চরম পরিস্থিতিতে সামান্য প্রান্ত রয়েছে (এটি আশ্চর্যজনক নয় যে এএএ গেম ডেভেলপাররা এখনও এটি পছন্দ করে, উদাহরণস্বরূপ)
  • অনুশীলনে এটি নির্ভর করে যে উপরে উল্লিখিত বিভিন্ন উপাদানগুলি আপনার নির্দিষ্ট প্রয়োগের জন্য কীভাবে ভারসাম্য বজায় রাখে।

9
এ্যাড "সি ++ এ optimisations জন্য আরও বেশি সময়": এটা এক সমন্বয় এর ওরাকল ভার্চুয়াল মেশিনের দেয় যে, তোমরা সার্ভার বেছে নেওয়া হয়েছে VM- র: এটা অর্ডার দীর্ঘ রান উচ্চতর পারফরম্যান্স করার অনুমতি একটি উচ্চ স্টার্ট-আপ খরচ গ্রহণ করে। ক্লায়েন্ট ভিএম, তবে সর্বোত্তম স্টার্টআপ সময়ের জন্য টুইট করা হয়েছে। সুতরাং যে পার্থক্য জাভা মধ্যে বিদ্যমান ।
জোছিম সউর

8
-1: একটি সি ++ সংকলক একটি খুব অনুকূলিত বাইনারি ক্রেট করতে আরও অনেক বেশি সময় (ঘন্টা, আক্ষরিক, একটি বড় গ্রন্থাগারের জন্য) নিতে পারে। জাভা জেআইটি সংকলক এত বেশি সময় নিতে পারে না, এমনকি "সার্ভার" সংস্করণও নিতে পারে না। আমি গুরুতরভাবে সন্দেহ করি যে জাভা জেআইটি সংকলক এমএস সি ++ সংকলক যেভাবে পুরো প্রোগ্রাম অপ্টিমাইজেশান সম্পাদন করতে সক্ষম হবে।
কোয়ান্ট_দেব

20
@ কোয়ান্ট_দেব: নিশ্চিত, তবে আমি কি উত্তরটি সি ++ সুবিধা হিসাবে বলেছি (উন্নততর অপ্টিমাইজেশানটি করার আরও সময়)? তাহলে -1 কেন?
মাইকের

13
আবর্জনা সংগ্রহ জাভা জন্য গতি সুবিধা নয়। এটি কেবলমাত্র একটি গতির সুবিধা যদি আপনি একজন সি ++ প্রোগ্রামার হন তবে আপনি কী করছেন তা জানেন না। যদি আপনি যা যা যা যা পরীক্ষা করছেন তা যদি আপনি কত দ্রুত বরাদ্দ করতে পারেন তবে হ্যাঁ, আবর্জনা সংগ্রহকারী জিতবে। সামগ্রিক প্রোগ্রামের পারফরম্যান্স, ম্যানুয়ালি মেমরি পরিচালনা করে এখনও আরও ভাল করা যায়।
বিলি ওনেল

4
... তবে সি ++ দিয়ে আপনি সর্বদা তাত্ত্বিকভাবে একটি "জেআইটি-জাতীয় স্তর" রাখতে পারেন যা রানটাইমের সময় একই শাখা অপ্টিমাইজেশানগুলি করতে পারে, যখন কোনও সি ++ প্রোগ্রামের কাঁচা গতি বজায় রাখত। (তাত্ত্বিকভাবে। :()
মতিন উলহাক

19

জাভা রানটাইম নয বাইটকোড ব্যাখ্যা। বরং এটি জাস্ট ইন টাইম সংকলন নামে পরিচিত যা ব্যবহার করে । মূলত, প্রোগ্রামটি চলমান হিসাবে, এটি বাইকোড নেয় এবং নির্দিষ্ট সিপিইউর জন্য অনুকূলিত দেশীয় কোডে রূপান্তর করে।


অনুশীলনে, হ্যাঁ নীতিগতভাবে, এটি নির্ভর করে - প্রারম্ভিক জাভা ভার্চুয়াল মেশিনগুলি বাইটকোড দোভাষী দ্বারা ব্যবহৃত হয় এবং আপনি যথেষ্ট পরিশ্রমী দেখলে আপনি সম্ভবত বাইটকোড-ব্যাখ্যাকারী ভিএম খুঁজে পেতে পারেন।
স্টিভ 314

10
@ স্টিভ 314: তবে বিশুদ্ধরূপে ব্যাখ্যা করা ভিএমগুলি সি ++ ছাড়িয়ে যাবে না , তাই তারা এই প্রশ্নের সাথে সত্যই প্রাসঙ্গিক নয়।
জোচিম সউর

জেআইটি সংকলক কোডটির সুনির্দিষ্ট ব্যবহারের জন্য গতিশীলরূপে অনুকূলিতও হতে পারে, যা স্ট্যাটিকালি সংকলিত কোডের সাথে সম্ভব নয়।
স্টারব্লিউ

2
@ স্টারব্লিউ, ভাল, একটি স্থির সংকলন দিয়ে কিছুটা সম্ভব - প্রোফাইল-গাইডড অপটিমাইজেশন দেখুন।
এসকে-যুক্তি

18

সমস্ত জিনিস সমান হচ্ছে, আপনি বলতে পারেন: না জাভা কখনই দ্রুত হওয়া উচিত নয় । আপনি সর্বদা স্ক্র্যাচ থেকে সি ++ এ জাভা প্রয়োগ করতে পারেন এবং এরপরে কমপক্ষে ভাল পারফরম্যান্স হিসাবে পেতে পারেন। বাস্তবে, তবে:

  • জেআইটি শেষ ব্যবহারকারীর মেশিনে কোডটি সংকলন করে, তারা যে সিপিইউ চালাচ্ছে তার জন্য এটি অনুকূলিতকরণের অনুমতি দেয়। সংকলনের জন্য এখানে ওভারহেড থাকা সত্ত্বেও, এটি নিবিড় অ্যাপগুলির জন্য ভাল মূল্য দিতে পারে pay আপনি যে সিপিইউ ব্যবহার করছেন তা প্রায়শই বাস্তব জীবনের প্রোগ্রামগুলি সংকলিত হয় না।
  • জাভা সংকলক সি ++ কম্পাইলারের চেয়ে জিনিসগুলি স্বয়ংক্রিয়ভাবে অনুকূল করতে আরও ভাল হতে পারে। অথবা এটি নাও হতে পারে তবে বাস্তব বিশ্বে জিনিসগুলি সর্বদা নিখুঁত হয় না।
  • কর্মক্ষেত্রের আচরণ অন্যান্য কারণের কারণে যেমন আবর্জনা সংগ্রহের কারণে পৃথক হতে পারে। সি ++ এ আপনি সাধারণত কোনও অবজেক্টের সাথে সম্পন্ন করার সাথে সাথে ডাস্ট্রাস্টরকে কল করেন। জাভাতে, আপনি কেবল প্রকৃত ধ্বংসকে বিলম্ব করে রেফারেন্সটি প্রকাশ করেন। পারফরম্যান্সের দিক থেকে এটি একটি পার্থক্যের আরও একটি উদাহরণ যা এখানে বা সেখানে নেই। অবশ্যই, আপনি তর্ক করতে পারেন যে আপনি সি ++ তে জিসি বাস্তবায়ন করতে পারেন এবং এটি দিয়ে সম্পন্ন করতে পারেন, তবে বাস্তবতা হ'ল খুব কম লোকই / করতে / করতে চায়।

একদিকে যেমন, এটি 80/90 এর দশকে সি সংক্রান্ত বিতর্কটির কথা মনে করিয়ে দেয়। প্রত্যেকেই ভাবছিল "সি কি সমাবেশের মতো দ্রুত হতে পারে?" মূলত, উত্তরটি ছিল: কাগজে নেই, তবে বাস্তবে সি সংকলক 90% এসেম্বলি প্রোগ্রামারগুলির চেয়ে বেশি কার্যকর কোড তৈরি করেছে (ভাল, একবার এটি কিছুটা পরিপক্ক হয়ে গেলে)।


2
জিসির বিষয়ে, কেবল এটি নয় যে জিসি অবজেক্টগুলির ধ্বংসকে বিলম্ব করতে পারে (যা দীর্ঘ মেয়াদে গুরুত্বপূর্ণ নয়); সত্য যে আধুনিক জিসিগুলির সাথে, সি ++ এর তুলনায় জাভাতে স্বল্প-স্থায়ী বস্তুর বরাদ্দ / অবনতি অত্যন্ত সস্তা।
প্যাটার টারিক

@ পেটারট্রিক হ্যাঁ, আপনি ঠিক বলেছেন, ভাল পয়েন্ট।
ড্যানিয়েল বি

9
@ পিটারট্রাক কিন্তু সি ++ তে স্বল্প-স্থায়ী অবজেক্টটি প্রায়শই স্ট্যাকের উপরে রাখা হয়, যা কোনও জিসি-এড হিপ জাভা ব্যবহার করতে পারে তার চেয়ে অনেক দ্রুত হয়।
কোয়ান্ট_দেব

@ কোয়ান্ট_দেব, আপনি আর একটি উল্লেখযোগ্য জিসি প্রভাব ভুলে গেছেন: সংহতকরণ। সুতরাং আমি নিশ্চিত যে কোন উপায় দ্রুত হয় না।
এসকে-যুক্তি

3
@ ডোনালফেলোস আপনার কী মনে করে যে আমাকে সি ++ তে মেমরি পরিচালনা সম্পর্কে উদ্বিগ্ন হতে হবে? বেশিরভাগ সময় আমি না। আপনার প্রয়োগ করার জন্য এমন সাধারণ নিদর্শন রয়েছে যা জাভা থেকে পৃথক, তবে এটি।
কোয়ান্ট_দেব

10

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

...

জেভিএমগুলি কেবলমাত্র বিকাশকারীই জানতে পারে things এমন জিনিসগুলি আবিষ্কার করার জন্য আশ্চর্যজনকভাবে ভাল। জেভিএম কেস-কেস-কেস ভিত্তিতে স্ট্যাক বরাদ্দ এবং হিপ বরাদ্দের মধ্যে চয়ন করতে দিয়ে আমরা প্রোগ্রামারটিকে স্ট্যাকের বা স্তূপে বরাদ্দ দেওয়ার বিষয়ে উদ্বেগ তৈরি না করে স্ট্যাক বরাদ্দের পারফরম্যান্স সুবিধা পেতে পারি।

http://www.ibm.com/developerworks/java/library/j-jtp09275/index.html


এটি পুরো ছবির একটি ছোট্ট অংশ, তবে তা সত্ত্বেও প্রাসঙ্গিক।
জোছিম সউর

2
আমি এর উপাদানটি কেমন তা পছন্দ করি: জাভা নুব জন্য, যাদু জিসির উপর বিশ্বাস করুন, এটি আরও ভাল knows
মর্গ

1
@ মুরগ: বা আপনি এটি সেভাবে পড়তে পারেন: জাভা এমন লোকদের জন্য যা কিছুটা দ্বিধা এবং ম্যানুয়াল মেমরি পরিচালনার সাথে তাদের সময় নষ্ট না করে জিনিসগুলি সম্পন্ন করতে পছন্দ করে।
ল্যান্ডেই

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

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

5

সম্পূর্ণ অপ্টিমাইজড জাভা প্রোগ্রাম খুব কমই একটি সম্পূর্ণ অপ্টিমাইজড সি ++ প্রোগ্রামকে হারাতে পারে, মেমরি ম্যানেজমেন্টের মতো বিষয়গুলির মধ্যে পার্থক্য জাভাতে আইডিয়েমেটিকালি সি ++ এ প্রয়োগ করা একই অ্যালগরিদমের চেয়ে অনেক বেশি অ্যালগরিদমকে জাভাতে প্রয়োগ করতে পারে।

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

এছাড়াও, যদিও সাধারণত সমস্ত তাত্পর্যপূর্ণ নয়, কিছু পারফরম্যান্স অপটিমাইজেশন রয়েছে যা জাভা-এর মতো একটি জেআইটি ভাষা সি ++ করতে পারে না। কোডটি সংকলিত হওয়ার পরে জাভা রানটাইম উন্নতিগুলি অন্তর্ভুক্ত করতে পারে , যার অর্থ JIT সম্ভাব্যভাবে নতুন (বা কমপক্ষে পৃথক) সিপিইউ বৈশিষ্ট্যগুলির সুবিধা নিতে অনুকূলিত কোড তৈরি করতে পারে। এই কারণে, একটি 10 ​​বছরের পুরানো জাভা বাইনারি সম্ভাব্য 10 বছরের পুরানো সি ++ বাইনারি ছাড়িয়ে যেতে পারে।

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


5

জাভাআরঞ্চে টিম হোলোয় পোস্ট করেছেন:

এখানে একটি আদিম উদাহরণ রয়েছে: যখন গণিত-নির্ধারিত চক্রগুলিতে মেশিনগুলি পরিচালনা করত, তখন একটি শাখার নির্দেশে সাধারণত 2 টি আলাদা সময় ছিল। যখন শাখা নেওয়া হয়েছিল তার জন্য একটি, যখন যখন শাখা নেওয়া হয়নি for সাধারণত, নো-শাখা মামলাটি দ্রুত ছিল was স্পষ্টতই, এর অর্থ হ'ল আপনি কেসের ক্ষেত্রে বেশি সাধারণ ছিলেন তা জ্ঞানের উপর ভিত্তি করে যুক্তিটি অনুকূল করতে পারেন (আমরা যেটা "জানি" সবসময় আসলে কী হয় না তা সীমাবদ্ধতার অধীনে)।

জেআইটি রিকম্পিলেশন এটিকে আরও একধাপ এগিয়ে নিয়েছে। এটি প্রকৃত বাস্তব সময়ের ব্যবহার নিরীক্ষণ করে এবং আসলে সবচেয়ে সাধারণ ক্ষেত্রে কী তার উপর ভিত্তি করে যুক্তিটিকে সরিয়ে দেয়। এবং কাজের চাপ শিফট হলে এটি আবার ফ্লিপ করুন। স্ট্যাটিক্যালি সংকলিত কোড এটি করতে পারে না। এইভাবে জাভা কখনও কখনও হ্যান্ড-টিউন করা সমাবেশ / সি / সি ++ কোড সম্পাদন করতে পারে।

সূত্র: http://www.coderanch.com/t/547458/Performance/java/Ahead-Time-vs- Just- Time


3
এবং আবারও, এটি ভুল / অসম্পূর্ণ। প্রোফাইল-নির্দেশিত অপেস্টেশন সহ স্থিত সংকলকগুলি এটি সনাক্ত করতে পারে
কনরাড রুডল্ফ

2
কনরাড, স্থির সংকলকগণ বর্তমান কাজের চাপের উপর ভিত্তি করে যুক্তিটি ফ্লিপ করতে পারবেন? আমি যেমন বুঝতে পারি, স্থির সংকলকগুলি একবার কোড উত্পন্ন করে এবং এটি চিরকাল একই থাকে।
থিয়াগো নেগ্রি

2
বর্তমান কাজের চাপ, না। তবে সাধারণ কাজের চাপ। প্রোফাইল-গাইডড অপ্টিমাইজেশন বিশ্লেষণ করে যে কীভাবে আপনার প্রোগ্রামটি সাধারণ লোডের অধীনে চলে এবং হটস্পট জেআইটি যেমন ঠিক তেমনি হট স্পটগুলিকে অনুকূল করে তোলে।
কনরাড রুডল্ফ

4

এর কারণ হল আপনার জাভা প্রোগ্রামটি চালানোর সময় চূড়ান্ত পদক্ষেপ উত্পন্ন মেশিন কোডটি JVM এর অভ্যন্তরে স্বচ্ছভাবে ঘটে আপনার সি ++ প্রোরাম তৈরির সময় স্পষ্ট করার পরিবর্তে।

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

গেটরকে স্বয়ংক্রিয়ভাবে অন্তর্নিহিত করার মতো একটি জিনিস, যাতে একটি মান জ্যাম্প-রিটার্ন দরকার হয় না, জিনিসগুলিকে গতি দেয়।

যাইহোক, যে জিনিসটি সত্যই দ্রুত প্রোগ্রামগুলিকে মঞ্জুরি দিয়েছে তা হ'ল পরে পরিষ্কার করা cleaning জাভাতে আবর্জনা সংগ্রহের ব্যবস্থা সি-তে ম্যানুয়াল মলোকমুক্তের চেয়ে দ্রুত Many


নোট করুন যে এই এম্বেড থাকা স্টাফটি JVM শুরু করে বৃহত্তর এবং ধীর করে দেয় যতক্ষণ না আরও ভাল কোড ধরার সুযোগ থাকে।

1
"অনেকগুলি আধুনিক মালকুক্ত মুক্ত প্রয়োগগুলি নীচে একটি আবর্জনা সংগ্রহকারী ব্যবহার করে।" সত্যি? আমি আরও জানতে চাই; যদি আপনার কোন রেফারেন্স আছে?
শান ম্যাকমিলান

ধন্যবাদ. আমি বলার একটি উপায় খুঁজতে চেষ্টা করছিলাম যে জেভিএম-তে এক্সিকিউটেবল কোডের সংকলন করতে কেবল কেবল সময়ের সংকলক থাকে না, তবে একটি হট স্পট সংকলক যা চলমান কোডটিকে প্রোফাইল দেয় এবং ফলাফল হিসাবে আরও অনুকূলিত করে optim আমি সি ++ এর মতো ওয়ান-টাইম সংকলক এটির সাথে মেলে লড়াই করতে চাই।
হাইল্যান্ড মার্ক

@ সানমিসমিলন, আমি মলোকমুক্ত বাস্তবায়নগুলির কার্যকারিতা সম্পর্কে কিছুক্ষণ আগে একটি বিশ্লেষণ দেখেছি যেখানে উল্লেখ করা হয়েছিল যে দ্রুততম একজন নীচে একটি আবর্জনা সংগ্রহকারী ব্যবহার করেছেন। আমি কোথায় পড়েছি তা মনে করতে পারছি না।

এটি কি বিডিডাব্লু রক্ষণশীল জিসি ছিল?
ডেমি

4

সংক্ষিপ্ত উত্তর - এটি না। এটি ভুলে যান, বিষয়টি আগুন বা চাকার মতো পুরানো। জাভা বা .NET সি / সি ++ এর চেয়ে দ্রুত হবে না। এটি বেশিরভাগ কাজের জন্য যথেষ্ট দ্রুত যেখানে আপনার কোনওটিই অপ্টিমাইজেশন সম্পর্কে ভাবার দরকার নেই। ফর্ম এবং এসকিউএল প্রসেসিংয়ের মতো তবে এটি এখানেই শেষ হয়।

অযোগ্য বিকাশকারীদের দ্বারা লিখিত বেঞ্চমার্ক, বা ছোট অ্যাপ্লিকেশনগুলির জন্য হ্যাঁ, শেষ ফলাফলটি জাভা / .NET সম্ভবত নিকটতম হতে চলেছে এবং আরও দ্রুত হতে পারে।

বাস্তবে, স্ট্যাকের উপর মেমরি বরাদ্দ করা, বা কেবল মেমজোনগুলি ব্যবহার করার মতো সাধারণ জিনিসগুলি স্পষ্টভাবে জাভা / .NET কে হত্যা করবে।

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

for(...)
{
alloc_memory//Allocating heap in a loop is verrry good, in't it?
zero_memory//Extra zeroing, we really need it in our performance code
do_stuff//something like memory[i]++
realloc//This is lovely speedup
strlen//loop through all memory, because storing string length is soo getting old
free//Java will do that outside out timing loop, but oh well, we're comparing apples to oranges here
}//loop 100000 times

সি / সি ++ (বা নতুন স্থান নির্ধারণ) এ স্ট্যাক ভিত্তিক ভেরিয়েবলগুলি ব্যবহার করার চেষ্টা করুন, তারা অনুবাদ করেন sub esp, 0xff, এটি একক x86 নির্দেশ, জাভা দিয়ে এটি হারাতে পারেন - আপনি পারবেন না ...

বেশিরভাগ সময় আমি সেই বেঞ্চগুলি দেখি যেখানে সি ++ এর বিপরীতে জাভা তুলনা করা হয় এটি আমার মতো হয়ে যায়, ডাব্লু? ভুল মেমরি বরাদ্দ কৌশল, মজুদ ছাড়াই স্ব-বৃদ্ধি পাত্রে, একাধিক নতুন। এটি পারফরম্যান্স ভিত্তিক সি / সি ++ কোডেরও কাছে নয়।

এছাড়াও একটি ভাল পঠন: https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf


1
ভুল। পুরোপুরি ভুল আপনি আপনার ম্যানুয়াল মেমরি ম্যানেজমেন্টের সাথে কোনও কমপ্যাফাইটিং জিসিকে ছাড়িয়ে নিতে সক্ষম হবেন না। নিষ্কলুষ রেফারেন্স গণনা একটি সঠিক চিহ্ন'ইউইপ এর চেয়ে ভাল আর হবে না। এটি জটিল মেমরি পরিচালনার সাথে সাথেই C ++ একটি প্রতিবন্ধকতা।
এসকে-যুক্তি

3
@ এসকে-লজিক: ভুল, মেমোজন বা স্ট্যাক বরাদ্দের সাথে মেমোরি বরাদ্দ বা সমস্ত হ্রাস নেই। আপনার কাছে মেমরির একটি ব্লক রয়েছে এবং আপনি কেবল এটিতে লিখুন। সম্মিলিত সুরক্ষা ইন্টারলকড এক্সচেঞ্জ ইত্যাদির মতো অস্থায়ী পরিবর্তনশীল সাথে ব্লককে মুক্ত হিসাবে চিহ্নিত করুন এবং পরবর্তী থ্রেডটি মেমরির জন্য কোনও OS এ না গিয়ে প্রিলোকটেড ব্লকে কেবল ডেটা ফেলে দেয়, যদি এটি দেখায় তবে এটি বিনামূল্যে। স্ট্যাক সহ এটি আরও সহজ, একমাত্র ব্যতিক্রম ব্যতীত আপনি স্ট্যাকের উপর 50 এমবি ডাম্প করতে পারবেন না। এবং সেই বস্তুর আজীবন কেবলমাত্র only inside এর মধ্যে}
কোডার

2
@ এসকে-যুক্তি: সংকলকরা হ'ল যথার্থতা, দ্বিতীয়ত পারফরম্যান্স। অনুসন্ধান ইঞ্জিন, ডাটাবেস ইঞ্জিন, রিয়েল-টাইম ট্রেডিং সিস্টেম, গেমস যা আমি পারফরম্যান্সকে সমালোচনা বিবেচনা করব। এবং তাদের বেশিরভাগই স্বচ্ছ কাঠামোর উপর নির্ভর করে। এবং যেভাবেই হোক, সংকলকগুলি বেশিরভাগ সি / সি ++ তে লেখা থাকে। কাস্টম বরাদ্দকারীদের সাথে আমার ধারণা। তারপরে আবার, আমি রামম্যাপের উপরে গাছ বা তালিকার উপাদান ব্যবহার করে কোনও সমস্যা দেখছি না। আপনি কেবল নতুন স্থাপনা ব্যবহার করুন use এ নিয়ে তেমন কোনও জটিলতা নেই।
কোডার

3
@ এসকে-যুক্তি: এটি দেখেছি এমন প্রতিটি। নেট / জাভা অ্যাপ্লিকেশনটি খুব ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে পরিণত হয় a সান সি / সি ++ কোডে পরিচালিত অ্যাপ্লিকেশনটির প্রতিটি পুনর্লিখনের ফলে ক্লিনার এবং হালকা অ্যাপ্লিকেশনটি তৈরি হয়েছিল। পরিচালিত অ্যাপগুলি সর্বদা ভারী। VS2010 বনাম 2008 দেখুন S একই ডেটা স্ট্রাকচার, তবে ভিএস 2010 একটি HOG। সঠিকভাবে লিখিত সি / সি ++ অ্যাপ্লিকেশনগুলি সাধারণত মিলি সেকেন্ডে বুট হয় এবং স্প্ল্যাশ স্ক্রিনগুলিতে আটকাবেন না, যখন খুব কম স্মৃতিও গ্রাস করেন। একমাত্র নেতিবাচকতা হ'ল আপনাকে হার্ডওয়্যারটি মাথায় রেখে কোড করতে হবে এবং আজকাল কীভাবে হয় তা অনেক লোক জানে না। এটি কেবলমাত্র মাপদণ্ডের যেখানে পরিচালনা করার সুযোগ রয়েছে।
কোডার

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

2

বাস্তবতা হ'ল তারা উভয়ই কেবলমাত্র উচ্চ স্তরের এসেমব্লার যা প্রোগ্রামার তাদের যা বলে ঠিক তা করে, প্রোগ্রামার তাদের ঠিক কীভাবে প্রোগ্রামার তাদের বলছে তা নির্ধারণ করে। পারফরম্যান্সের পার্থক্যগুলি এতটা ছোট যেগুলি সমস্ত ব্যবহারিক উদ্দেশ্যে অপ্রয়োজনীয় হতে পারে।

ভাষা "ধীর" নয়, প্রোগ্রামার একটি ধীর প্রোগ্রাম লিখেছিলেন। অধ্যয়নের লেখক তার নির্দিষ্ট কুড়াল পিষে না বেরিয়েই খুব সহজেই কোনও প্রোগ্রাম বিকল্প ভাষার সর্বোত্তম পদ্ধতি ব্যবহার করে একই প্রোগ্রাম করে কোনও ভাষা (কোনও ব্যবহারিক উদ্দেশ্যে) সেরা উপায়ে লেখা হয়।

স্পষ্টতই যদি আপনি হার্ড রিয়েলটাইম এম্বেড থাকা সিস্টেমের মতো বিরল প্রান্তের ক্ষেত্রে চলে যান তবে ভাষার পছন্দটি কোনও পার্থক্য করতে পারে, তবে এটি কতবার হয়? এবং এই ক্ষেত্রে, কতবার সঠিক পছন্দ অন্ধভাবে সুস্পষ্ট হয় না।


2
তত্ত্ব অনুসারে, একটি "আদর্শ" জেটিং ভিএম অবশ্যই গতিশীলভাবে সংগ্রহ করা প্রোফাইলিং তথ্যের সাথে তার অপটিমাইজেশনগুলি সামঞ্জস্য করে স্ট্যাটিক্যালি সংকলিত কোডকে ছাড়িয়ে যায়। অনুশীলনে, জেআইটি সংকলকগুলি এখনও এটি স্মার্ট নয় তবে তারা কমপক্ষে তাদের বৃহত এবং ধীর স্থির সমবয়সীদের মতো একই মানের কোড তৈরি করতে সক্ষম।
এসকে-যুক্তি

2

নিম্নলিখিত লিঙ্কগুলি দেখুন ... তবে এটি কীভাবে সম্ভব? এটি আমার মনের কথা ভঙ্গ করে যে ব্যাখ্যা করা বাইটকোড কোনও সংকলিত ভাষার চেয়ে দ্রুততর হতে পারে।

  1. এই ব্লগ পোস্টগুলি কি বিশ্বাসযোগ্য প্রমাণ সরবরাহ করে?
  2. এই ব্লগ পোস্টগুলি কি নিশ্চিত প্রমাণ দেয়?
  3. এই ব্লগ পোস্টগুলি কি "ব্যাখ্যাযুক্ত বাইটকোড" সম্পর্কে প্রমাণ সরবরাহ করে?

কিথ লেয়া আপনাকে "সুস্পষ্ট ত্রুটিগুলি" আছে বলে জানিয়েছে কিন্তু "স্পষ্টত ত্রুটিগুলি" সম্পর্কে কিছুই করে না। 2005 সালে ফিরে সেই পুরানো কাজগুলি বাতিল করা হয়েছিল এবং তাদের এখন প্রতিস্থাপনের খেলাগুলিতে প্রদর্শিত টাস্কগুলি প্রতিস্থাপন করা হয়েছিল ।

কিথ লেয়া আপনাকে বলেছে যে তিনি "সেকেলে গ্রেট কম্পিউটার ল্যাঙ্গুয়েজ শ্যুটআউট থেকে সি ++ এবং জাভার জন্য মাপদণ্ডের কোড নিয়েছিলেন এবং পরীক্ষা চালিয়েছিলেন" তবে বাস্তবে তিনি কেবল সেই পুরানো পরীক্ষাগুলির মধ্যে 25 টির জন্য পরিমাপ দেখান

কেইথ লেয়া এখন আপনাকে বলেছে যে তিনি সাত বছর আগে ব্লগ পোস্টের সাথে কিছু প্রমাণ করার চেষ্টা করছিলেন না, তবে ফিরে এসে তিনি বলেছিলেন "আমি জাভা শুনে ধীরে ধীরে অসুস্থ হয়ে পড়েছিলাম, যখন আমি জানতাম এটি খুব দ্রুত ..." যা বোঝায় ফিরে তখন তিনি কিছু প্রমাণ করার চেষ্টা করছিলেন।

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

এমনকি 25 টি ক্ষুদ্র ক্ষুদ্র প্রোগ্রামের পরিমাপ কি নিশ্চিত প্রমাণ দেয়?

এই পরিমাপগুলি "মিশ্র মোড" হিসাবে চালিত প্রোগ্রামগুলির জন্য যা জাভা ব্যাখ্যা করে না জাভা - "হটস্পট কীভাবে কাজ করে তা মনে রাখবেন" " আপনি সহজেই কত ভাল জাভা রান "ব্যাখ্যা বাইটকোড", কারণ আপনার জাভা জোর করতে পারেন খুঁজে বের করতে পারেন শুধুমাত্র কেবল সময় কিছু জাভা প্রোগ্রাম সঙ্গে এবং -Xint বিকল্প ছাড়াই চালানো - বাইটকোড ব্যাখ্যা।


-1

এটি "বিভক্ত বাইটকোড" -র এই অদ্ভুত ধারণাটি কীভাবে বিস্তৃত তা আমাকে বিস্মিত করে। আপনি কি কখনও জেআইটি-সংকলনের কথা শুনেছেন? আপনার যুক্তি জাভাতে প্রয়োগ করা যাবে না।

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


ব্যাখ্যার বহুল প্রচার সম্ভবত তাদের কম্পিউটার বিজ্ঞানে পারদর্শী লোকদের কারণে to জাভা ভার্চুয়াল মেশিনটি এমন একটি মেশিন যা জাভা বাইটকোড গ্রহণ করে এবং কোনও মেশিনে এটি চালায় / কার্যকরভাবে জাভা বাইটকোড চালানোর পক্ষে সক্ষম না হয়ে কার্যত সমতুল্য নেটিভ প্রোগ্রাম লিখতে সক্ষম হয় না। এটি একটি দোভাষী। আপনি এর ক্যাচিংয়ের কৌশলগুলি আপনি যে কোনও নাম, জেআইটি বা অন্যথায় ভাবতে পারেন তা দিতে পারেন, তবে এটি দোভাষীর সংজ্ঞা অনুসারে একটি দোভাষী।
থিটন

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

2
উম্ম, তবে বাইটকোডটি চালানোর জন্য, স্থানীয় কোডে রূপান্তর করতে হবে - আপনি সিপিইউতে জাভা বাইটকোড খাওয়াতে পারবেন না। সুতরাং আকার যুক্তি অবৈধ।
কোয়ান্ট_দেব

@ কোয়ান্ট_দেব অবশ্যই - আমি বলেছিলাম যে এই মামলাটি পুরোপুরি জেভিএমের সাথে সম্পর্কিত নয়। সেই প্রভাবটি কাজ করতে আপনার আরও একটি সহজ বাইকোড ইঞ্জিন দরকার।
এসকে-যুক্তি

-1

জেআইটি, জিসি এবং অন্যদিকে, সি ++ জাভা থেকে খুব সহজেই খুব বেশি আলস্য করা যায়। এটি বেঞ্চমার্কগুলিতে প্রদর্শিত হবে না, তবে জাভা বিকাশকারী এবং একটি সি ++ বিকাশকারী দ্বারা লিখিত একই অ্যাপ্লিকেশনটি জাভাতে আরও দ্রুত হতে পারে।

  • অপারেটর ওভারলোডিং। "+" বা "=" এর মতো প্রতিটি সাধারণ অপারেটর সুরক্ষা চেক, ডিস্ক অপারেশন, লগিং, ট্র্যাকিং এবং প্রোফাইলিংয়ের মাধ্যমে কয়েকশ লাইনের কোড কল করতে পারে। এবং এগুলি ব্যবহার করা এত সহজ যে আপনি একবার অপারেটরগুলিকে ওভারলোড করার পরে, আপনি কীভাবে স্ট্যাকগুলি ব্যবহার করে তা লক্ষ্য করেই প্রাকৃতিক এবং প্রচুর পরিমাণে সেগুলি ব্যবহার করেন।
  • টেমপ্লেট। এগুলি মেমরির মতো গতিকে প্রভাবিত করে না। সতর্কতার সাথে টেমপ্লেটগুলির ব্যবহার আপনাকে লক্ষ না করেই কয়েক মিলিয়ন লাইন কোড (বেসিক টেমপ্লেটের বিকল্প) তৈরি করবে। তবে তারপরে বাইনারি লোডিং সময়, মেমরির ব্যবহার, স্ব্যাকেজ ব্যবহার - সমস্ত কিছুই বেনমার্কের বিরুদ্ধেও কাজ করে। এবং র‌্যামের ব্যবহার ছাদ দিয়ে যায়।

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

আরও একটি সতর্কতা: জিসি ম্যানুয়ালি বরাদ্দ পরিচালনার চেয়ে দ্রুত বা ধীর হতে পারে। আপনি যদি অনেকগুলি ছোট ছোট অবজেক্ট বরাদ্দ করেন, জিসি পরিবেশে সাধারণত মেমরির একটি অংশ বরাদ্দ করা হয় এবং এর নতুন অংশগুলির প্রয়োজন হিসাবে প্রেরণ করা হয়। পরিচালিত - প্রতিটি বস্তু = পৃথক বরাদ্দ উল্লেখযোগ্য সময় নেয়। ওহ, আপনি যদি একবারে প্রচুর স্মৃতি মেলোক করেন এবং তারপরে এটির কিছু অংশ ম্যানুয়ালি আপনার জিনিসগুলিতে অর্পণ করেন বা কিছু বড় বড় অবজেক্ট ব্যবহার করেন তবে আপনি আরও দ্রুত আসতে পারেন।


4
আমি উভয় দফার সাথে একমত নই। আপনি অপারেটর ব্যবহার করুন বা পদ্ধতিগুলি অপ্রাসঙ্গিক। আপনি বলে যে তারা প্রসারিত হবে। বাজে কথা - পদ্ধতির চেয়ে বেশি নয়; আপনি হয় তাদের কল করতে হবে, না। এবং টেমপ্লেটগুলির ফলে একাধিক ব্যবহারের জন্য সেই নির্দিষ্ট কোডটিকে আবার হাতের লেখার পরিবর্তে আর কোনও কোডের ফলাফল হয় না। রানটাইম প্রেরণের (ভার্চুয়াল ফাংশন) এর চেয়ে বেশি কোড থাকতে পারে তবে এটিও অপ্রাসঙ্গিক হবে: নির্দেশের ক্যাশে লাইনগুলির কার্য সম্পাদন টাইট লুপগুলিতে সবচেয়ে গুরুত্বপূর্ণ এবং এখানে কেবলমাত্র একটি টেম্পলেট ইনস্ট্যান্টেশন ব্যবহার করা হবে, সুতরাং কোনও প্রাসঙ্গিক মেমরি চাপ নেই টেমপ্লেট কারণে।
কনরাড রুডল্ফ

সাধারণ মানসিকতা হ'ল পদ্ধতিগুলি ব্যয়বহুল, অপারেটরগুলি সস্তা। আপনি যখন প্রয়োজন তখন পদ্ধতিগুলি ব্যবহার করেন, অপারেটররা যখনই আপনার সময় বাঁচাতে এবং অনুকূলিত করতে চান। এটি কোনও প্রযুক্তিগত বিষয় নয়, তবে মনস্তাত্ত্বিক - এটি নয় যে অপারেটরগুলি "ভারী", তারা ব্যবহার করা সহজতর এবং ঘন ঘন ঘন ব্যবহৃত হয়। (প্লাস আপনি পূর্ব-বিদ্যমান কোডে একটি সাধারণ ব্যবহৃত অপারেটরকে ওভারলোড করতে পারেন, এটি মূল হিসাবে একই হিসাবে তৈরি করে অতিরিক্ত অতিরিক্ত - এবং হঠাৎ পুরো কোডটি উল্লেখযোগ্যভাবে ধীর হয়ে যাবে
এসএফ।

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

1
ট্রিক প্রশ্ন। আমি এই সব সময়ে দ্বিতীয় অনুমান হবে, আমি পরিমাপ হবে কাজ তারপর । আমার সেই কৌশলটি নিয়ে কখনও সমস্যা হয়নি
কনরাড রুডলফ

1
@ কনরাডরুডল্ফ: কোডটি লেখার স্বচ্ছতা এবং স্বাচ্ছন্দ্যের বিষয়টি এলোমেলো হয়ে যায়, এটি বাগ-মুক্ত এবং রক্ষণাবেক্ষণযোগ্য করে তোলে। অ্যালগরিদম বাস্তবায়নের দক্ষতা সম্পর্কে বিষয়টি এখনও দাঁড়িয়েছে: আপনি যদি obj.fetchFromDatabase("key")একই কী এর জন্য পাঁচ লাইনের কোডের মধ্যে তিনবার লিখতে চলেছেন তবে আপনি একবারে এই মানটি নিয়ে এসে স্থানীয় ভেরিয়েবলে ক্যাশে করবেন কিনা তা আপনি দ্বিগুণ ভাবেন। আপনি লিখতে পারেন obj->"key"সঙ্গে ->যেমন ডাটাবেসের আনা কাজ করতে ওভারলোড হচ্ছে, আপনি অনেক বেশী প্রবণ শুধু এটা পাস কারণ অপারেশন খরচ স্পষ্ট নয় দিন করতে চলেছেন।
এসএফ

-2

কোনওভাবে স্ট্যাক এক্সচেঞ্জ আমার অন্যান্য স্ট্যাকপয়েন্টগুলি গ্রহণ করে না ... দুর্ভাগ্যক্রমে কোনও উত্তর নেই ...

তবে এখানে দ্বিতীয় সবচেয়ে বেশি ভোট দেওয়া উত্তর আমার নম্র মতামতটিতে ভুল তথ্য দিয়ে পূর্ণ of

সি / সি ++ তে বিশেষজ্ঞের একটি হ্যান্ড রোলড অ্যাপ্লিকেশনটি জাভা অ্যাপ্লিকেশন, পিরিয়ডের চেয়ে সবসময়ই দ্রুত হতে চলেছে। এখানে 'জাভা বা দ্রুততমের মতো দ্রুত' নেই। এটি কেবলমাত্র দ্রুত, আপনি নীচে যে আইটেমগুলি উদ্ধৃত করেছেন তা হ'ল:

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

আবর্জনা সংগ্রহ হ'ল এমন একটি সরঞ্জাম যা কেবলমাত্র কোনও প্রোগ্রামার কম বা কম দক্ষ ফ্যাশনে কোনও প্রোগ্রামারকে অপসারণ করতে ভুলে গিয়েছিলেন এমন সংস্থানগুলিকে সহজভাবে অপসারণ করে।

স্পষ্টতই এটি কেবল বিশেষজ্ঞের (আপনি এই শব্দটি বেছে নিয়েছেন) সি প্রোগ্রামার তার স্মৃতি পরিচালনা করতে কী করবে তার চেয়ে ধীর হতে পারে (এবং সঠিকভাবে লিখিত অ্যাপগুলিতে কোনও ফাঁস নেই)।

একটি পারফরম্যান্স অপ্টিমাইজড সি অ্যাপ্লিকেশনটি এটি যে সিপিইউ চলছে তা জানে, এটি এটি সংকলন করা হয়েছে, অন্যথায় আপনি পারফর্মেন্সের জন্য সমস্ত পদক্ষেপগুলি বেশ কার্যকরভাবে গ্রহণ করেন নি?

রানটাইম পরিসংখ্যান এটি আমার জ্ঞানের বাইরে, তবে আমি সন্দেহ করি যে সি তে একজন বিশেষজ্ঞের আবার অটোমেটেড অপ্টিমাইজেশানকে আউটস্মার্ট করার জন্য পর্যাপ্ত শাখার পূর্বাভাস জ্ঞান রয়েছে -

খুব ভাল লাইব্রেরি জাভাতে লাইব্রেরির মাধ্যমে সহজেই পাওয়া যায় না এমন অনেক-খুব-অনুকূল-কার্যকরী ফাংশন রয়েছে এবং যে কোনও ভাষায় এটি একই সত্য, তবে সর্বাধিক অনুকূলিত লাইব্রেরি সিতে লেখা হয়, বিশেষত গণনার জন্য।

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

সার্বিক:

JVM এ প্রচুর সুরক্ষা, বৈশিষ্ট্য এবং সরঞ্জাম সহ যেভাবে কাজ করে তা জাভা কখনই সি / সি ++ এর গতিতে পৌঁছতে পারে না।

অনুকূলতর সফ্টওয়্যারটিতে সি ++ এর একটি নির্দিষ্ট স্পষ্ট প্রান্ত রয়েছে, এটি কম্পিউটিং বা গেমসের জন্যই হোক এবং সি ++ বাস্তবায়নগুলি কোডিং প্রতিযোগিতাটি এমন পয়েন্টে জেতে দেখা যায় যে সেরা জাভা বাস্তবায়ন কেবল দ্বিতীয় পৃষ্ঠায় দেখা যায়।

অনুশীলনে সি ++ একটি খেলনা নয় এবং আপনাকে বেশিরভাগ আধুনিক ভাষাগুলি যেগুলি ভুলরূপে পরিচালনা করতে পারে সেগুলি থেকে দূরে সরিয়ে দেবে না, তবে সহজ এবং কম সুরক্ষিত হয়ে তা সহজাততর দ্রুত।

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


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

4
এই উত্তরটি আধুনিক অপটিমাইজাররা কী করতে পারে সে সম্পর্কে ভুল ধারণা থেকে পূর্ণ। হ্যান্ড-অপ্টিমাইজড কোড এর বিপরীতে সুযোগ দাঁড়ায় না। কিন্তু তারপর, সি ++ এছাড়াও একটি সর্বোচ্চকরন কম্পাইলার হয়েছে।
কনরাড রুডল্ফ

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

কনরাড, আমি সম্মত নই যে আমি আধুনিকতর অপ্টিমাইজারগুলিকে অবমূল্যায়ন করি ... তবে আমি আকর্ষণীয় মনে করি যে আপনি হ্যান্ড-অপ্টিমাইজড কোডটিকে অটো-অপ্টিমাইজড কোডের চেয়ে নিকৃষ্ট বলে মনে করেন। সংকলকটি কোন মানুষ দেখতে পারে না তা দেখার জন্য আপনি ঠিক কীটি আশা করেন?
মর্গ

1
ঠিক আছে। -1 ঠেলাঠেলি চালিয়ে যান, যা জাভা থেকে সি ++ আরও দ্রুতগতিযুক্ত তা পরিবর্তন করবে না। আমি আধুনিক সংকলকগুলির সম্পর্কে খুব বেশি কিছু জানি না, তবে এটি মূল পয়েন্টটির সাথে কোনও পার্থক্য করে না, যা সঠিক এবং এখানে সর্বাধিক ভোট দেওয়া উত্তরের বিপরীতে রয়েছে। কেন এইচপিসির জন্য তাদের জিপিইউতে এনভিডিয়ায় সি ++ অগ্রাধিকার হবে? কেন সমস্ত গেমস সি ++ এ লেখা হবে, কেন প্রতিটি সিবিতে প্রতিটি ডিবি ইঞ্জিন লেখা হবে?
মর্গ

-4

আমি জাভাতে কমপক্ষে দুটি চিত্তাকর্ষক এমএমও দেখেছি, গেমসের পক্ষে এটির পক্ষে যথেষ্ট দ্রুতগতি নয় এটি একটি মিসনোমার। গেম ডিজাইনাররা অন্যান্য ভাষার তুলনায় সি ++ এর পক্ষে আরও বেশি পছন্দ করেন বলে এটি কেবল জাভা সম্পর্কিত নয়, এর অর্থ কেবল প্রোগ্রামাররা অন্য কোনও প্রোগ্রামিং ল্যাঙ্গুয়েজ / দৃষ্টান্তগুলির সাথে সত্যই ডাবলড হয়নি। সি / সি ++ বা জাভা এমনকি জাভা হিসাবে উন্নত যে কোনও ভাষাতে এমন কোনও কোড তৈরি করতে পারে যা গতি যুক্তিটি প্রযুক্তিগতভাবে পূরণ করতে বা পরাস্ত করতে পারে। প্রোগ্রামাররা কী জানেন, কোন দলগুলি সবচেয়ে বেশি গুরুত্বপূর্ণ এবং কেন সবচেয়ে গুরুত্বপূর্ণ যে তারা কেন সরঞ্জাম ব্যবহার করে তা নিয়ে কী কাজ করে তা এই সমস্ত কিছুর ও নীচে নেমে আসে। যেহেতু আমরা প্রোগ্রামিংয়ের গেম ডেভলপমেন্ট দিকটি মোকাবেলা করছি, তারপরে যুক্তি আরও বেশি থাকতে হবে। সহজভাবে এটি রাখুন ' QA- এর সাথে মেলে এমন বাস্তব সরঞ্জাম এবং ব্যবসায়ের জন্য ডেড সেট ব্যবসায়ের জন্য অর্থ এবং সময় সম্পর্কে যা জাভা বা অন্য কোনও ভাষার চেয়ে সি ++ বেছে নেওয়ার জন্য xx কারণগুলির কোনও ভার নেই plays এটি কেবলমাত্র একটি গণ উত্পাদনের সিদ্ধান্ত। কম্পিউটিং অ্যালগরিদমের সবচেয়ে বেসিক স্তরে আমরা যা খেলছি সেগুলি এবং শূন্যগুলি, গতি যুক্তিটি কখনও গেমিংয়ের ক্ষেত্রে প্রয়োগ করা হতাহত যুক্তিগুলির মধ্যে একটি। আপনি যদি গতি অর্জন করতে চান যে খারাপভাবে প্রোগ্রামিং ভাষাগুলি পুরোপুরি বাদ দিন এবং সমাবেশের সাথে কাজ করুন যা সম্ভবত সবচেয়ে ভাল সুবিধা far


2
পাঠ্যের এই দেওয়ালটিতে এমন কোনও কিছু যুক্ত হতে দেখা যাচ্ছে না যা ইতিমধ্যে অন্যান্য উত্তরে বলা হয়নি। দয়া করে আপনার উত্তরটি আরও পঠনযোগ্য হওয়ার জন্য সম্পাদনা করুন এবং দয়া করে নিশ্চিত করুন যে আপনার উত্তর ঠিকানাগুলি অন্য উত্তর দ্বারা উত্থাপিত হয়নি। অন্যথায়, দয়া করে আপনার উত্তর মোছার বিষয়টি বিবেচনা করুন কারণ এটি কেবলমাত্র এই মুহুর্তে শব্দ যোগ করে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.