"জাভা-সার্ভার" এবং "জাভা-ক্লায়েন্ট" এর মধ্যে বাস্তব পার্থক্য?


394

"জাভা-সার্ভার" এবং "জাভা-ক্লায়েন্ট" এর মধ্যে কি বাস্তব বাস্তব পার্থক্য রয়েছে?

আমি সূর্যের সাইটে যা কিছু পাই তা অস্পষ্ট

"-সার্ভারটি ধীর শুরু হয় তবে দ্রুত চালানো উচিত"।

আসল পার্থক্য কি? (বর্তমানে জেডিকে 1.6.0_07 ব্যবহার করা হচ্ছে))

উত্তর:


368

এটি সত্যই হটস্পট এবং ডিফল্ট বিকল্প মান ( জাভা হটস্পট ভিএম বিকল্পসমূহ ) এর সাথে লিঙ্কযুক্ত যা ক্লায়েন্ট এবং সার্ভার কনফিগারেশনের মধ্যে পৃথক।

হোয়াইটপেপারের দ্বিতীয় অধ্যায় থেকে ( জাভা হটস্পট পারফরম্যান্স ইঞ্জিন আর্কিটেকচার ):

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

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

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

সুতরাং আসল পার্থক্যটি সংকলক স্তরেও রয়েছে:

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

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

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


জি Demecki তুলে ধরে মন্তব্য করে JDK এর 64 বিট সংস্করণে, -clientবিকল্প বহু বছর ধরে উপেক্ষা করা হয়। উইন্ডোজ কমান্ড
দেখুন :java

-client

জাভা হটস্পট ক্লায়েন্ট ভিএম নির্বাচন করে।
একটি 64-বিট সক্ষম জেডি কে বর্তমানে এই বিকল্পটিকে উপেক্ষা করে এবং এর পরিবর্তে জাভা হটস্পট সার্ভার ভিএম ব্যবহার করে


7
jdk6 আপডেট 10 এবং তারপরে একটি প্রেক্ষাপট প্রক্রিয়া রয়েছে যা রানটাইম লাইব্রেরিগুলিকে মেমরিতে রাখে নতুন প্রসেসগুলির জন্য চাহিদা অনুযায়ী পৃষ্ঠায় রাখার চেয়ে দ্রুত প্রারম্ভিককরণের অনুমতি দেয়।
থরবজর্ন রাভন অ্যান্ডারসন

1
ভেবেছিল ক্লায়েন্ট ভিএমও আক্রমনাত্মকভাবে linedুকেছে, ওহ ভাল।
থরবজর্ন রাভন অ্যান্ডারসন

1
আমি মনে করি এই উত্তরটি আপডেট করা উচিত । কারণ জেডিকে-র 64৪-বিট সংস্করণে -clientবিকল্পটি বহু বছর ধরে উপেক্ষা করা হয়।
জি ডেমেকি

@ জি.ডেমেকি অবশ্যই: এই লিঙ্কটি অপ্রচলিত বা উপেক্ষা করার কোনও লিঙ্ক ডকুমেন্টিং রয়েছে কি?
ভনসি

1
অবশ্যই। উইন্ডোজের জন্য জাভা 7 এর জন্য এখানে কিছু ডকুমেন্টেশন রয়েছে । এবং আশ্চর্যজনকভাবে জাভা 6 ডকুমেন্টেশনেও অনুরূপ তথ্য পাওয়া যাবে ।
জি ডেমেকি

90

জাভার পুরানো সংস্করণগুলির মধ্যে সর্বাধিক দৃশ্যমান তাত্পর্য হ'ল -clientকোনও -serverঅ্যাপ্লিকেশনটির বিপরীতে মেমরির বরাদ্দ । উদাহরণস্বরূপ, আমার লিনাক্স সিস্টেমে, আমি পাই:

$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight               = 20               {product}
uintx ErgoHeapSizeLimit                    = 0                {product}
uintx InitialHeapSize                     := 66328448         {product}
uintx LargePageHeapSizeThreshold           = 134217728        {product}
uintx MaxHeapSize                         := 1063256064       {product}
uintx MaxPermSize                          = 67108864         {pd product}
uintx PermSize                             = 16777216         {pd product}
java version "1.6.0_24"

এটি ডিফল্ট হিসাবে -server, কিন্তু -clientবিকল্পের সাথে আমি পেয়েছি:

$ java -client -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight               = 20               {product}
uintx ErgoHeapSizeLimit                    = 0                {product}
uintx InitialHeapSize                     := 16777216         {product}
uintx LargePageHeapSizeThreshold           = 134217728        {product}
uintx MaxHeapSize                         := 268435456        {product}
uintx MaxPermSize                          = 67108864         {pd product}
uintx PermSize                             = 12582912         {pd product}
java version "1.6.0_24"

সুতরাং -serverবেশিরভাগ মেমরি সীমা এবং প্রাথমিক বরাদ্দ এই javaসংস্করণের জন্য অনেক বেশি much

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

