คำถามติดแท็ก memory

ใช้แท็กนี้สำหรับการจัดการหน่วยความจำหรือปัญหาในการเขียนโปรแกรม สำหรับคำถามเกี่ยวกับปัญหาฮาร์ดแวร์หน่วยความจำหรือข้อผิดพลาดในซอฟต์แวร์ทั่วไปให้ไปที่ https://superuser.com หรือ https://serverfault.com หากเกี่ยวข้องกับฮาร์ดแวร์หรือซอฟต์แวร์ระดับองค์กร

9
ทำไมการผนวก“” เข้ากับ String จะบันทึกหน่วยความจำ
String dataผมใช้ตัวแปรที่มีข้อมูลเป็นจำนวนมากในการพูด ฉันต้องการใช้ส่วนเล็ก ๆ ของสายนี้ในวิธีต่อไปนี้: this.smallpart = data.substring(12,18); หลังจากทำการดีบักได้หลายชั่วโมง (ด้วย visualizer หน่วยความจำ) ฉันพบว่าฟิลด์ออบเจ็กต์smallpartจดจำข้อมูลทั้งหมดจากdataแม้ว่ามันจะมีซับสตริงเท่านั้น เมื่อฉันเปลี่ยนรหัสเป็น: this.smallpart = data.substring(12,18)+""; .. ปัญหาได้รับการแก้ไข! ตอนนี้แอปพลิเคชันของฉันใช้หน่วยความจำน้อยมากในตอนนี้! เป็นไปได้อย่างไร? มีใครอธิบายเรื่องนี้ได้บ้าง ฉันคิดว่านี่ขนาดเล็กเก็บอ้างอิงถึงข้อมูล แต่ทำไม? อัปเดต: ฉันจะล้างสตริงขนาดใหญ่ได้อย่างไร data = new String (data.substring (0,100)) จะทำสิ่งนั้นหรือไม่

6
มีการจัดรูปแบบอาร์เรย์หลายมิติในหน่วยความจำอย่างไร
ใน C ฉันรู้ว่าฉันสามารถจัดสรรอาเรย์สองมิติแบบไดนามิกบนฮีปโดยใช้โค้ดต่อไปนี้: int** someNumbers = malloc(arrayRows*sizeof(int*)); for (i = 0; i < arrayRows; i++) { someNumbers[i] = malloc(arrayColumns*sizeof(int)); } เห็นได้ชัดว่าสิ่งนี้สร้างอาร์เรย์พอยน์เตอร์หนึ่งมิติไปยังอาร์เรย์จำนวนเต็มหนึ่งมิติที่แยกจากกันและ "ระบบ" สามารถหาสิ่งที่ฉันหมายถึงเมื่อฉันขอ: someNumbers[4][2]; แต่เมื่อฉันประกาศอาร์เรย์ 2 มิติแบบคงที่ดังในบรรทัดต่อไปนี้ ... : int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS]; ... โครงสร้างที่คล้ายกันนี้ถูกสร้างขึ้นบนสแต็กหรือเป็นรูปแบบอื่นอย่างสมบูรณ์หรือไม่ (เช่นเป็นตัวชี้อาร์เรย์ 1D หรือไม่ถ้าไม่ใช่มันคืออะไรและการอ้างอิงถึงมันคิดออกได้อย่างไร) นอกจากนี้เมื่อฉันพูดว่า "ระบบ" อะไรคือสิ่งที่ต้องรับผิดชอบในการหาสิ่งนั้น เคอร์เนล หรือคอมไพเลอร์ C เรียงลำดับขณะคอมไพล์หรือไม่?

