เหตุใด Java จึงถูกพิจารณาว่าพกพาได้มากกว่าภาษาอื่นเช่น C ++


16

อะไรคือความแตกต่างระหว่าง "การเขียน JRE เฉพาะสำหรับแต่ละแพลตฟอร์ม" สำหรับนักพัฒนา Java และ "การเขียนคอมไพเลอร์ C ++ สำหรับแต่ละแพลตฟอร์ม" สำหรับ C ++

คำตอบ:


33

Java คอมไพล์ครั้งเดียวทำงานได้ทุกที่ C ++ เขียนครั้งเดียวได้ทุกที่


3
เห็นได้ชัดว่าคุณไม่ได้มีประสบการณ์มากกับการพัฒนา GUI (กำลังรอคิว QT ... )

27
ทุกคนที่อ้างว่า C ++ คือ "เขียนเมื่อคอมไพล์ได้ทุกที่" ไม่เคยมีการพอร์ตโปรแกรม C ++ ...
BlueRaja - Danny Pflughoeft

7
ฉันเห็นด้วยกับ BlueRaja การย้ายโปรแกรม C ++ หมายถึงการทำพอร์ตคอมไพเลอร์มากกว่า C ++ เป็นที่แพร่หลายมากที่สุดในสภาพแวดล้อมที่สำคัญซึ่งสิ่งต่าง ๆ เช่นขนาดของ int หรือการนำระบบไฟล์ไปใช้นั้นสามารถสร้างความแตกต่างได้อย่างมาก การย้ายพอร์ตไม่ได้หมายถึงการรวบรวมซ้ำ
rahmu

8
@ Pubby8 ไม่ปัญหาเรื่องความสะดวกในการพกพานั้นมาจากรหัสมาตรฐานที่ทำให้สมมติฐานที่ไม่สามารถพูดได้เช่นสมมติฐานเกี่ยวกับ endianness (ซึ่งเป็นสิ่งที่คุณคิดคุณสามารถประสบใน Java) การจัดตำแหน่งและขนาดพื้นฐานของชนิด
R. Martinho Fernandes

5
เขียนหนึ่งครั้งตรวจแก้จุดบกพร่องทุกที่
bhagyas

25

"การเขียน JRE เฉพาะสำหรับแต่ละแพลตฟอร์ม" ไม่ใช่สิ่งที่คุณทำทุกครั้ง การย้าย JRE ไปยังแพลตฟอร์มใหม่เป็นสิ่งที่คุณต้องทำเพียงครั้งเดียว งานนี้ทำโดยผู้ดูแลหลัก / นักพัฒนาของโปรแกรมและ / หรือแพลตฟอร์ม ปัจจัยหลายอย่างอาจเข้ามาเล่นเมื่อตัดสินใจว่าใครและวิธีการ JRE จะได้รับการพอร์ต เหนือสิ่งอื่นใดมันขึ้นอยู่กับสิทธิ์การใช้งานที่เผยแพร่ภายใต้ (ฉันได้ยิน Java เป็นโอเพ่นซอร์สดังนั้นฉันเดาว่าทุกคนสามารถทำได้) เรื่องตลกสตีฟจ็อบส์ทำเรื่องใหญ่เกี่ยวกับการไม่ต้องการดูแลพอร์ตของ Java บน Mac เมื่อประมาณหนึ่งปีก่อน

จุดไม่ใช่วิธีที่หรือพอร์ต JRE แต่ความจริงที่ว่าเมื่อมีการ ported ทุกโปรแกรม Java ตอนนี้ควรทำงานตามทฤษฎีในเครื่องใหม่ได้อย่างง่ายดาย ในแง่นั้น JRE จะสร้างเลเยอร์ที่เป็นนามธรรมซึ่งซ่อนเครื่องไว้อย่างสมบูรณ์ทำให้สามารถย้ายได้ง่าย

