বিপুল পরিমাণ র‌্যামের প্রয়োজন হয় এমন অ্যাপ্লিকেশনগুলির জন্য সি ++ বা জাভা চয়ন করুন? [বন্ধ]


11

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

কেউ কি এর সাথে সম্পর্কিত বাস্তব-বিশ্বের উদাহরণগুলিতে ইঙ্গিত করতে পারে?


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

2
আপনি যদি 99 7.99 এর জন্য একটি জিবি পেতে পারেন, এটি কি সমস্যা? কিংস্টন 1 জিবি ডিডিআর 3
বো পার্সন

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

@ ডিএসাইন, আজকাল আপনি যেখানে 1000 ডলারের চেয়ে কম মেশিনে কয়েকশ জিগ গ্রহণ করতে মাদারবোর্ড পেতে পারেন সেখানে কয়েক গিগ মেমরির ব্যবহারে ভারী নয়।
এপ্রোগ্রামার

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

উত্তর:


11

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

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

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

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


আপনার উত্তরের জন্য ধন্যবাদ. আমি আপনার হার্ডওয়্যার চিত্রের সাথে একমত
ডিজাইন

আপনি যদি আবর্জনা সংগ্রহ চলাকালীন প্রোগ্রামটি বিরতি সম্পর্কে চিন্তা না করেন তবে মেমরির প্রয়োজনীয়তাগুলি অনেক কম smaller

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

1
@ ডেভিডথর্নলি আমি 10+ বছর ধরে সি / সি ++ এবং 6+ বছর জাভা করেছি। আমি সমস্ত বিবেচনায় জাভাটিকে সহজ বলে মনে করি: প্রোটোটাইপিং, বিকাশ, প্রসারিত এবং রক্ষণাবেক্ষণ। তবে যে কোনও ক্ষেত্রেই মতামত বলতে বোঝানো হয়েছে: ভিন্ন । সি -: =
মাইক নকিস

আপনারা কেউ বিগ-ডেটা, প্রসেসর-ক্ষুধার্ত প্রকল্পের জন্য প্রোগ্রাম করেছেন? সেখানে কোন মন্তব্য?
17:55

7

সমস্যাটি জাভা হিসাবে সি ++ ব্যবহার করা হচ্ছে না এবং জাভা এটি সি ++ হিসাবে ব্যবহার করা হচ্ছে না। জাভা ফ্রি স্টোরের মতো, খণ্ডখণ্ডের অতিরিক্ত এড়াতে একটি সি ++ ধারক সাধারণত প্রয়োগ করা হয়।

তবে আপনি যদি নিজেকে সরাসরি স্মৃতি বরাদ্দ করেন তবে আপনি জাভা আপনাকে যা করার অনুমতি দেয় না এমন কাজগুলি করতে পারেন, যার ফলে খণ্ডিত হতে পারে।

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

[সম্পাদনা] এটি একটি পুরানো নমুনা হতে পারে: স্থির বরাদ্দ


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

@ ডিস্টাইন: পোস্ট সম্পাদিত, লিঙ্কটি দেখুন
এমিলিও গারাভাগলিয়া

1
আমি এই কৌশলগুলি আগে ব্যবহার করেছি। একটি দুর্বল সম্পাদনকারী অ্যাপ্লিকেশনটির বরাদ্দকারী নির্দিষ্ট-ব্লক হিপগুলির সেট ব্যবহার করতে পরিবর্তিত হয়েছিল। সুতরাং আপনি যখন 4 বাইট ব্লক চেয়েছিলেন, তখন এটি হিপ থেকে এসেছে যা কেবল 4-বাইট ব্লক সংরক্ষণ করে। আপনি যদি 5 বাইট চাইতেন তবে এটি 8-বাইট ব্লক হিপ ইত্যাদি থেকে এসেছিল পারফরম্যান্স বৃদ্ধি (আমাদের প্রচুর পরিমাণে বরাদ্দকারী অ্যাপের জন্য) দুর্দান্ত ছিল tremendous আপনি ভাল ফলাফল হিসাবে না পেতে পারেন, কিন্তু এটি খুব কার্যকর হতে পারে। সমস্ত বরাদ্দ নির্দিষ্ট ব্লকগুলিতে আসায় শূন্য বিভাজনও ছিল।
gbjbaanb

2

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

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

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

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

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


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

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