11
ฉันจะตรวจสอบการใช้งาน CPU หน่วยความจำและการใช้ดิสก์ใน Java ได้อย่างไร
ฉันต้องการตรวจสอบข้อมูลระบบต่อไปนี้ใน Java: การใช้งาน CPU ปัจจุบัน ** (เปอร์เซ็นต์) หน่วยความจำที่มี * (ฟรี / ทั้งหมด) พื้นที่ว่างในดิสก์ (ฟรี / ทั้งหมด) * โปรดทราบว่าฉันหมายถึงหน่วยความจำโดยรวมที่มีให้สำหรับทั้งระบบไม่ใช่เฉพาะ JVM ฉันกำลังมองหาโซลูชันข้ามแพลตฟอร์ม (Linux, Mac และ Windows) ที่ไม่พึ่งพารหัสของตัวเองที่เรียกใช้โปรแกรมภายนอกหรือใช้ JNI แม้ว่าสิ่งเหล่านี้เป็นตัวเลือกที่ทำงานได้ แต่ฉันไม่ต้องการบำรุงรักษาโค้ดเฉพาะระบบปฏิบัติการด้วยตนเองถ้ามีคนที่มีทางออกที่ดีกว่า หากมีไลบรารี่ฟรีที่ทำสิ่งนี้ในลักษณะข้ามแพลตฟอร์มที่เชื่อถือได้นั่นจะยอดเยี่ยม (แม้ว่าจะทำการโทรภายนอกหรือใช้รหัสเนทีฟเอง) ข้อเสนอแนะใด ๆ ที่ชื่นชมมาก เพื่อชี้แจงฉันต้องการได้รับการใช้งาน CPU ปัจจุบันสำหรับทั้งระบบไม่ใช่เฉพาะกระบวนการ Java (es) SIGAR API ให้ฟังก์ชั่นทั้งหมดที่ฉันกำลังมองหาในแพ็คเกจเดียวดังนั้นมันจึงเป็นคำตอบที่ดีที่สุดสำหรับคำถามของฉัน อย่างไรก็ตามเนื่องจากได้รับอนุญาตภายใต้ GPL ฉันไม่สามารถใช้เพื่อวัตถุประสงค์ดั้งเดิมของฉันได้ (แหล่งข้อมูลปิดผลิตภัณฑ์เชิงพาณิชย์) อาจเป็นไปได้ว่า Hyperic อาจให้สิทธิ์ SIGAR เพื่อการใช้งานเชิงพาณิชย์ …

4
จะเกิดอะไรขึ้นเมื่อโปรแกรมคอมพิวเตอร์ทำงาน
ฉันรู้ทฤษฎีทั่วไป แต่ไม่สามารถอธิบายรายละเอียดได้ ฉันรู้ว่าโปรแกรมอยู่ในหน่วยความจำรองของคอมพิวเตอร์ เมื่อโปรแกรมเริ่มการทำงานมันจะถูกคัดลอกไปยัง RAM ทั้งหมด จากนั้นตัวประมวลผลจะดึงคำแนะนำสองสามครั้ง (ขึ้นอยู่กับขนาดของบัส) ในแต่ละครั้งทำให้พวกเขาลงทะเบียนและดำเนินการได้ ฉันยังรู้ว่าโปรแกรมคอมพิวเตอร์ใช้หน่วยความจำสองชนิด: stack และ heap ซึ่งเป็นส่วนหนึ่งของหน่วยความจำหลักของคอมพิวเตอร์ สแต็กใช้สำหรับหน่วยความจำที่ไม่ไดนามิกและฮีปสำหรับหน่วยความจำแบบไดนามิก (ตัวอย่างเช่นทุกอย่างที่เกี่ยวข้องกับnewโอเปอเรเตอร์ใน C ++) สิ่งที่ฉันไม่เข้าใจคือสิ่งที่ทั้งสองเชื่อมต่อกัน สแต็คใช้ในการดำเนินการตามคำแนะนำ ณ จุดใด คำแนะนำจาก RAM ไปจนถึงสแต็คไปยังรีจิสเตอร์?

11
ความแตกต่างระหว่างหน่วยความจำบัฟเฟอร์และแคชใน Linux คืออะไร?
สำหรับผมแล้วมันยังไม่ชัดเจนสิ่งที่แตกต่างระหว่างแนวคิดหน่วยความจำลินุกซ์สอง: และbuffer cacheฉันได้อ่านบทความนี้แล้วและสำหรับฉันแล้วความแตกต่างระหว่างพวกเขาคือนโยบายการหมดอายุ: นโยบายของบัฟเฟอร์เป็นแบบเข้าก่อนออกก่อน นโยบายของแคชคือใช้น้อยที่สุด ฉันถูกไหม? โดยเฉพาะฉันกำลังดูทั้งสองคำสั่ง: freeและvmstat james@utopia:~$ vmstat -S M procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 5 0 0 173 67 912 0 0 19 59 75 1087 24 4 71 1 …
179 linux  caching  memory  buffer 

5
ค่าใช้จ่ายโดยประมาณในการเข้าถึงแคชและหน่วยความจำหลักต่าง ๆ ?
ใครสามารถให้เวลาโดยประมาณ (เป็นนาโนวินาที) ในการเข้าถึงแคช L1, L2 และ L3 รวมถึงหน่วยความจำหลักในโปรเซสเซอร์ Intel i7 ได้หรือไม่? แม้ว่านี่จะไม่ใช่คำถามการเขียนโปรแกรมโดยเฉพาะ แต่การรู้รายละเอียดความเร็วเหล่านี้เป็นสิ่งจำเป็นสำหรับความท้าทายในการเขียนโปรแกรมความหน่วงต่ำ

