হ্যা পারি. এখানে একটি উদাহরণ যেখানে ফাইনালটি পারফরম্যান্সকে বাড়িয়ে তুলতে পারে:
শর্তসাপেক্ষ সংকলন একটি কৌশল যা লাইন কোডের একটি নির্দিষ্ট শর্তের উপর ভিত্তি করে ক্লাস ফাইলে সংকলিত হয় না। এটি কোনও প্রোডাকশন বিল্ডে টন ডিবাগিং কোড সরিয়ে দিতে ব্যবহার করা যেতে পারে।
নিম্নোক্ত বিবেচনা কর:
public class ConditionalCompile {
private final static boolean doSomething= false;
if (doSomething) {
// do first part.
}
if (doSomething) {
// do second part.
}
if (doSomething) {
// do third part.
}
if (doSomething) {
// do finalization part.
}
}
ডোসমিংথ অ্যাট্রিবিউটকে একটি চূড়ান্ত বৈশিষ্ট্যে রূপান্তরিত করে আপনি সংকলককে বলেছিলেন যে এটি যখনই ডসোমিংথিং দেখে, তখন এটি সংকলন-সময় প্রতিস্থাপনের নিয়ম অনুসারে মিথ্যা দিয়ে প্রতিস্থাপন করা উচিত। সংকলকটির প্রথম পাসটি কোডটিকে এমন কিছুতে পরিবর্তন করে :
public class ConditionalCompile {
private final static boolean doSomething= false;
if (false){
// do first part.
}
if (false){
// do second part.
}
if (false){
// do third part.
}
if (false){
// do finalization part.
}
}
এটি সম্পন্ন হয়ে গেলে, সংকলকটি এটির দিকে অন্য একবার নজর রাখে এবং কোডে অ্যাক্সেসযোগ্য বক্তব্য রয়েছে তা দেখে। যেহেতু আপনি একটি শীর্ষ-মানের সংকলক নিয়ে কাজ করছেন, এটি অ্যাক্সেসযোগ্য সমস্ত বাইট কোড পছন্দ করে না। সুতরাং এটি তাদের সরিয়ে দেয় এবং আপনি এটি দিয়ে শেষ:
public class ConditionalCompile {
private final static boolean doSomething= false;
public static void someMethodBetter( ) {
// do first part.
// do second part.
// do third part.
// do finalization part.
}
}
এইভাবে কোনও অতিরিক্ত কোড, বা কোনও অপ্রয়োজনীয় শর্তাধীন পরীক্ষণ হ্রাস করা।
সম্পাদনা করুন: উদাহরণ হিসাবে, আসুন নিম্নলিখিত কোডগুলি গ্রহণ করুন:
public class Test {
public static final void main(String[] args) {
boolean x = false;
if (x) {
System.out.println("x");
}
final boolean y = false;
if (y) {
System.out.println("y");
}
if (false) {
System.out.println("z");
}
}
}
জাভা 8 দিয়ে এই কোডটি সংকলন করার সাথে সাথে javap -c Test.class
আমরা পাই:
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return
public static final void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: ifeq 14
6: getstatic #16 // Field java/lang/System.out:Ljava/io/PrintStream;
9: ldc #22 // String x
11: invokevirtual #24 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
14: iconst_0
15: istore_2
16: return
}
আমরা নোট করতে পারি যে সংকলিত কোডে কেবলমাত্র চূড়ান্ত নয় এমন চূড়ান্ত রয়েছে x
। এটি প্রমান করে যে চূড়ান্ত ভেরিয়েবলগুলি পারফরম্যান্সের উপর প্রভাব ফেলে, কমপক্ষে এই সাধারণ ক্ষেত্রে।