খুব মনে রাখবেন যে আপনি jvmব্যবহার করে দৌড়ের সমস্ত বিবরণ দেখতে পাবেন jvisualvm। আপনার যদি এমন ব্যবহারকারী বা মডিউল থাকে যা JAVA_OPTSকমান্ড লাইন বিকল্পগুলি পরিবর্তন করে এমন স্ক্রিপ্টগুলি সেট করে বা ব্যবহার করে এমন মডিউল থাকে This এটি আপনাকে রিয়েল টাইমে, প্রচুর অন্যান্য পরিসংখ্যান সহ হিপ এবং পার্জেন স্পেস ব্যবহার পর্যবেক্ষণ করতে দেয় ।


2
এটি আমাকে সেন্টোস 7 [জাভা (টিএম) এসই রানটাইম এনভায়রনমেন্ট (বিল্ড 1.7.0_79-b15) জাভা হটস্পট (টিএম) 64-বিট সার্ভার ভিএম-তে জাভা সংস্করণ "1.7.0_79" এর জন্য জাভর সংস্করণ "1.7.0_79" -র জন্য সার্ভার এবং-ক্লায়েন্ট মোডে একই নম্বর দেয় ]
বাসিল মুসা

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

33

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

এখানে চিত্র বর্ণনা লিখুন

আমরা উভয় সুইচ দিয়ে নিম্নলিখিত কোডটি চালাচ্ছি:

package com.blogspot.sdoulger;

public class LoopTest {
    public LoopTest() {
        super();
    }

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        spendTime();
        long end = System.currentTimeMillis();
        System.out.println("Time spent: "+ (end-start));

        LoopTest loopTest = new LoopTest();
    }

    private static void spendTime() {
        for (int i =500000000;i>0;i--) {
        }
    }
}

দ্রষ্টব্য: কোডটি একবারেই সংকলিত হয়েছে! ক্লাস দুটোই একই!

: -Client সঙ্গে
java.exe -client -classpath সি: \ mywork \ ক্লাস com.blogspot.sdoulger.LoopTest
সময় অতিবাহিত: 766

সাথে-সার্ভার:
java.exe -server -classpath সি: \ mywork work ক্লাস com.blogspot.sdoulger.LoopTest
সময় ব্যয় করেছে: 0

দেখে মনে হচ্ছে যে সার্ভার সিস্টেমটির আরও আক্রমণাত্মক অনুকূলতা, লুপটি সরান কারণ এটি বুঝতে পারে যে এটি কোনও ক্রিয়া করে না!

উল্লেখ


33

একটি পার্থক্য যা আমি কেবল লক্ষ্য করেছি যে "ক্লায়েন্ট" মোডে, মনে হয় যে জেভিএম আসলে অপারেটিং সিস্টেমে কিছু অব্যবহৃত মেমরি দেয়, যখন "সার্ভার" মোডের সাথে, একবার জেভিএম মেমরিটি ধরে ফেললে তা দেয় না পেছনে. এটি যাইহোক জাভা with সহ সোলারিতে কীভাবে প্রদর্শিত হয় তা (কোনও prstat -Zপ্রক্রিয়াতে বরাদ্দ হওয়া মেমরির পরিমাণটি ব্যবহার করে)।


22

ওরাকলের অনলাইন ডকুমেন্টেশন জাভা এসই 7 এর জন্য কিছু তথ্য সরবরাহ করে।

উপর জাভা - জাভা অ্যাপ্লিকেশন লঞ্চার Windows এর জন্য পাতা, -clientবিকল্প 64-বিট JDK উপেক্ষা করা হয়:

জাভা হটস্পট ক্লায়েন্ট ভিএম নির্বাচন করুন। একটি 64-বিট সক্ষম জেডি কে বর্তমানে এই বিকল্পটিকে উপেক্ষা করে এবং এর পরিবর্তে জাভা হটস্পট সার্ভার ভিএম ব্যবহার করে।

তবে (বিষয়গুলিকে আকর্ষণীয় করার জন্য) এর অধীনে -serverবলা হয়েছে:

জাভা হটস্পট সার্ভার ভিএম নির্বাচন করুন। 64৪-বিট সক্ষম জেডকে কেবল জাভা হটস্পট সার্ভার ভিএম সমর্থিত তাই -র সার্ভার বিকল্প অন্তর্ভুক্ত। এটি ভবিষ্যতের প্রকাশে পরিবর্তন সাপেক্ষে।

সার্ভার শ্রেণীর মেশিন সনাক্তকরণ পৃষ্ঠার তথ্য যার উপর VM- র OS এবং স্থাপত্য নির্বাচিত হয় দেয়।

আমি জানি না এটির কতটা জেডিকে 6-তে প্রযোজ্য।


2
ধন্যবাদ, আমি ভাবছিলাম কীভাবে আসি আমি জেডিকে 7 তে কোনও ক্লায়েন্ট / jvm.dll দেখতে পেলাম না
আর্কিমিডিস ট্রাজানো

16

গয়েটজ থেকে - অনুশীলনে জাভা কনসার্চেন্সী:

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

তালিকা 3.4। ভেড়া গুনছে।

volatile boolean asleep; ... while (!asleep) countSomeSheep();

আমার জোর। YMMV