17
เครื่องมือบรรทัดคำสั่งเพื่อค้นหา Java Heap Size และหน่วยความจำที่ใช้ (Linux)?
มีเครื่องมือบรรทัดคำสั่ง (Linux) เพื่อตรวจสอบขนาดฮีป (และหน่วยความจำที่ใช้) ของ Java Application หรือไม่? ฉันลองผ่าน jmap แต่มันให้ข้อมูล เกี่ยวกับพื้นที่หน่วยความจำภายในเช่น Eden / PermGen เป็นต้นซึ่งไม่มีประโยชน์สำหรับฉัน ฉันกำลังมองหาบางสิ่งที่ชอบ: หน่วยความจำสูงสุด: 1GB หน่วยความจำขั้นต่ำ: 256 MB หน่วยความจำฮีป: 700 MB หน่วยความจำที่ใช้แล้ว: 460 MB นั่นคือทั้งหมดที่ ฉันรู้ว่าฉันเห็นสิ่งนี้ใน JConsole ฯลฯ แต่ฉันต้องการเครื่องมือบรรทัดคำสั่ง (ไม่สามารถเปิดใช้งาน JMX ฯลฯ ) คุณรู้จักเครื่องมือ / คำสั่งดังกล่าวหรือไม่?
171 java  linux  performance  memory  heap 

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

8
สตริงตัวอักษร: พวกเขาจะไปที่ไหน
ฉันสนใจที่ตัวอักษรสตริงได้รับการจัดสรร / จัดเก็บ ฉันพบคำตอบที่น่าสนใจที่นี่โดยพูดว่า: การกำหนดสตริงแบบอินไลน์ฝังข้อมูลลงในโปรแกรมของตัวเองและไม่สามารถเปลี่ยนแปลงได้ (คอมไพเลอร์บางตัวยอมให้สิ่งนี้ทำได้โดยใช้เล่ห์เหลี่ยมไม่ต้องกังวล) แต่มันเกี่ยวข้องกับ C ++ ไม่ต้องพูดถึงว่ามันไม่รบกวน ฉันกำลังยุ่ง = D ดังนั้นคำถามของฉันอยู่ที่ไหนสตริงตัวอักษรของฉันจะถูกเก็บไว้อย่างไร? ทำไมฉันไม่ลองเปลี่ยนมันล่ะ? การใช้งานแตกต่างกันไปตามแพลตฟอร์มหรือไม่ ไม่มีใครสนใจที่จะอธิบายรายละเอียดเกี่ยวกับ "เคล็ดลับสมาร์ท?"

8
scala vs java, ประสิทธิภาพและหน่วยความจำ? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันกระตือรือร้นที่จะดู Scala และมีคำถามพื้นฐานที่ฉันไม่สามารถหาคำตอบ: โดยทั่วไปมีประสิทธิภาพและการใช้หน่วยความจำระหว่าง Scala และ Java แตกต่างกันหรือไม่

13
java.lang.OutOfMemoryError: ขนาดบิตแมปเกินงบประมาณ VM - Android
ฉันพัฒนาแอพพลิเคชั่นที่ใช้รูปภาพจำนวนมากบน Android แอปพลิเควิ่งครั้งเดียวเติมข้อมูลบนหน้าจอ ( Layouts, Listviews, Textviews, ImageViewsฯลฯ ) และผู้ใช้อ่านข้อมูล ไม่มีภาพเคลื่อนไหวไม่มีเอฟเฟกต์พิเศษหรืออะไรก็ตามที่สามารถเติมหน่วยความจำได้ บางครั้ง drawables สามารถเปลี่ยนได้ บางแหล่งข้อมูลเป็น Android และบางส่วนเป็นไฟล์ที่บันทึกในโฟลเดอร์ใน SDCARD จากนั้นผู้ใช้จะออก ( onDestroyวิธีการดำเนินการและแอพยังคงอยู่ในหน่วยความจำโดย VM) จากนั้นในบางครั้งผู้ใช้จะเข้าสู่อีกครั้ง ทุกครั้งที่ผู้ใช้ป้อนไปยังแอปที่ฉันสามารถดูหน่วยความจำที่เติบโตมากขึ้นเรื่อย ๆ java.lang.OutOfMemoryErrorจนกว่าผู้ใช้จะได้รับ ดังนั้นวิธีที่ดีที่สุด / ถูกต้องในการจัดการภาพจำนวนมากคืออะไร? ฉันควรใส่วิธีคงที่เพื่อไม่ให้โหลดตลอดเวลาหรือไม่ ฉันต้องทำความสะอาดเลย์เอาต์หรือรูปภาพที่ใช้ในเลย์เอาต์ด้วยวิธีพิเศษหรือไม่?

