আপনার কি অনেকগুলি ছোট ছোট বস্তু তৈরি করা উচিত?


10

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

আমার একটি উদাহরণ রয়েছে যা এই ধারণাটি ভালভাবে দেখায়। গ্রাফিক্স প্রোগ্রামে বলুন এমন একটি পদ্ধতি রয়েছে যা আদর্শভাবে বলা সমস্ত অঙ্কনের জন্য ব্যবহৃত হয় drawPixel(Point)। এখানে পয়েন্টগুলির সংখ্যা নির্ধারিত হতে পারে এবং এটি প্রায়শই পুনরাবৃত্তি হতে পারে, যেমন একটি গেমের মতো যেখানে এটি সেকেন্ডে +০+ বার বলা যেতে পারে। বিকল্পভাবে, drawPixel(int x, int y)অনেক পয়েন্ট অবজেক্টের সৃষ্টি হ্রাস করতে ব্যবহৃত হতে পারে।

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


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

@ স্নোমান আমি শুনেছি জাভার নতুন সংস্করণগুলি মেমরি পরিচালনার সাথে আরও ভাল করে তোলে তবে আমি যে সমস্যাটি দেখছি তা হ'ল ব্যবহারকারী কোনও পুরানো সংস্করণ ব্যবহার করছেন না এমন কোনও গ্যারান্টি নেই। আমার এই উদ্বেগের কারণ এটিই সেই অংশ।
স্ট্রিপস

1
প্রথমে কিছু পারফরম্যান্স পরিমাপ করুন। আপনার যদি কিছু সমস্যা হয় তবে কীভাবে অনুকূলিত করবেন তা ভাবুন to তবে দয়া করে কোড রক্ষণাবেক্ষণ খুব তাড়াতাড়ি করবেন না কারণ আপনি মনে করেন যে আপনার কিছু কার্য সম্পাদন সমস্যা হতে পারে।
স্পটড

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

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

উত্তর:


17

সাধারণভাবে, না , পারফরম্যান্স হ্রাস হওয়ার ভয়ে আপনার কোনও জিনিস তৈরি করা এড়ানো উচিত নয়। এর বেশ কয়েকটি কারণ রয়েছে।

  1. অবজেক্ট ব্যবহার করা জাভা ব্যবহারের একধরণের পয়েন্ট। এগুলিকে প্রিমিটিভালি এড়ানো এটাই একটি লক্ষণ যে জাভা ব্যবহারের সিদ্ধান্তটি সঠিকভাবে শুরু নাও হতে পারে।
  2. পারফরম্যান্স সমস্যাগুলি পূর্বাভাস দেওয়া কুখ্যাতভাবে কঠিন hard কখনই ধরে নিবেন না যে কোনও কিছু হ'ল বাধা। সর্বদা পরিমাপ করুন। পারফরম্যান্স ইঞ্জিনিয়ারিং প্রায় সবসময় সঠিক জায়গায় ছোট পরিবর্তন করার বিষয়টি। আপনি পরীক্ষা ব্যতীত কোনও ওষুধের প্রভাব সম্পর্কে পূর্বাভাস দিতে পারেন তার চেয়ে বেশি পরিমাপ না করে আপনি সঠিক জায়গাটি ভবিষ্যদ্বাণী করতে পারবেন না।
  3. অবজেক্ট তৈরির ব্যয়টি খুব বেশি পরিমাণে বিবেচিত। একটি আধুনিক জেভিএম এ এটি মূলত একটি পয়েন্টার বাড়ানোর পরিমাণের (এবং প্রজন্মের আবর্জনা সংগ্রহকারীদের সাথে এটি পরিচালনা করার জন্য ব্যয়ও তুচ্ছ)। ইন্টারনেটে অনেকগুলি পাঠ্য রয়েছে যা আপনাকে অবজেক্টগুলি এড়ানোর, অবজেক্ট পুলিং ইত্যাদি ব্যবহার করার পরামর্শ দেয় This ১৯৯০ এর দশকে এই পরামর্শটি কখনও কখনও সঠিক ছিল; আজ এটি বেশিরভাগই অপ্রচলিত। অবজেক্টগুলি এড়িয়ে বা সেগুলি নিজে পরিচালনা করে আপনি যুক্ত হওয়া ব্যয় এবং জটিলতার ন্যায্যতা অর্জনের পক্ষে যথেষ্ট পারফরম্যান্স পাওয়ার সম্ভাবনা খুব কম।

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

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


2

কোড লিখিত হওয়ার আগে পারফরম্যান্সের উপর প্রভাবগুলি বিবেচনা করার সময় আপনাকে ধরে নেওয়া উচিত যে আপনি কী করছেন।

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

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

এখন আপনি যদি আমাকে এমন কিছু কৌশল দিয়ে স্থান বাঁচাতে পারেন যা একটি দুর্দান্ত বাক্সে ফিট করে যা আমরা কথা বলতে পারি তবে বেশিরভাগ সময় ভিতরে insideোকতে হয় না। যদি এটি একটি বাক্স হয় তবে আমি অন্য বাক্সের জন্য স্যুপ আউট করতে পারি যখন box বাক্সটি আরও ভালভাবে কাজ করতে পারে আমি এর জন্যও দিতে পারি।


2

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

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

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

নির্দিষ্ট কারণে ওওপি একটি ভাল ধারণা। এই কারণগুলি সমস্ত পরিস্থিতিতে প্রয়োগ হয় না ।


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

2

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

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

আমার একবার একবার একজন দলের সদস্য অবজেক্ট মেম্বার লুকে 20x দ্রুত তৈরি করতে বেশ কয়েক দিন ব্যয় করেছিলেন। সফল! তবে প্রকৃত ব্যবহারের সর্বোত্তম সামগ্রিক গতিবেগ শতাংশের শতভাগে মাপা হয়েছিল। এই পরিবর্তনটি তত্ক্ষণাত্ ব্যাকড করে দেওয়া হয়েছিল, যেহেতু স্পিডআপের জন্য সদস্যের মেমরির বরাদ্দে আরও বৃহত্তর প্রয়োজন।


1

এটি সহজ: আপনার যদি 1000 টি ছোট ছোট অবজেক্টের প্রয়োজন হয় তবে আপনি 1000 ছোট ছোট বস্তু তৈরি করেন এবং এটি সম্পর্কে চিন্তা করবেন না। আপনার যদি 100 টি ছোট বস্তুর প্রয়োজন হয় , তবে 1000 ছোট ছোট বস্তু তৈরি করা বোকামি - আপনার প্রয়োজনীয় জিনিসগুলি তৈরি করুন এবং আরও বেশি নয়।

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

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