มีการศึกษาเปรียบเทียบการใช้หน่วยความจำของภาษาการเขียนโปรแกรมรันไทม์ที่สัมพันธ์กับการแสดงออกและอัตราส่วนการผลิตข้อบกพร่อง? [ปิด]


10

มีการศึกษาเปรียบเทียบจำนวนมากและมีให้ทางออนไลน์เมื่อพูดถึงประสิทธิภาพรันไทม์ของแอพพลิเคชั่นที่สร้างขึ้นโดยใช้ภาษาเดียวหรืออีกภาษาหนึ่ง บางคนขับเคลื่อนโดย บริษัท นักวิชาการบางคนรายงานการทดลองส่วนตัวบางอย่าง

นอกจากนี้เรายังได้รับส่วนแบ่งที่ดีจากการศึกษาเปรียบเทียบผลข้างเคียงของภาษาการเขียนโปรแกรมและการใช้เครื่องมือเช่น:

  • สร้างครั้ง
  • โอกาสในการตรวจจับข้อผิดพลาดหลังการผลิต
  • พลังการแสดงออก
  • ฯลฯ ...

อย่างไรก็ตามเมื่อเร็ว ๆ นี้ฉันได้รับความเสียหายจากการใช้หน่วยความจำของโปรแกรมของฉันมากกว่าสิ่งอื่นใด นี่อาจมาจากความจริงที่ว่าในขณะที่กฎของมัวร์อยู่ข้างเราเพื่อให้ได้ประสิทธิภาพที่ดิบเราได้ตระหนักว่าคอขวดอื่น ๆ และฉันมักจะไม่อัปเดตฮาร์ดแวร์ของฉันทุกครั้งและฉันมี "เก่า" บางอย่าง (อ่าน 2005-2006 3.6GHz Pentium 4 พร้อม 4GB of RAM) ซึ่งปัจจุบันยากที่จะถูกใช้งานสำหรับแอปพลิเคชันขนาดใหญ่ที่ไม่มี ทำให้ฉันต้องเจอกับปัญหาอย่างมากในการบีบน้ำผลไม้ออกเล็กน้อย (ตัวเลือกของ OS, UI, tweaking ของบริการและ daemons ทางเลือกของแอปพลิเคชันที่จะใช้สำหรับงานหรืออื่น ... ) ค่อนข้างตรงไปตรงมาบางครั้งฉันก็โกรธtopหรือprocexpร้องไห้เมื่อเห็นความทรงจำที่ใช้โดยโปรแกรมที่ไร้เดียงสาที่สุด

ฉันสามารถพูดเรื่องนี้ได้โดยพยายามผลักดันในทิศทางที่กล่าวข้างต้นและพยายาม จำกัด ตัวเองและโปรแกรมที่ฉันใช้ (ฉันมีความรักสำหรับโปรแกรม cli ด้วยเหตุนี้ฉันเดา) แต่ฉันก็อดคิดไม่ได้ บางทีเราอาจทำผิด

เครื่องมือที่ทันสมัยสำหรับความต้องการที่ทันสมัย

แน่นอนว่าภาษาระดับสูงนั้นดีกว่าและพิสูจน์ให้เห็นถึงคุณค่าของการเสียน้ำหนัก ตัวเลือกการออกแบบบางอย่างถูกสร้างขึ้นมาเพื่อเหตุผลที่ดี (หรือมีเจตนาดี) ในเวลานั้นในหลาย ๆ เครื่องมือ ไลบรารี่ที่ใช้ร่วมกัน, โมเดลหน่วยความจำ, โปรเซสเซอร์ล่วงหน้า, ระบบพิมพ์ ฯลฯ ... แต่บางอันอาจทำงานได้ดีกว่าอุปกรณ์อื่น ๆ ด้วยฮาร์ดแวร์ที่ทันสมัยของเราและฉันอยากรู้อยากเห็นการศึกษาที่จริงจังในเรื่องนี้

ดังนั้นคำถามของฉันคือมีจี้ในเกม Benchmarksและอื่น ๆ ที่เน้นการเปรียบเทียบการใช้หน่วยความจำรันไทม์พื้นฐานของภาษาหรือไม่

