คำนำ
เมื่อเร็ว ๆ นี้เราได้เพิ่มกลยุทธ์การลดระดับลงในส่วนประกอบฟิวส์ (Hystrix ดูเหมือนจะไม่มีการกำหนดค่านี้) และเรามีกลยุทธ์ต่อไปนี้:
1. นโยบายเริ่มต้น
2. ส่งคืนค่าคงที่
3. โยนข้อยกเว้นที่ระบุ
4. เรียกใช้สคริปต์ groovy
แน่นอนการกำหนดค่าเหล่านี้สามารถกำหนดค่าบนแพลตฟอร์มและมีผลทันที
การใช้งานปัจจุบันของการส่งคืนค่าคงที่มีดังนี้:
วันนี้ฉันพบว่าหากวัตถุเดียวกันถูกส่งคืนทุกครั้งและตรรกะนี้เป็นกล่องดำสำหรับธุรกิจ (ธุรกิจไม่ทราบว่าวัตถุที่ได้รับในแต่ละครั้งจะเหมือนกัน) หากวัตถุดำเนินการอยู่มันจะส่งผลกระทบต่อคำขออื่น ๆ อย่างแน่นอน เพื่อหลีกเลี่ยงการตำหนิเราต้องส่งคืนวัตถุใหม่ทุกครั้ง ปฏิกิริยาแรกคือไม่ว่าจะเป็นไปได้ผ่านการโคลนหรือไม่ (เพราะการทำให้เป็นอนุกรม JS แต่ละครั้งจะสูญเสียประสิทธิภาพ) แต่วิธีการโคลนที่มาพร้อมกับ JDK เป็นเพียงโคลนตื้น หากวัตถุมีวัตถุที่ซับซ้อนอื่นวัตถุที่ได้จากโคลนยังคงมีความเสี่ยงที่จะได้รับการแก้ไข
รายละเอียดบทนำ:
คุณสามารถดูตัวอย่างต่อไปนี้:
คลาสมาสเตอร์คลาส {ชื่อสตริง; อาจารย์สาธารณะ (ชื่อสตริง) {this.name = name; -เริ่มต้นชั้นเรียนหลัก
สุนัขคลาสใช้ cloneable {ชื่อสตริง; อายุ int; อาจารย์; Public Dog (ชื่อสตริงอายุ int, master master) {this.name = name; this.age = อายุ; this.master = master; } @Override วัตถุที่ได้รับการป้องกันโคลน () พ่น clonenotsupportedException {return super.clone (); } @Override Public String ToString () {return "{ชื่อ:" + name + ", อายุ:" + อายุ + ", master:" + master.name + "}"; -เริ่มต้นสุนัข
โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {มาสเตอร์มาสเตอร์ = ต้นแบบใหม่ ("zj0"); Dog Dog1 = สุนัขใหม่ ("Wangcai", 1, Master); Dog Dog2 = (Dog) Dog1.clone (); dog1.name = "Billy"; dog1.master.name = "zj1"; System.out.println (dog2);}ในที่สุดก็เรียกใช้ผลลัพธ์มีดังนี้:
{ชื่อ: 王彩, อายุ: 1, Master: ZJ1}Dog1 เป็นสุนัขดั้งเดิม Dog2 ถูกโคลน แต่เมื่อฉันแก้ไขชื่อของอาจารย์ของ Dog1 อาจารย์โคลนก็เปลี่ยนไปเช่นกันซึ่งเห็นได้ชัดว่าไม่ได้ผล
แม้ว่าฉันจะรู้มาตลอดว่าวิธีการโคลนของวัตถุเป็นโคลนตื้นและฉันยังไม่ได้สำรวจต่อไป วันนี้ฉันเจอมันและดูการใช้งานของ JVM ดูเหมือนง่ายมาก ในไฟล์ jvm.cpp ค้นหา "jvm_clone"
ฉันไม่เคยใช้วิธีการโคลนมาก่อน ผ่านซอร์สโค้ดฉันพบว่าเมื่อทำงานฉันตรวจสอบว่าคลาสใช้อินเทอร์เฟซ cloneable หรือไม่ ฉันไม่ได้ตรวจสอบระหว่างการรวบรวม ฉันคิดอย่างไร?
ตามขนาดของวัตถุหรือข้อมูลให้เปิดชิ้นส่วนของหน่วยความจำที่มีขนาดเท่ากันจากกองจากนั้นคัดลอกข้อมูลของวัตถุต้นฉบับไปยังที่อยู่หน่วยความจำใหม่ สำหรับประเภทพื้นฐานค่าดั้งเดิมสามารถคัดลอกได้ แต่สำหรับวัตถุภายในมันจะบันทึกเฉพาะที่อยู่เท่านั้นและยังเป็นสำเนาของที่อยู่ระหว่างการคัดลอกและในที่สุดก็ชี้ไปที่วัตถุเดียวกันซึ่งทำให้เกิดปัญหาข้างต้น
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com