15

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

যুক্ত করতে সম্পাদনা করুন: এখানে সূর্যের কিছু তথ্য , এটি খুব সুনির্দিষ্ট নয় তবে আপনাকে কিছু ধারণা দেবে।


5

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

সার্ভার মোডে এখানে একটি লিঙ্ক দেওয়া আছে। হায়, তারা ক্লায়েন্ট মোডের কথা উল্লেখ করে না।

এখানে জিসির একটি খুব পুঙ্খানুপুঙ্খ লিঙ্ক দেওয়া আছে ; এটি একটি আরও প্রাথমিক নিবন্ধ । নিশ্চিত না হয় ঠিকানা-সার্ভার বনাম-ক্লায়েন্ট তবে এটি প্রাসঙ্গিক উপাদান।

নন ফ্লাফ জাস্ট স্টাফে কেন সাইপ এবং গ্লেন ভেনডেনবার্গ উভয়ই এই জাতীয় বিষয়ে দুর্দান্ত আলোচনা করেন।


3

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


6
আপনার প্রোগ্রামটি কী করছে তার উপর নির্ভর করে। কিছু প্রসেসর-নিবিড় অ্যাপ্লিকেশনগুলির জন্য যা একই জিনিস বারবার করে, আমি -র-সার্ভারের সাথে বিশাল (10x পর্যন্ত) উন্নতি লক্ষ্য করেছি।
ড্যান ডায়ার

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

1
ভিএম সার্ভারের সাথে সানফ্লো চালানো ক্লায়েন্টের চেয়ে অনেক বেশি দ্রুত। সূর্যপ্রবাহ.সোর্সফোর্জন.নেট
জন

1

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

IIRC:

  • সার্ভার হিপ ভিএম-এর ক্লায়েন্ট ভিএম-এর চেয়ে পৃথক প্রজন্মের একটি পৃথক এবং বর্জ্য সংগ্রহের অ্যালগরিদম রয়েছে। এটি আর সত্য হতে পারে না
  • সার্ভার ভিএম মেমরি বরাদ্দ করবে এবং এটি ওএসে ছাড়বে না
  • সার্ভার ভিএম আরও পরিশীলিত অপ্টিমাইজেশন অ্যালগরিদম ব্যবহার করবে এবং তাই অপ্টিমাইজেশনের জন্য আরও বড় সময় এবং মেমরির প্রয়োজনীয়তা রয়েছে

আপনি jvisualvm সরঞ্জাম ব্যবহার করে দুটি জাভা ভিএম, একটি ক্লায়েন্ট, একটি সার্ভারের তুলনা করতে পারলে আপনার আবর্জনা সংগ্রহের ফ্রিকোয়েন্সি এবং প্রভাবের পাশাপাশি প্রজন্মের সংখ্যার মধ্যে পার্থক্য দেখা উচিত।

আমার স্ক্রিনশটগুলির একটি জুড়ি ছিল যা পার্থক্যটি সত্যিই ভালভাবে দেখিয়েছিল, তবে আমি একটি পুনরায় উত্পাদন করতে পারছি না কারণ আমার কাছে একটি 64 বিট জেভিএম রয়েছে যা কেবলমাত্র সার্ভার ভিএম প্রয়োগ করে। (এবং পাশাপাশি আমার সিস্টেমে 32 বিট সংস্করণটি ডাউনলোড এবং রেংগল করতে আমার বিরক্ত করা যাবে না))

এটি আর বলে মনে হচ্ছে না, উভয় সার্ভার এবং ক্লায়েন্ট ভিএম সহ উইন্ডোতে কিছু কোড চালানোর চেষ্টা করে দেখেছি, আমি উভয়ের জন্য একই প্রজন্মের মডেল পেয়েছি বলে মনে হচ্ছে ...


1

1.4 থেকে 1.7 ("1.7.0_55") সংস্করণে স্থানান্তর করার সময় we আমরা এখানে যে জিনিসটি লক্ষ্য করেছি তা হাইল্পসাইজ | পার্সামাইজ | থ্রেডস্ট্যাকসাইজ পরামিতি এবং ক্লায়েন্ট ও সার্ভার মোডে নির্ধারিত ডিফল্ট মানগুলিতে এই জাতীয় কোনও পার্থক্য নেই।

যাইহোক, ( http://www.oracle.com/technetwork/java/ergo5-140223.html )। এটি উপরের লিঙ্ক থেকে নেওয়া স্নিপেট।

initial heap size of 1/64 of physical memory up to 1Gbyte
maximum heap size of ¼ of physical memory up to 1Gbyte

থ্রেডস্ট্যাকসাইজ 1.7-তে উচ্চতর, ওপেন জেডিকে ফোরামে যাওয়ার সময় এমন আলোচনা রয়েছে যা বলা হয়েছে যে ফ্রেমের আকার 1.7 সংস্করণে কিছুটা বেশি is এটি বিশ্বাস করা হয় যে আপনার প্রয়োগের আপনার আচরণের ভিত্তিতে রান সময় সময়ে বাস্তব পার্থক্য পরিমাপ করা সম্ভব

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