13
“ หน่วยความจำที่จัดสรรในเวลารวบรวม” หมายความว่าอย่างไร?
ในการเขียนโปรแกรมภาษาเช่น C และ C ++ ผู้คนมักจะอ้างถึงการจัดสรรหน่วยความจำแบบคงที่และแบบไดนามิก ฉันเข้าใจแนวคิด แต่วลี "หน่วยความจำทั้งหมดถูกจัดสรร (สงวนไว้) ในช่วงเวลารวบรวม" ทำให้ฉันสับสนอยู่เสมอ การรวบรวมดังที่ฉันเข้าใจแล้วจะแปลงรหัส C / C ++ ระดับสูงเป็นภาษาเครื่องและส่งออกไฟล์ปฏิบัติการ หน่วยความจำ "จัดสรร" ในไฟล์ที่คอมไพล์แล้วเป็นอย่างไร? การจัดสรรหน่วยความจำใน RAM มักจะไม่ใช่เรื่องการจัดการหน่วยความจำเสมือนทุกครั้งหรือไม่ การจัดสรรหน่วยความจำตามคำนิยามไม่ใช่แนวคิดของรันไทม์ใช่หรือไม่ ถ้าฉันสร้างตัวแปรที่จัดสรรแบบคงที่ 1KB ในรหัส C / C ++ ของฉันนั่นจะเพิ่มขนาดของไฟล์ปฏิบัติการด้วยจำนวนเดียวกันหรือไม่? นี่เป็นหนึ่งในหน้าที่ใช้วลีภายใต้หัวข้อ "การจัดสรรแบบคงที่" กลับไปสู่พื้นฐาน: การจัดสรรหน่วยความจำประวัติความเป็นมา

9
ตัวแปรของฉันถูกเก็บไว้ในหน่วยความจำที่ไหน
โดยพิจารณาว่าหน่วยความจำแบ่งออกเป็นสี่ส่วน: data, heap, stack และ code โดยที่ตัวแปรโกลบอล, ตัวแปรสแตติก, ชนิดข้อมูลคงที่, ตัวแปรโลคัล (กำหนดและประกาศในฟังก์ชัน), ตัวแปร (ในฟังก์ชั่นหลัก), พอยน์เตอร์ และพื้นที่ที่จัดสรรแบบไดนามิก (โดยใช้ malloc และ calloc) จะถูกเก็บไว้ในหน่วยความจำหรือไม่? ฉันคิดว่าพวกเขาจะได้รับการจัดสรรดังนี้: ตัวแปรโกลบอล -------> ข้อมูล ตัวแปรคงที่ -------> ข้อมูล ประเภทข้อมูลคงที่ -----> รหัส ตัวแปรท้องถิ่น (ประกาศและกำหนดไว้ในฟังก์ชั่น) --------> สแต็ค ตัวแปรที่ประกาศและกำหนดในฟังก์ชั่นหลัก -----> heap พอยน์เตอร์ (ตัวอย่างเช่นchar *arr, int *arr) -------> heap พื้นที่ที่จัดสรรแบบไดนามิก (โดยใช้ malloc และ calloc) --------> …

9
ใน C เครื่องหมายวงเล็บทำหน้าที่เป็นกรอบสแต็กหรือไม่
หากฉันสร้างตัวแปรภายในวงเล็บปีกกาชุดใหม่ตัวแปรนั้นจะแตกออกจากสแต็กในวงเล็บปิดหรือไม่หรือจะออกไปเที่ยวจนจบฟังก์ชัน ตัวอย่างเช่น: void foo() { int c[100]; { int d[200]; } //code that takes a while return; } จะdใช้หน่วยความจำระหว่างcode that takes a whileส่วนหรือไม่
153 c  memory  stack 

10
งบประมาณหน่วยความจำสูงสุดของแอป ios
ฉันกำลังทำงานกับเกม iOS ที่กำหนดเป้าหมายเป็นอย่างน้อย 3gs เรากำลังใช้ทรัพย์สิน HD สำหรับอุปกรณ์แสดงผลเรตินา (iphone 4, ipod touch 4th gen) หน่วยความจำที่ชาญฉลาด Ipod Touch 4th gen ดูเหมือนจะเป็นอุปกรณ์ที่ จำกัด ที่สุดสำหรับเราเนื่องจากมี RAM เท่ากัน (256 เทียบกับ Iphone 4 ของ 512) เป็น 3gs แต่เราใช้เนื้อหา HD ในนั้น แอปเคยขัดข้องเมื่อพยายามโหลด ram 100-110mb แต่ตอนนี้เราลดลงเหลือ 70MB แล้วเราไม่เคยโหลดขัดข้องเลย หลังจากการค้นหาจำนวนมากดูเหมือนว่าจะไม่มีข้อ จำกัด อย่างเป็นทางการดังนั้นเราจะรู้ได้อย่างไรว่างบประมาณหน่วยความจำแบบใดที่จะใช้ปลอดภัย เราต้องการให้งบประมาณแก่ศิลปินที่พวกเขาสามารถใช้ได้โดยไม่ต้องกังวลเรื่องหน่วยความจำสำหรับแต่ละแผนที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.