และยิ่งกว่านั้นมีการศึกษาบางอย่างที่อ้างอิงข้ามสิ่งนี้กับพารามิเตอร์อื่น ๆ (คล้ายกับสิ่งที่บทความนี้ทำเช่นสำหรับเกณฑ์อื่น ๆ เช่นกันโดยอิงตามเกณฑ์มาตรฐานของเกม )


3
เหตุใดเกมมาตรฐานจึงไม่เพียงพอ อาจเป็นทรัพยากรที่ดีที่สุดที่มีอยู่และครอบคลุมการใช้หน่วยความจำโดยละเอียดแล้ว
Robert Harvey

@RobertHarvey: มันให้ข้อมูลหน่วยความจำ แต่ไม่ใช่สำหรับรันไทม์ "ฐาน" นอกจากนี้ฉันพบว่าการดึงข้อมูลจากเกม Benchmarks ค่อนข้างน่าเชื่อถือ (ยิ่งมีเครดิตมากขึ้นสำหรับบทความนั้นที่ทำผลงานได้อย่างน่าทึ่งด้วยข้อมูลแม้ว่ามันจะไม่ใช่สิ่งที่ฉันต้องการก็ตาม)
haylem

1
มันอาจช่วยให้คนที่พยายามตอบคำถามของคุณหากคุณให้ข้อมูลเกี่ยวกับปัญหาที่คุณพยายามแก้ไขด้วยข้อมูลเฉพาะบางอย่างเช่นสภาพแวดล้อมในการทำงานและการใช้หน่วยความจำที่คุณต้องการ คำตอบจะแตกต่างกันไปหากคุณกำลังเขียนซอฟต์แวร์สำหรับสภาพแวดล้อมแบบฝังตัว (ซึ่งจำนวนหน่วยความจำที่ใช้มีความสำคัญ) เมื่อเทียบกับเครื่องเดสก์ท็อปที่ล้ำสมัย มีขนาดใหญ่มาก)
Robert Harvey

2
How much memory consumption makes you weep?30MB สำหรับแท็บ Chrome ที่ไม่ใช้งานและไม่มีส่วนขยาย 100MB สำหรับ CCC ของ ATI หรือแม้แต่ 11MB สำหรับปลั๊กอิน googletalk ที่ไม่ใช้งานหรือ 23MB สำหรับไดรเวอร์เครื่องพิมพ์ที่ไม่ใช้งาน สิ่งเหล่านี้และอีกมากมาย ตัวอย่างโครเมี่ยมค่อนข้างออกจากสวนสาธารณะเพราะเป็นตัวอย่างที่ซับซ้อนกว่า แต่อีกตัวอย่างหนึ่งทำให้ฉันประหลาดใจมาก
haylem

คำตอบ:


7

ฉันพบข้อมูลบางส่วนแล้วดังนั้นฉันจะเริ่มรวบรวมสิ่งที่ค้นพบในคำตอบของฉันเอง โปรดอย่าปล่อยให้คุณหยุดคำตอบของคุณเอง (หรือแก้ไขคำตอบนี้)

วรรณกรรมที่มีอยู่:

  • การเปรียบเทียบเชิงประจักษ์ของ 7 ภาษาการเขียนโปรแกรม - Prechelt (2000) [ PDF ]

    ค่อนข้างเก่า แต่ครอบคลุมเนื้อหาบางอย่างที่ฉันสนใจและให้มุมมองเกี่ยวกับการใช้งานหน่วยความจำรันไทม์และการแสดงออก ผลลัพธ์อาจแตกต่างกันมากในตอนนี้ แต่เป็นการเริ่มต้นที่น่าสนใจ

  • ความเร็วขนาดและความน่าเชื่อถือของภาษาโปรแกรม - Marceau (2009) [ บล็อก ]

  • ใช้รหัส, รูปร่างที่ใช้เวลาจากเกมมาตรฐาน [ u32 , u32q , u64 , u64q ]

    แม้ว่ามันจะไม่ได้ครอบคลุมการใช้หน่วยความจำรันไทม์ แต่งานของ Marceau นั้นเป็นประเภทของการอ้างอิงหรือการศึกษาเชิงประจักษ์ที่ฉันยินดีที่จะค้นหาสำหรับบทวิจารณ์นั้นในแง่ของเนื้อหาและคุณภาพ ตัวอย่างที่ดีของสิ่งที่ฉันตามมาเพียงเพื่อการวัดที่แตกต่างกัน บทความที่สองคือการติดตามที่พบในเว็บไซต์ Benchmarks Game และเผยแพร่หลังจากนั้นไม่นาน (และการอ้างอิงใด) งานของ Marceau พร้อมหน้าจอล่าสุดและภาษาอื่น ๆ อีกมากมายแม้ว่ายังไม่มีรายละเอียดหน่วยความจำรันไทม์ กราฟในหน้าเหล่านี้แล้วนำไปสู่การเปรียบเทียบภาษาการใช้ภาษาที่แต่ละคนทำให้ข้อมูลหน่วยความจำระดับสูงแม้ว่า


