জাভা 8 তে সংকলিত কোড জাভা 8 আপগ্রেড করার কোনও সুবিধা আছে কি?


127

আমার জাভা 7. ব্যবহার করে একটি পুরানো অ্যাপ্লিকেশন রয়েছে have এটি একটি জাভা ৮ জেআরইতে সূক্ষ্মভাবে চলে। জাভা 8 বৈশিষ্ট্যগুলি ব্যবহার করার জন্য আমি কোনও কোড পুনর্লিখনের পরিকল্পনা করি না। সংকলিত কোডটি সর্বশেষ জাভা 8 জেডিকে আপগ্রেড করার কোনও প্রযুক্তিগত সুবিধা রয়েছে কি?

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


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


2
শুধু পরিষ্কার হতে। কোডটি ইতিমধ্যে সর্বশেষতম 1.8 জেআরই নিয়ে চলেছে এবং অতএব সর্বশেষতম জাভা 8 বাগ ফিক্স এবং রানটাইম পারফরম্যান্স উন্নতি হয়েছে (আমার জ্ঞানের)।
g8torPaul

4
এটি বাইপাকোড সংকলক দ্বারা আউটপুট করা সম্পর্কে সম্ভবত আরও একটি প্রশ্ন। আপনার প্রশ্নে এটি আরও কিছুটা পরিষ্কার করুন।
এম প্ল্যাটভয়েট

2
এত উন্নত বিকাশকারী উত্পাদনশীলতা এখানে প্রাসঙ্গিক নয় কি?
মিক মোনমনিক

7
কীভাবে "আমি কোনও কোডের পুনর্লিখনের পরিকল্পনা করি না" পরিষ্কার হতে পারে না আমি বিশ্বাস করতে পারি না।
জেডো

3
এটি কিছুটা সম্পর্কিত হতে পারে: স্ট্যাকওভারফ্লো.com
আরনৌড

উত্তর:


82

যদি আমি প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আপনি জানতে চান যে প্রযোজিত বাইটকোড javacজাভা in-এর চেয়ে জাভা 8-তে "আরও ভাল" হবে কিনা।

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

ওরাকল ওয়েবসাইট ভয়ানক এবং আমি এর সাথে সম্পর্কিত বাগ সম্বন্ধে জানতে-- মনে করতে পারে না javacসংস্করণের মধ্যে, কিন্তু এখানে OpenJDK থেকে একটি অ সম্পূর্ণ অন্যতম । আমি যেগুলি পরিচালনা করতে পারি তার বেশিরভাগ হ'ল ত্রুটিগুলি ঠিক করা। সুতরাং জাভা 8-এ আপডেট করে, javacজেএলএসকে আরও সঠিকভাবে অনুসরণ করার কারণে এটি আর সংকলন করার সুযোগ নেই এবং বাইটকোডে খুব কম "উন্নতি" হবে না।


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

1
@ g8torPaul আপনি কেবল জাভা 8-তে উপলব্ধ বৈশিষ্ট্যগুলি ব্যবহার করতে যাচ্ছেন না যদি না লামদ্বাস / স্ট্রিম
পিটার

21

প্রধান সুবিধাটি হ'ল জাভা 8 এর সর্বশেষতম বাগ ফিক্স রয়েছে যেখানে জাভা 7 হিসাবে সর্বজনীনভাবে আপডেট করা হচ্ছে না।

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

জাভা 8 দ্রুততর হতে পারে এবং এটি জি 1 এর মতো নতুন বৈশিষ্ট্যের জন্য আরও ভাল সমর্থন করে। তবে এটি আপনার ব্যবহারের ক্ষেত্রে ধীর হতে পারে তাই এটি জানার একমাত্র উপায় এটি পরীক্ষা করা।

সংকলিত কোডটি সর্বশেষ জাভা 8 জেডিকে আপগ্রেড করার কোনও প্রযুক্তিগত সুবিধা রয়েছে কি?

