เนื่องจากมีความแตกต่างอย่างมากระหว่างการเพิ่มประสิทธิภาพและปิดความปลอดภัยอย่างสมบูรณ์
โดยการลดจำนวน GC กรอบงานของพวกเขาจะตอบสนองได้ดีขึ้นและสามารถทำงานได้เร็วขึ้น ตอนนี้การปรับให้เหมาะสมที่สุดสำหรับตัวรวบรวมขยะไม่ได้หมายความว่าพวกเขาไม่เคยทำการรวบรวมขยะ มันหมายความว่าพวกเขาทำมันน้อยลงและเมื่อพวกเขาทำมันมันก็วิ่งเร็วมาก การเพิ่มประสิทธิภาพประเภทนั้น ได้แก่ :
- ลดจำนวนของวัตถุที่ย้ายไปยังพื้นที่ผู้รอดชีวิต (เช่นรอดชีวิตอย่างน้อยหนึ่งชุดเก็บขยะ) โดยใช้วัตถุขนาดเล็กที่ถูกโยนทิ้ง วัตถุที่ย้ายไปยังพื้นที่ผู้รอดชีวิตนั้นยากที่จะรวบรวมและการรวบรวมขยะที่นี่บางครั้งก็บ่งบอกถึงการแช่แข็ง JVM ทั้งหมด
- อย่าจัดสรรวัตถุมากเกินไปที่จะเริ่มต้นด้วย สิ่งนี้สามารถย้อนกลับมาได้หากคุณไม่ระวังเนื่องจากวัตถุรุ่นใหม่นั้นราคาถูกสุด ๆ ในการจัดสรรและรวบรวม
- ตรวจสอบให้แน่ใจว่าวัตถุใหม่ชี้ไปที่วัตถุเก่า (ไม่ใช่ทางอื่น ๆ ) เพื่อให้วัตถุเล็ก ๆ นั้นง่ายต่อการรวบรวมเนื่องจากไม่มีการอ้างอิงถึงวัตถุเหล่านั้นที่จะทำให้พวกมันถูกเก็บไว้
เมื่อคุณปรับแต่งประสิทธิภาพคุณมักจะปรับ "ฮอตสปอต" ที่เฉพาะเจาะจงบางอย่างในขณะที่ไม่สนใจรหัสที่ทำงานไม่บ่อย หากคุณทำเช่นนั้นใน Java คุณสามารถปล่อยให้ตัวรวบรวมขยะยังคงดูแลมุมมืดเหล่านั้น (เนื่องจากมันจะไม่สร้างความแตกต่างมากนัก) ในขณะที่ปรับให้เหมาะสมที่สุดสำหรับพื้นที่ที่ทำงานในวงแคบ ดังนั้นคุณสามารถเลือกตำแหน่งที่คุณปรับและไม่ใช้และคุณสามารถมุ่งเน้นความพยายามของคุณในที่ที่มันสำคัญ
ตอนนี้ถ้าคุณปิดการรวบรวมขยะโดยสิ้นเชิงคุณจะไม่สามารถเลือกได้ คุณต้องกำจัดทุกวัตถุด้วยตนเองตลอดไป วิธีนั้นเรียกว่ามากที่สุดวันละครั้ง? ใน Java คุณสามารถปล่อยให้มันเป็นเพราะผลกระทบต่อประสิทธิภาพการทำงานที่มีเล็กน้อย (มันอาจจะตกลงที่จะให้ GC เต็มรูปแบบเกิดขึ้นทุกเดือน) ใน C ++ คุณยังคงมีทรัพยากรรั่วไหลดังนั้นคุณต้องดูแลวิธีการที่ไม่ชัดเจน ดังนั้นคุณต้องจ่ายราคาสำหรับการจัดการทรัพยากรในทุก ๆ ส่วนของแอปพลิเคชันในขณะที่ใน Java คุณสามารถมุ่งเน้น
แต่มันแย่ลงไปอีก
ถ้าคุณมีบั๊กให้พูดในมุมมืดของแอปพลิเคชันของคุณซึ่งเข้าถึงได้เฉพาะวันจันทร์ในคืนพระจันทร์เต็มดวง? Java มีการรับประกันความปลอดภัยที่แข็งแกร่ง มีน้อยถึงไม่มี "พฤติกรรมที่ไม่ได้กำหนด" หากคุณใช้บางอย่างผิดปกติเกิดข้อยกเว้นโปรแกรมของคุณจะหยุดทำงานและไม่มีข้อมูลเสียหาย ดังนั้นคุณค่อนข้างมั่นใจว่าไม่มีอะไรผิดปกติเกิดขึ้นได้หากคุณไม่สังเกต
แต่ในบางอย่างเช่น D คุณสามารถเข้าถึงตัวชี้ที่ไม่ดีหรือบัฟเฟอร์มากเกินไปและคุณสามารถทำให้หน่วยความจำของคุณเสียหาย แต่โปรแกรมของคุณจะไม่ทราบ (คุณปิดการทำงานของความปลอดภัยออกจำได้ไหม?) และจะทำงานต่อไป ข้อมูลและทำสิ่งที่น่ารังเกียจและทำให้ข้อมูลของคุณเสียหายและคุณไม่รู้และเมื่อเกิดการคอร์รัปชั่นมากขึ้นข้อมูลของคุณก็จะผิดมากขึ้นและทันใดนั้นมันก็พังและมันก็เป็นแอปพลิเคชั่นที่สำคัญในชีวิต ข้อผิดพลาดบางอย่างเกิดขึ้นในการคำนวณจรวดดังนั้นมันจึงใช้งานไม่ได้และจรวดระเบิดและมีคนตายและ บริษัท ของคุณอยู่ในหน้าแรกของหนังสือพิมพ์ทุกฉบับและหัวหน้าของคุณชี้ไปที่นิ้วที่คุณพูดว่า "คุณเป็นวิศวกรที่แนะนำให้เราใช้ D เพื่อเพิ่มประสิทธิภาพประสิทธิภาพทำไมคุณไม่นึกถึงความปลอดภัย?"และมันเป็นความผิดของคุณคุณฆ่าคนเหล่านั้นด้วยความพยายามที่โง่เขลาในการแสดง
ตกลงตกลงเวลาส่วนใหญ่จะน้อยกว่าละครมาก แต่แม้แต่แอพพลิเคชั่นที่มีความสำคัญทางธุรกิจหรือเพียงแค่แอพ GPS หรืออาจกล่าวได้ว่าเว็บไซต์การดูแลสุขภาพของรัฐบาลสามารถให้ผลลัพธ์ที่เป็นลบหากคุณมีข้อบกพร่อง การใช้ภาษาที่ป้องกันไม่ให้สมบูรณ์หรือล้มเหลวเมื่อเกิดขึ้นมักเป็นความคิดที่ดี
มีค่าใช้จ่ายในการปิดความปลอดภัย การเป็นเจ้าของภาษาไม่สมเหตุสมผลเสมอไป บางครั้งมันง่ายกว่าและปลอดภัยกว่าที่จะเพิ่มประสิทธิภาพของภาษาที่ปลอดภัยเพียงเล็กน้อยเพื่อให้ได้ภาษาที่คุณสามารถยิงด้วยตัวคุณเองในเวลาที่ยิ่งใหญ่ ความถูกต้องและความปลอดภัยในกรณีที่กล้าหาญจำนวนมากไม่กี่วินาทีนาโนที่คุณจะได้ทิ้งโดยการกำจัด GC อย่างสมบูรณ์ Disruptor สามารถใช้ในสถานการณ์เหล่านั้นได้ดังนั้นฉันคิดว่า LMAX-Exchange โทรออกอย่างถูกต้อง
แต่แล้ว D โดยเฉพาะเกี่ยวกับอะไร? คุณมี GC หากคุณต้องการมุมมืดและชุดย่อย SafeD (ที่ฉันไม่ทราบมาก่อนการแก้ไข) ลบพฤติกรรมที่ไม่ได้กำหนด (ถ้าคุณจำได้ว่าจะใช้มัน!)
ในกรณีนั้นมันเป็นคำถามง่าย ๆ ของการกำหนด ระบบนิเวศ Java เต็มไปด้วยเครื่องมือที่เป็นลายลักษณ์อักษรและไลบรารีที่พัฒนาเต็มที่ (ดีสำหรับการพัฒนา) นักพัฒนาจำนวนมากรู้จัก Java มากกว่า D (ดีกว่าสำหรับการบำรุงรักษา) การไปหาภาษาใหม่ที่ไม่เป็นที่นิยมสำหรับบางสิ่งที่มีความสำคัญเหมือนแอพพลิเคชั่นทางการเงินคงไม่ใช่ความคิดที่ดี ด้วยภาษาที่ไม่ค่อยมีคนรู้จักหากคุณมีปัญหามีไม่กี่คนที่สามารถช่วยคุณได้และห้องสมุดที่คุณพบมักจะมีข้อบกพร่องมากขึ้นเนื่องจากพวกเขามีผู้คนน้อยลง
ดังนั้นประเด็นสุดท้ายของฉันยังคงอยู่: หากคุณต้องการหลีกเลี่ยงปัญหาที่เกิดจากผลกระทบร้ายแรงให้ยึดติดกับตัวเลือกที่ปลอดภัย ณ จุดนี้ในชีวิตของ D ลูกค้าของมันคือการเริ่มต้นเล็ก ๆ น้อย ๆ พร้อมที่จะรับความเสี่ยงอย่างบ้าคลั่ง หากมีปัญหาสามารถค่าใช้จ่ายนับล้านคุณจะดีกว่าการเข้าพักต่อไปในโค้งนวัตกรรมระฆัง