อย่างไรก็ตามความจริงไม่ได้สวยเช่นนี้เสมอไป ฉันจะไม่ไปไกลเท่ากับการพกพา "ตำนาน" แต่มันเป็นความจริงที่มันไม่สมบูรณ์แบบ ตัวอย่างเช่น Java มีแพคเกจที่เรียกJNIว่าอนุญาตให้ส่งการโทรแบบดั้งเดิมผ่าน JRE เพื่อป้องกันการพกพาที่ไร้รอยต่อที่สมบูรณ์แบบสิ่งที่แฟน ๆ Java ต้องการเรียกว่า "เขียนครั้งเดียวทำงานได้ทุกที่"

ดังที่ได้กล่าวไว้ในความคิดเห็นวิธีการของ C ++ ต่อการพกพานั้นแตกต่างกัน ในอีกด้านหนึ่งมันเป็นภาษาที่รวบรวมและไบนารีเหล่านั้นมักจะเป็นแพลตฟอร์มที่เฉพาะเจาะจง ดังนั้น c ++ executables จะไม่สามารถพกพาได้ (ต่างจาก Java) ในทางกลับกันการย้ายคอมไพเลอร์บางครั้งก็เพียงพอแล้ว ชุมชนพบว่าการย้ายคอมไพเลอร์เช่นเดียวกับห้องสมุดหลักบางส่วนของภาษาซอร์สโค้ด (ไม่ใช่ไบนารี) สามารถพกพาได้

อย่างไรก็ตาม C ++ ใช้กันอย่างแพร่หลายในระบบที่สำคัญเช่นคอมไพเลอร์, เมล็ด, ระบบเรียลไทม์, ระบบฝังตัว, ... มีแง่มุม "C + +" ระดับต่ำที่ไม่สามารถมองข้ามได้เมื่อพูดถึงการพกพา


4
การพกพาไม่ได้เป็นตำนาน การพกพาที่สมบูรณ์แบบคือ
Malcolm

"เขาอยู่ที่ Java แตกต่างจาก C ++ มากโดยที่แต่ละแอปพลิเคชันคือ" เฉพาะเครื่อง "และไม่สามารถพอร์ตได้โดยไม่ต้องแก้ไขโค้ด" นั่นไม่จริงมันขึ้นอยู่กับการพึ่งพา หากคุณใช้ไลบรารีและไลบรารีมาตรฐานที่มีซอร์สแบบพกพาไปยังเป้าหมายของคุณคุณจะโค้ดหนึ่งครั้งและคอมไพล์ในแต่ละเป้าหมาย หากคุณเขียนโค้ดบางอย่างที่สามารถพอร์ตได้โดยไม่ต้องแก้ไขโค้ดใน C ++ สิ่งเดียวที่คุณอาจต้องแก้ไขคือสคริปต์สร้าง นั่นไม่เป็นความจริงแม้แต่น้อยในทุกกรณี
Klaim

อย่าลืมว่า C ++ สามารถใช้เป็นทั้งภาษาระดับสูงและระดับต่ำได้ มีการใช้รหัส C ++ จำนวนมากในโปรแกรมที่ int 32 บิตแตกต่างจาก int 64- บิตมาก แน่นอนว่าระดับสูงจะสามารถพกพาได้แน่นอน แต่มันไกลจากการวางนัยทั่วไป C ++
rahmu

ฉันคิดว่าคุณอาจเข้าใจผิดในสิ่งที่ฉันกำลังพูด: คุณสามารถเขียน C ++ ที่ถูกต้องด้วย int หรือชนิดมาตรฐานใด ๆ โดยไม่รบกวนสิ่งที่อยู่ในระดับต่ำ ลองดูที่ห้องสมุดเพิ่มส่วนใหญ่เป็นเพียงรหัสระดับสูงและนั่นเป็นจริงสำหรับโครงการโอเพ่นซอร์ส C ++ มากมาย คุณ "สามารถ" ไปในระดับต่ำและถ้าคุณทำคุณยังสามารถหลีกเลี่ยงรหัสเฉพาะใด ๆ จนกว่าคุณจะต้องใช้ API เฉพาะแพลตฟอร์ม แต่ถ้าคุณไม่ต้องการคุณสามารถเขียน C ++ ได้ทุกที่ การพึ่งพาแพลตฟอร์มสามารถหลีกเลี่ยงได้และมักจะอยู่ในรหัสห้องสมุด
Klaim

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