งานของ Marceau เป็นการออกกำลังกายในการเล่าเรื่องและเรื่องราวบางเรื่องก็ไม่สมเหตุสมผล - "การแนะนำคุณลักษณะที่มีประโยชน์ในการฆ่านั้นมีประสิทธิภาพหรือไม่" ไม่สนใจข้อเท็จจริงง่ายๆที่โปรแกรม "ภาษาที่ใช้งานได้" บางโปรแกรมอาจไม่สามารถใช้คุณสมบัติการใช้งานได้ ข้อมูลที่นำมาจากชาติก่อนหน้าของเกมมาตรฐาน; และถูกนำมาใช้ครั้งแรกโดยไม่เข้าใจดังนั้นจึงมีหลายรอบของการแก้ไขหลังจากการตีพิมพ์ (ตรวจสอบความคิดเห็น)
igouy

สำหรับ "การใช้หน่วยความจำฐานรันไทม์" การเปรียบเทียบโปรแกรม "hello world" อย่างง่ายอาจจะดีเท่าที่คุณต้องการ
igouy

@igouy: ใช่ ไม่ต้องสงสัยเลยว่า แต่ฉันหวังว่าจะไม่ต้องทำการทดลองและจัดทำเอกสาร / ยืนยันว่าตัวฉันเอง :) อันที่จริงแม้แต่น้อยกว่าโลกสวัสดีก็คงโอเคเพราะในบางอย่างคุณไม่จำเป็นต้องเชื่อมโยงกับ (หรือ โหลด) รูทีนการพิมพ์เป็นต้น (ปิดการใช้งานการเพิ่มประสิทธิภาพคอมไพเลอร์และอื่น ๆ สิ่งที่อาจจะแนะนำให้เลือกเช่นกัน)
haylem

@igouy: เกี่ยวกับการทำงานของ Marceau ฉันรู้ว่าฉันได้อ่านหน้าความคิดเห็นหน้า Benchmark Game ที่ได้รับการปรับปรุงและติดต่อกับเขา บทความนี้ยังอ้างอิงที่ดีในความคิดของฉัน ความจริงที่ว่ามันไม่สมบูรณ์ไม่ได้ลดคุณค่าและมันก็ยังอยู่ในทิศทางของสิ่งที่ฉันต้องการค้นหา (หรือสร้างตัวเองใหม่)
haylem

"แต่ผมก็หวังว่าจะไม่ให้มีการทดสอบและเอกสาร / ยืนยันว่าตัวเอง" - ดูที่วัดในที่InternetArchive แต่โชคร้ายสำหรับคุณฉันตัดสินใจที่วัดหน่วยความจำสำหรับ Hello World ถูกทำให้เข้าใจผิดอย่างเต็มที่และหยุดการแสดงพวกเขาหลังจากที่ปี 2005
igouy

1

นี่ไม่ใช่การตอบคำถามต่อการพูด แต่อาจเปลี่ยนมุมมองเล็กน้อย ฉันคำนึงถึงบันทึกจากการแชทเพื่อกำหนดเสียงของคำตอบความคิดเห็นที่แน่ใจว่าเป็นเรื่องของการลงมติจำนวนมาก

