জাভা অ্যাপ্লিকেশন প্রতি একটি জেভিএম আছে?


91

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

এছাড়াও, প্রতিটি জাভা অ্যাপ্লিকেশন দ্বারা নির্ধারিত জেভিএম এবং প্রসেসগুলির মধ্যে কি কোনও সংযোগ রয়েছে?


4
এইটা একটা ভালো প্রশ্ন. :)
জামে

উত্তর:


81

সাধারণভাবে বলতে গেলে, প্রতিটি অ্যাপ্লিকেশন তার নিজস্ব জেভিএম উদাহরণ এবং তার নিজস্ব ওএস-স্তর প্রক্রিয়া পাবেন এবং প্রতিটি জেভিএম উদাহরণ একে অপরের থেকে স্বতন্ত্র।

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

একটি সাধারণ দৃশ্য হ'ল একক অ্যাপ্লিকেশন সার্ভার (বা "ওয়েব সার্ভার") যেমন গ্লাস ফিশ বা টমক্যাট একাধিক ওয়েব অ্যাপ্লিকেশন চালাচ্ছে। এই ক্ষেত্রে, একাধিক ওয়েব অ্যাপ্লিকেশনগুলি একটি জেভিএম ভাগ করতে পারে।


21

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


12

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

  • জেভিএমের System.in/ out/ এর একটি সেট রয়েছে err, একটি ডিফল্ট এনকোডিং, একটি ডিফল্ট লোকেল, সিস্টেম বৈশিষ্ট্যগুলির একটি সেট এবং আরও অনেক কিছু। যদি একটি অ্যাপ্লিকেশন এগুলিকে পরিবর্তন করে তবে এটি সমস্ত অ্যাপ্লিকেশনকে প্রভাবিত করে।
  • যে অ্যাপ্লিকেশন কল System.exit()করে তা সমস্ত অ্যাপ্লিকেশনকে হত্যা করে।
  • যদি একটি অ্যাপ্লিকেশন থ্রেড বন্য হয়ে যায় এবং অত্যধিক সিপিইউ বা মেমরি গ্রহণ করে তবে এটি অন্যান্য অ্যাপ্লিকেশনগুলিকেও প্রভাব ফেলবে।

8

চলমান জেভিএমের সংখ্যা হ'ল চালিত সংখ্যা কার্যকর করা। এই জাতীয় প্রতিটি অ্যাপ্লিকেশন তার নিজস্ব জাভা এক্সিকিউটেবল (উইন্ডোজের জন্য java.exe / javaw.exe ইত্যাদি) এর অর্থ প্রার্থনা করে যার অর্থ প্রতিটি পৃথক জেভিএমে চলছে।


8

সংক্ষিপ্ত উত্তর: প্রায়শই, হ্যাঁ, আপনি জেভিএম প্রতি একটি আবেদন পাবেন। দীর্ঘ উত্তর: জেভিএম সেভাবে ব্যবহার করা যেতে পারে এবং এটি সর্বোত্তম বিকল্প হতে পারে তবে এটি হওয়ার দরকার নেই।

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

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

সুতরাং, এটা সব সত্যিই কি আপনি বিবেচনা একটি উপর নির্ভর করে applicationযাবে। যদি আপনি বিশুদ্ধরূপে "" মুখ্য () "বলা হয় তখন চলমান জিনিস" সম্পর্কে কথা বলছেন, তবে আপনি জেভিএম প্রতি একটি অ্যাপ্লিকেশনটির দিকে তাকিয়ে রয়েছেন - যখন ওএস জেভিএম শুরু করে, জেভিএম একটি একক শ্রেণির public static void main()পদ্ধতি চালায় ।

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


5

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


2

এখানে একটু দেরি হলেও এই তথ্য কারও পক্ষে কার্যকর হতে পারে। একটি লিনাক্স সিস্টেমে আপনি যদি জানতে চান যে কতটি জেভিএম চলছে, আপনি এই কমান্ডটি ব্যবহার করে দেখতে পারেন

$ ps -ef | grep "[j]ava" | wc -l

psপ্রক্রিয়া grepতালিকাবদ্ধ করতে , "জাভা" ধারণকারী প্রক্রিয়া অনুসন্ধান wcকরতে এবং লাইনগুলি গণনা করতে


0

আসলে এটি একটি প্রশ্ন যা খুব বিভ্রান্তিকর উত্তর পেতে পারে। এটি বাস্তব সংক্ষিপ্ত রাখতে:

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