14

มันไม่ใช่แค่ภาษา - มันคือห้องสมุด

ทั้ง Java และ C ++ มีไลบรารีข้ามแพลตฟอร์ม Java ให้ชุดยิ่งขึ้น


2
Java ให้ชุดยิ่งขึ้นโดยค่าเริ่มต้น สามารถหาไลบรารี่เดียวกันสำหรับ C ++ ซึ่งไม่ได้เป็นส่วนหนึ่งของไลบรารี่มาตรฐานและคุณต้องตัดสินใจว่าจะใช้ไลบรารี่ตัวใด
Martin York

การเปรียบเทียบไลบรารีมาตรฐานของ Java กับจักรวาลของไลบรารีสำหรับ C ++ ไม่ใช่การเปรียบเทียบที่ถูกต้องจริงๆ Java มีชุดที่สมบูรณ์ยิ่งขึ้นไม่ว่าคุณจะเปรียบเทียบไลบรารีมาตรฐานของแต่ละไลบรารีหรือคุณกำลังเปรียบเทียบจักรวาลของไลบรารีของแต่ละชุด
Andy Thomas

3
ไม่เห็นด้วยอย่างแน่นอน มีอะไรในไลบรารี Java ที่พร้อมใช้งานแล้วโดย C ++ ในบางไลบรารี ฉันชอบความจริงที่ว่า Java มีทุกอย่างไว้ในที่เดียว แต่การบอกว่ามันสมบูรณ์ยิ่งขึ้นมันก็ไม่เป็นความจริง บางทีคำคุณศัพท์ที่คุณกำลังมองหาคือ `รวมเข้าด้วยกันมากขึ้น '
Martin York

1
+1 จะโหวตอีกครั้ง ฉันคิดว่าห้องสมุดเป็นปัจจัยที่สำคัญที่สุดในการพกพา หากคุณทำงานใน C / C ++ และทำสิ่งอื่นนอกเหนือจากการคำนวณแบบบริสุทธิ์จะมีไลบรารี (โดยเฉพาะอย่างยิ่งส่วนต่าง ๆ ของไลบรารีระบบ) ที่แตกต่างอย่างสิ้นเชิงระหว่าง Windows และ Unix และแตกต่างอย่างละเอียดระหว่าง Unix ที่แตกต่างกัน ทำให้พอร์ตยาก Java โดยทั่วไปไม่มีปัญหานั้น
Tom Anderson

1
@ Andy Thomas-Cramer: ฉันไม่ได้เปรียบเทียบอะไรเลย (คุณดูเหมือนจะเป็น) ฉันกำลังบอกว่าคำสั่งของคุณไม่ถูกต้อง ข้อดีอย่างหนึ่งของ Java คือ (และเราทุกคนชอบที่จะทำเช่นนั้น) คือไลบรารีมาตรฐานทั้งหมดในที่เดียว การบอกว่าพวกเขาร่ำรวยยิ่งขึ้นนั้นไม่ถูกต้อง
Martin York

7

ความแตกต่างคือ Java จะทำงานบนแพลตฟอร์มใด ๆโดยไม่ต้องรวบรวมใหม่ การมีคอมไพเลอร์ C ++ สำหรับแต่ละแพลตฟอร์มนั้นไม่เหมือนกันเลย


6

คำตอบทั้งหมดที่เริ่มต้นด้วย "ความแตกต่างคือ ... " หรืออะไรก็ตามที่คล้ายกันมากนั้นผิดปกติ (ขออภัย แต่นั่นคือชีวิต) มีความแตกต่างระหว่างสองอย่างจริงๆ

หนึ่ง (ที่ถูกกล่าวถึงมาก) คือโปรแกรม Java ที่คอมไพล์แล้วสามารถ (หรืออย่างน้อยควร) ที่จะใช้กับการติดตั้ง Java ได้ดังนั้นแม้หลังจากการคอมไพล์แล้วคุณยังสามารถย้ายโปรแกรม Java จากแพลตฟอร์มหนึ่งไปอีกแพลตฟอร์มหนึ่งโดยไม่ต้องคอมไพล์ใหม่ . C ++ (อย่างน้อยปกติ) ต้องการการรวบรวมใหม่สำหรับแต่ละแพลตฟอร์มเป้าหมาย

อีกอันหนึ่งคือ Java (อย่างน้อยก็พยายาม) รับรองว่า Java ที่เขียนอย่างถูกต้องทั้งหมดจะสามารถพกพาได้ อย่างน้อยในทางทฤษฎีคุณไม่ควรเขียนโค้ดใด ๆ ที่ไม่สามารถพกพาได้

C ++ ช่วยให้คุณทำบางสิ่งที่ไม่พกพาได้ มาตรฐาน C ++ มี "คำเตือน" เกี่ยวกับสิ่งต่างๆมากมายที่ไม่สามารถพกพาได้ (เช่นบอกคุณว่าคุณจะได้รับพฤติกรรมที่กำหนดไว้หรือพฤติกรรมที่ไม่ได้กำหนด) แต่ก็ไม่จำเป็นต้องหยุดคุณไม่ให้ทำ . ตัวอย่างเช่นหากคุณต้องการเขียนระบบปฏิบัติการสำหรับฮาร์ดแวร์ที่ใช้บัส PCI คุณอาจต้องอ่าน / เขียนหน่วยความจำการกำหนดค่า PCI เห็นได้ชัดว่าสิ่งนี้จะไม่สามารถพกพาไปยังระบบที่ไม่มีบัส PCI ได้ แต่ถ้าคุณเขียนระบบปฏิบัติการสำหรับฮาร์ดแวร์ที่มีบัส PCI มันจำเป็นมาก C ++ อนุญาตให้ใช้แม้ว่าจะไม่สามารถพกพาได้


C ++ ไม่รู้อะไรเกี่ยวกับบัส PCI และฮาร์ดแวร์
Nikko

แน่นอนมันไม่ได้เป็นสิ่งเฉพาะแพลตฟอร์มที่จะต้องรวมอยู่ในห้องสมุดเฉพาะแพลตฟอร์ม เช่นเดียวกับ Java สามารถมีไลบรารีเฉพาะแพลตฟอร์มถ้าจำเป็น
jwenting

1
@ นิกโก: มันไม่รู้อะไรเลยเกี่ยวกับมัน แต่มันช่วยให้คุณใช้สิ่งที่คุณรู้เกี่ยวกับมันได้
Jerry Coffin

@jwenting: ความแตกต่างคือการที่คุณสามารถเขียนไลบรารีเฉพาะแพลตฟอร์มใน C ++ แต่โดยทั่วไปคุณไม่สามารถเขียนพวกเขาใน Java
Jerry Coffin

6

คุณเข้าใจผิดสถานที่ โปรแกรม Javaนั้นพกพาได้มากเนื่องจาก JVM มีพฤติกรรมมาตรฐานที่รับประกันว่าจะเหมือนกัน โปรแกรม C ++ นั้นมีสภาพแวดล้อมที่ได้มาตรฐานน้อยกว่าใกล้เคียงกับฮาร์ดแวร์จริงดังนั้นโปรแกรมจำเป็นต้องสามารถจัดการรายละเอียดเฉพาะของแพลตฟอร์มที่หลากหลายเช่นขนาดของ int การจัดเรียงคำ ฯลฯ เป็นต้น

JVM นั้นไม่สามารถพกพาได้ มันเป็นภารกิจที่ต้องทำเพื่อพอร์ต JVM ประสิทธิภาพสูงไปยังแพลตฟอร์มอื่นหรือสถาปัตยกรรม CPU


+1 สำหรับประโยคสุดท้าย!
rahmu

2

ข้อแตกต่างคือโปรแกรม Java (ไม่ใช่ตัวย่อ) สามารถกระจายในรูปแบบที่สามารถเรียกใช้บนคอมพิวเตอร์ที่ติดตั้ง JVM ได้ แต่ C ++ จะกระจายตามปกติเป็นซอร์สโค้ดซึ่งเป็นผู้ใช้ที่ไม่เป็นมิตรหรือเป็นพวง ของไบนารีที่แตกต่างกันสำหรับแพลตฟอร์มที่แตกต่างกัน


ฮะ? มีคอมไพเลอร์ C ++ ที่กำหนดเป้าหมาย JVM และมีคอมไพเลอร์ Java ที่กำหนดเป้าหมายโค้ดเนทีฟ คุณสามารถอ้างถึงส่วนเฉพาะของข้อกำหนดภาษา C ++ ที่ระบุว่าโปรแกรม C ++ ต้องแจกจ่ายเป็นซอร์สโค้ดหรือไบนารีเฉพาะแพลตฟอร์มหรือไม่
Jörg W Mittag

ที่นั่นฉันได้แก้ไขคำตอบของฉันในการใช้ภาษาที่ชัดเจนน้อยลง
โคลิน

2

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

ตัวอย่างเช่นกำหนด

long thing1(int x) {
  return (x+1)-1L;
}
double thing2(int x, float y) {
  return x/y;
}

ค่าของthing1(2147483647)และthing2(1123456700,11234567.0f)จำเป็นต้องเป็น -2147483649L และ 99.9999923706054688 ตามลำดับแม้ว่าค่าที่ถูกต้องทางคณิตศาสตร์จะเป็น 2147483647L และ 100.0 และแม้ว่าในบางรหัสแพลตฟอร์มเพื่อสร้างผลลัพธ์ที่ไม่ถูกต้องเชิงตัวเลขจะช้ากว่ารหัสเพื่อสร้างผลลัพธ์ที่ไม่ถูกต้องเชิงตัวเลข ผลลัพธ์ (บนแพลตฟอร์ม 64- บิตบางส่วนบังคับให้มีการตัดคำสั่งหลัง (x + 1) จะต้องมีคำสั่งพิเศษและบนแพลตฟอร์ม 8x87 การบังคับค่า 1123456700 ให้ปัดเป็น a floatจะต้องมีคำสั่งพิเศษเมื่อเทียบกับการโหลด โดยตรงไปยังการลงทะเบียนที่มีความแม่นยำสูง)


1
ครั้งหนึ่งคำตอบใหม่สำหรับคำถามเก่าที่เพิ่มคุณค่า: Java มีข้อกำหนดทางคณิตศาสตร์ที่แม่นยำมากและแน่นอนว่าชนิดข้อมูลดั้งเดิมมีขนาดและความหมายเฉพาะเมื่อเปรียบเทียบกับ C ++ ไม่มีคำตอบอื่น ๆ ณ วันที่ที่กล่าวถึงนี้

@Snowman: คุณชอบตัวอย่างที่เลือกไว้อย่างไร โดยส่วนตัวถ้าฉันกำลังออกแบบภาษาฉันจะไม่ทำให้ทั้งสองตัวอย่างคืนค่าของ Java โดยไม่ต้องใช้ casting ที่แคบ(int)สำหรับ(x+1)subexpression ของตัวอย่างแรกในตัวอย่างแรกไปยังพารามิเตอร์floatตัวอย่างที่สองxแต่เห็นได้ชัดว่าฉันไม่ได้ออกแบบภาษา .
supercat

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

1

ปริมาณงานสำหรับเครื่องมือสนับสนุนนั้นคล้ายกันจริงความแตกต่างอยู่ที่อื่น เมื่อรวบรวมโปรแกรม C ++ สำหรับแพลตฟอร์มแล้วคุณต้องรวบรวมอีกครั้งหากคุณต้องการใช้ในแพลตฟอร์มอื่น อย่างไรก็ตามเมื่อคอมไพล์โปรแกรม Java แล้วคุณสามารถย้ายไปยังแพลตฟอร์มอื่นด้วยสภาพแวดล้อมรันไทม์โดยไม่ต้องคอมไพล์ใหม่


1

ตอบชื่อเรื่อง "ความสะดวกในการพกพาเป็นตำนานหรือไม่" แทนที่จะเป็น "ความสามารถในการพกพาที่ดีกว่า Java หรือ C ++" ฉันจะบอกได้ว่าการพกพาบางส่วนนั้นเป็นไปได้

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

และเฟรมเวิร์กเหล่านั้นรวมถึงไลบรารีฐานข้อมูลอินเตอร์เฟสแบบกราฟิก

ภาษาการเขียนโปรแกรมใดหรือกรอบการเขียนโปรแกรมใดที่สามารถพกพาได้มากกว่า

ขึ้นอยู่กับว่าแอพของคุณเป็นอย่างไร พยายามบรรลุ


1

สิ่งที่เป็น "คุณ" ไม่ได้เขียน JRE ที่คุณเขียนโค้ด Java ที่ทำงานบนใด ๆ JRE"คุณ" อย่าเขียนรหัส c ++ ซึ่งสามารถต้องมีการเปลี่ยนแปลงโดยคุณก่อนที่มันจะรวบรวมบนแพลตฟอร์มอื่น


0

หลายคนลืมหรือไม่คำนึงถึงความเป็นจริงของ Java เมื่อพวกเขาพูดว่า "มันพกพาได้ 100%" หรือวลีเช่นนั้น

บริษัท Corporations / Software สำคัญ ๆ ส่วนใหญ่นั้นมีการใช้งาน Java อย่างน้อย 1 ครั้งกับ JRE ที่เกี่ยวข้องในอดีตที่ผ่านมาและบางส่วนยังคงใช้งานได้เช่น Microsoft, IBM และ Apple เป็นต้นว่า Java ของพวกเขามีเวอร์ชั่นของตนเอง ความคิดและความคิดของตนเองเกี่ยวกับอุตสาหกรรมและภาษาดังกล่าว

เป็นอย่างไรสำหรับ "พกพา" JRE ทุกที่ที่คุณเลี้ยว

และนี่คือสิ่งที่ Sun / Oracle ไม่ได้ทำ

ตัวอย่างเกี่ยวกับสาเหตุที่โค้ด Java อยู่ไม่ไกลจาก C และ C ++ ในแง่ของความสะดวกในการพกพาคือ GUI และเซิร์ฟเวอร์กราฟิก, Apple มีการใช้งานกรอบมาตรฐาน GUI สำหรับ JRE ของตัวเองไม่ได้มาตรฐานเนื่องจากมีจำนวนมาก ปวดหัวและทำงานสองเท่าสำหรับทุกคนที่ต้องการสร้าง / พอร์ต GUI โดยใช้ Java สำหรับเครื่อง Apple และโดยพื้นฐานแล้วพวกเขาถูกบังคับให้จัดการกับ Quartz (ในแง่ของ "อำนาจ" และภาษาระดับสูง)

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

แน่นอนว่านี่เป็นเรื่องจริงถ้าคุณยอมรับสถานที่ของ Java ซึ่งหมายถึงเครื่องเสมือนที่มีการรวบรวมขยะซึ่งหมายความว่ามันใช้ทรัพยากรมากกว่าเมื่อเทียบกับภาษาท้องถิ่นหากคุณต้องการบีบ CPU สูงสุดหรือฟาร์มเซิร์ฟเวอร์ของคุณออกให้หมด อย่าคิดว่าคุณสามารถปรับใช้จาวาได้เว้นแต่ว่าคุณมีทรัพยากรเหลือน้อยมากหรือ บริษัท ของคุณมีขนาดเล็กมาก

ฉันยังต้องหาแอปพลิเคชั่น Java ที่ไม่สำคัญซึ่งมีเพียง 1 เวอร์ชันสำหรับแต่ละบรรทัดของโค้ดหรือการทำงาน (หรือที่รู้จักโดยไม่มีสิ่งใดที่แพลตฟอร์มเฉพาะ) และมันพกพาได้ 100% ในบรรดา JRE ที่สำคัญทั้งหมด

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