আমি কয়েকটি অভ্যন্তরীণ পদ্ধতি থেকে যথাসম্ভব পারফরম্যান্স পাওয়ার চেষ্টা করছি।
জাভা কোডটি হ'ল:
List<DirectoryTaxonomyWriter> writers = Lists.newArrayList();
private final int taxos = 4;
[...]
@Override
public int getParent(final int globalOrdinal) throws IOException {
final int bin = globalOrdinal % this.taxos;
final int ordinalInBin = globalOrdinal / this.taxos;
return this.writers.get(bin).getParent(ordinalInBin) * this.taxos + bin; //global parent
}
আমার প্রোফাইলে আমি দেখেছি 1% সিপিইউ ব্যয় হয়েছে java.util.Objects.requireNonNull
, তবে আমি এটি কল করি না। বাইকোড পরিদর্শন করার সময়, আমি এটি দেখেছি:
public getParent(I)I throws java/io/IOException
L0
LINENUMBER 70 L0
ILOAD 1
ALOAD 0
INVOKESTATIC java/util/Objects.requireNonNull (Ljava/lang/Object;)Ljava/lang/Object;
POP
BIPUSH 8
IREM
ISTORE 2
সুতরাং সংকলক এটি (অকেজো?) চেক উত্পন্ন করে। আমি আদিমগুলিতে কাজ করি, যা null
যাইহোক হতে পারে না , তাই সংকলক কেন এই লাইনটি উত্পন্ন করে? এটা কি বাগ? নাকি 'নরমাল' আচরণ?
(আমি বিটমাস্ক নিয়ে কাজ করতে পারি, তবে আমি কেবল কৌতূহলী)
[হালনাগাদ]
অপারেটরটির সাথে এর কিছু করার নেই বলে মনে হচ্ছে (নীচে উত্তর দেখুন)
গ্রহণের সংকলক (সংস্করণ 4.10) ব্যবহার করে আমি এটি আরও যুক্তিসঙ্গত ফলাফল পেয়েছি:
পাবলিক গেটপ্যারেন্ট (আই) আমি জাভা / আইও / আইওএক্সেপশন নিক্ষেপ করি L0 লিনেন্ডার 77 এল0 ILOAD 1 ICONST_4 IREM ইস্টোর 2 এটি L1 লিনেনদার 78 এল
সুতরাং এটি আরও যৌক্তিক।
javac
এটি উত্পন্ন করে না।
openjdk version "11.0.6" 2020-01-14
উবুন্টু 64 বিটে জাভা 11 এর সাথে ইন্টেলিজ 2019.3 থেকে সংকলিত হয়েছে ।
INVOKESTATIC