มีผู้ให้บริการฮาร์ดแวร์ผู้ให้บริการเครื่องมือและโปรแกรมเมอร์ที่มีความกังวลเกี่ยวกับประสิทธิภาพ ในขณะนี้จะเป็นความกังวลที่เพิ่มขึ้นสำหรับพวกเขาและพวกเราทุกคน ความกังวลเหล่านั้นฝังรากอยู่ในอุปกรณ์พกพาโดยเฉพาะมอนสเตอร์ที่กินพลังงานสูงและก้อนแบตเตอรี่ซึ่งมีหน้าจอที่ใหญ่ที่สุดและวิทยุที่แข็งแกร่งที่สุด

เพื่อย้อนกลับไปอีกขั้นหนึ่งส่วนหนึ่งของเหตุผลที่เราพบว่าเราอยู่ในสถานการณ์ที่เราอยู่ทุกวันนี้ด้วยกรอบที่ค่อนข้างใหญ่และไม่สนใจประสิทธิภาพทั่วไปเพียงเล็กน้อยเกินกว่าการปรับปรุงฮาร์ดแวร์เป็นมรดก ความเข้ากันได้กับระบบเดิมทำให้เรามีความเข้ากันได้ที่ด้านบนของความเข้ากันได้ มันไม่ได้เป็นความผิดของรันไทม์ระดับบนมากนักเนื่องจากเป็นรันไทม์เดียวกันที่มีประสิทธิภาพค่อนข้างมากและมีประสิทธิภาพเมื่อใช้ในสภาพแวดล้อมการทำงานที่แตกต่างกัน (เช่น Xbox, windows mobile pre 7/8 / surface, java micro framework ฯลฯ )

เปรียบเทียบขอบเขตของความเข้ากันได้ของเดสก์ท็อปที่มีกับซอฟต์แวร์แบบดั้งเดิมกับขอบเขตของความเข้ากันได้ของอุปกรณ์มือถือ

ด้วยอุปกรณ์พกพาผู้ผลิตอุปกรณ์พยายามใช้ความมั่นใจในการใช้งานร่วมกันได้ แต่พวกเขาไม่ได้ทำให้ความเข้ากันได้เป็นปัจจัยหลัก เมื่อตัวเลือกอยู่ระหว่างดำเนินการต่อเพื่อให้ความเข้ากันได้และย้ายการออกแบบระบบมือถือไปข้างหน้าระบบโทรศัพท์เคลื่อนที่ไปข้างหน้า

สำหรับเดสก์ท็อปสิ่งที่ตรงกันข้ามจะเป็นจริง หากการเปลี่ยนแปลงครั้งสำคัญส่งผลกระทบต่อนักการตลาดหรือผู้ใช้ในช่วงต้นอย่างผิด ๆ มันจะผลักดันคุณสมบัติที่ต้องการและจำเป็นต้องได้รับการออกแบบใหม่ในห้องด้านหลังหลายครั้ง ในบางจุดฉันจำข่าวลือถึงผลกระทบที่เราในฐานะผู้ใช้ Windows จะพบกับระบบไฟล์ใหม่ที่สมบูรณ์และน่าทึ่งด้วย Windows XP จากนั้นใน Vista ต่อมาเหมือนกันสำหรับ Seven และในที่สุดอีกครั้งใน Eight แต่ไม่มีการปรับปรุงเพียงเล็กน้อย แรกที่เราเห็นมันใน Windows2000? ระบบไฟล์ใหม่นั่งอยู่เป็นเวลานานถูกทิ้งและข่าวลือก็ตัดสินเรื่องหลังจากนั้นฉันก็ไม่สามารถพูดได้ นั่นอาจเป็นกรณีที่รู้จักกันดีที่สุด แต่ฉันมั่นใจว่ามันไม่ใช่กรณีใหญ่เท่านั้น