আপনি যদি জিজ্ঞাসা করছেন যে জাভা 8 সংকলকটিতে জাভা 7 কোডটি পুনরায় সংকলনের কোনও সুবিধা আছে কিনা, উত্তরটি হল; প্রায় কিছুই.

কেবলমাত্র সূক্ষ্ম পার্থক্যটি হ'ল জাভা এপিআই-তে সামান্য পার্থক্য রয়েছে, তাই জাভা 8 সংকলক জাভা 7

অন্যান্য ছোট ছোট পার্থক্য হ'ল ফাইলের শুরুতে যাদু নম্বর, সম্ভবত ধ্রুবক পুলের ক্রম। বাইট কোডটি মূলত একই রকম, এমনকি invokedynamicজাভা in-এ ল্যাম্বডাসের জন্য যে সমর্থনটি যুক্ত করা হয়েছিল তা বিদ্যমান ছিল তবে কেবল সেভাবে ব্যবহার করা হয়নি।


8
আমি ভুল হলে আমাকে সংশোধন করুন, তবে ওপি জাভা 8 এর সাথে কোডটি পুনরায় সংশোধন করার বিষয়ে জিজ্ঞাসা করেছে, তবে আপনার উত্তরটি কার্যকর করার জন্য জাভা 8 ব্যবহার করবেন কিনা সে সম্পর্কে?
tobias_k

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

16
এটি কেবল প্রশ্নের উত্তর দেয় না। যদি এটি "প্রায় কিছুই না হয়" তবে দয়া করে পার্থক্যটি পরিষ্কার করুন। অন্যথায় এটি কেবল অনুমান করছে
এম প্ল্যাটভোয়েট

1
@ পিটার লরে, আপনি বলছেন যে ".. উত্তরটি হ'ল প্রায় কিছুই না"। এটি সমর্থন করার জন্য আমাদের কাছে কোনও প্রমাণ আছে কি? বিটিডাব্লু, আমি আপনার সাথে একমত হতে চাই।
g8torPaul

2
@ g8torPaul জাভা 8 জাভা 7 এর সাথে পিছনে সামঞ্জস্যপূর্ণ হওয়ার জন্য ডিজাইন করা হয়েছে এবং আপনি যদি জাভা 8 এর কোনও বৈশিষ্ট্য ব্যবহার না করে থাকেন তবে এটি প্রায় একই বাইট কোড তৈরি করতে হবে।
পিটার লরি

21

এটি সচেতনতা তৈরির মাধ্যমে সহায়তা করতে পারে ।

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

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

অন্য দিকে:

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

দীর্ঘ গল্প সংক্ষিপ্ত: কয়েকটি সূক্ষ্ম সুবিধা এবং কিছু ঝুঁকি রয়েছে (যেখানে ঝুঁকির তাত্পর্য মূলত আপনার সামগ্রিক সেটআপের উপর নির্ভর করে)।


2
এর একটা উদাহরণ এমন একটি বিরল সমস্যা "Java8 কম্পাইল করার Java7 প্রত্যাখ্যান": stackoverflow.com/q/41590024/2513200 (ওরাকল কম্পাইলার শুধুমাত্র জাভা 8 প্রভাবিত একটি জ্ঞাত সমস্যা, কিন্তু তন্ন তন্ন 7 বা 9)
হাল্ক

8

আমি কমপক্ষে এই সত্যগুলির জন্য করব।

1) হ্যাশম্যাপ ইন্টার্নালগুলি (এটি জেডকে -8 এর অধীনে দ্রুত)

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

3) জি 1 আবর্জনা সংগ্রহকারী

সম্পাদনা

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

বিকাশকারী দৃষ্টিকোণ থেকে - প্রচুর পরিমাণে রয়েছে। বর্ধিত উত্পাদনশীলতা আমার পক্ষে সবচেয়ে গুরুত্বপূর্ণ।

সম্পাদনা 2

আমি কেবলমাত্র দুটি পয়েন্ট জানি যা আপনার দ্বিতীয় প্রশ্নের সাথে মেলে:

-parameters

পদ্ধতি পরামিতি নাম সংরক্ষণ করতে।

-profile

একটি ছোট পায়ের ছাপের জন্য পরিচিত কমপ্যাক্ট প্রোফাইল বিকল্প


26
শুধু জাভা 8 এর অধীনে চলমান ইতিমধ্যে যদিও এই সুবিধাগুলি দেবে না? আসল প্রশ্নটি মনে হয়, "আমি জাভা 8-তে এমন কিছু লিখতে পারি যা জাভা 7 সমতুল্যের চেয়ে আরও ভাল কাজ করে"।
জর্ন ভার্নি

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

8
@ জর্নভের্নি ওপিএস স্পষ্টভাবে বলেছিল যে তিনি কিছু লিখতে চান না, সুতরাং প্রশ্নটি যেমনটি আমি বুঝতে পেরেছি তেমনই "জাভা 8 সংকলক জাভা 7 সংকলক যে কোনও কৌশল করতে পারে না"
তোবিয়াস_ কে

2
@ জর্নভের্নি প্রশ্নটি হ'ল, জাভা in তে লিখিত কোডটি এবং জাভা ৮-তে সংকলিত কোডটি যদি জাভা 7
আর্লগ্রি

6
প্রশ্নের উত্তর দেয় না এবং কেবল অনুমান করে যে এটির উন্নতি হয়নি।
এম প্ল্যাটভয়েট

-1

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

তবে, আপনাকে যদি একবারে এটি পুনরায় কম্পাইল করতে হয় তবে এটি বিবেচনা করুন:

  • আপনার অ্যাপ্লিকেশন উত্স কোড জাভা 7 এর সাথে সামঞ্জস্যপূর্ণ এবং সম্ভবত 8 টিও;
  • কোডটি জাভা 8 এর সাথে সংকলন করে না, জাভা 8 উত্স সামঞ্জস্যতা মোডে ( -source 7জাভাক সহ) জাভা 8 সংকলক দিয়ে সম্ভবত এটি সংকলন করবে না ;
  • আপনার বিকাশকারী এবং সিআইকে উত্পাদন পরিবেশের সাথে যতটা সম্ভব ঘনিষ্ঠ হওয়ার জন্য একটি জাভা 8 রানটাইমের বিরুদ্ধে ইউনিট এবং ইন্টিগ্রেশন পরীক্ষা চালানো দরকার। ডেভেলপারদের স্থানীয়ভাবে চালানোর সময় অ্যাপ্লিকেশনটি একই জাভা 8 রানটাইমে চালানো দরকার;
  • জেডিকে 7 দিয়ে সংকলন করা এবং একই সংস্করণ সহ সবকিছু করার চেয়ে জেআরই 8 (একই বিল্ড প্রক্রিয়াতে, বা একই আইডিইতে) চালানো আরও কঠিন;
  • আপনি যদি কোনও জেডিকে 8 দিয়ে সংকলন করেন -source 7তার পরিবর্তে ব্যবহার করার কোনও সুবিধা নেই -source 8এবং আপনার টার্গেট রানটাইমটি জাভা 8;
  • -source 8গ্যারান্টি ব্যবহার করে যে বিকাশকারী জাভা 8 (বা তার পরে) উভয় সংকলন এবং রানটাইমের জন্য ব্যবহার করছে (যেমন এটি প্রযোজ্য -target 8)।

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


দ্বিতীয় বুলেট পয়েন্ট সঠিক নয়। আপনার পোস্টটি বেশ কয়েকটি পয়েন্টে স্ববিরোধী।
লার্নের মারকুইস

@ এজেপি দ্বিতীয় বুলেট পয়েন্টটি আমার অভিজ্ঞতা বেশি, তবে জেডিকে ৮-এ সংকলন -source 7করে তবে সংকলন করে না এমন উদাহরণ রয়েছে -source 8কি? এছাড়াও, আপনি কি দয়া করে বৈষম্যগুলি নির্দেশ করতে পারেন কারণ আপনার মন্তব্যটি তেমন গঠনমূলক নয় ...
ডিডিয়ার এল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.