แม้จะมีแท็บเล็ตและระบบปฏิบัติการมือถือรุ่นล่าสุดของ Microsoft ที่ครั้งหนึ่งเคยเป็นรูปร่างของตลาด แต่ตอนนี้ผู้คนไม่เพียง แต่จับคู่กับผู้บริโภคเท่านั้น แท็บเล็ตจะต้องมีการทำงานร่วมกันอย่างมีนัยสำคัญกับคู่เดสก์ทอป ไม่มันไม่สามารถเล่นได้อย่างสมบูรณ์แบบด้วยความแตกต่างของสถาปัตยกรรม แต่เนื่องมาจากลักษณะที่เก่าแก่ของเดสก์ท็อปที่ทำให้มันเสียสละอย่างมีนัยสำคัญ

แน่นอนว่าตอนนี้ Windows เป็นเป้าหมายที่ง่ายสำหรับการวิจารณ์ประเภทใดก็ตามสำหรับสถานการณ์นี้ แต่แพลตฟอร์มอื่น ๆ อยู่ไกลจาก "ปราศจากบาป" มีของสะสมมากมายที่แฝงตัวอยู่ในระบบนิเวศลินุกซ์ที่ฉันแน่ใจว่าทำให้เกิดความหวาดกลัวอย่างมากสำหรับการปรับปรุงระบบ

เศรษฐศาสตร์มีบทบาทสำคัญในสมการนี้ วิธีที่เราให้เงินกับคอมพิวเตอร์และแอพพลิเคชั่นของเราในหนึ่งและวิธีที่พวกเขาได้รับเงินทุนในอีกรูปแบบที่แตกต่างกันอย่างน่าทึ่ง เมื่อ Wintel ครั้งหนึ่งเคยมีอิทธิพลต่อความล้าสมัยอย่างรุนแรง Apple และ Google ได้เปลี่ยนให้เป็นกำหนดการที่เข้มงวด นี่เป็นอีกหลักสูตรที่เกินกว่าที่ฉันตั้งใจไว้ดังนั้นฉันจะออกไปเพราะนั่งและปล่อยให้ผู้อ่านนำไปจากที่นั่น

หากและเมื่อผู้ให้บริการรายใหญ่เปลี่ยนรูปแบบล้าสมัยและราคาของพวกเขาพวกเขาสามารถเริ่มก้าวไปข้างหน้าด้วยการเปลี่ยนแปลงขนาดใหญ่ในอัตราที่มากกว่า เฟรมเวิร์กระดับบนสุดที่ขับเคลื่อนโดยภาษาลำดับสูงสุดจะย่อขนาดลงเนื่องจากพวกเขาจะสามารถบรรลุภารกิจระดับสูงด้วยระดับต่ำเช่นประสิทธิภาพเนื่องจากความเข้ากันได้ระดับกลางที่ไม่มีประสิทธิภาพและเลเยอร์ระดับต่ำจะ จะลดลงอย่างมากหากไม่ได้ตัดออก


ไม่ได้ตอบจริงๆมันเหมือนความคิดแบบฟรีฟอร์มที่เพิ่มไปยังพื้นหลังของคำถาม :) ขอบคุณและ +1 สำหรับข้อมูลเชิงลึก (นอกจากนี้ฉันต้องการชี้แจงว่าฉันไม่เคยตั้งใจจะให้ระบบ Microsoft เป็นส่วนหนึ่งของผู้ร้ายระบบปฏิบัติการใด ๆ ที่เป็นปัญหาเดียวกันหากรูปแบบหน่วยความจำของระบบและรูปแบบที่อนุญาตให้ทำได้)
haylem

แน่นอนว่าฉันไม่ได้ตั้งใจที่จะพูดคุยกับ Microsoft แต่เป็นกรณีที่ง่ายที่สุดที่คนส่วนใหญ่จะเห็นในเรื่องนี้ ชื่อใหญ่อื่น ๆ ผู้ให้บริการแบบดั้งเดิมอยู่ในเรือลำเดียวกันหากแม้จะเป็นเรื่องที่แตกต่างกันเล็กน้อย (เช่นฐานข้อมูลระดับอุตสาหกรรมและอุปกรณ์ระบบเครือข่ายเช่นมีการประนีประนอมจำนวนมากแค่ไหน . แม้ใกล้บ้านกับผลิตภัณฑ์ของเราแต่ละคนเราสนับสนุนเราดำเนินการข้ามสุภาษิตที่หนึ่งองศาหรืออื่น
JustinC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.