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

Java virtual machine (JVM) เป็นเครื่องเสมือนที่สามารถรัน Java bytecode ได้ เป็นส่วนประกอบการเรียกใช้โค้ดของแพลตฟอร์ม Java

2
การพึ่งพา Java "สีเทา" คืออะไร?
นักพัฒนา JVM ที่นี่ เมื่อเร็ว ๆ นี้ฉันเคยเห็น banter ในห้องแชทของ IRC และแม้แต่ในสำนักงานของฉันเองเกี่ยวกับห้องสมุด Java ที่เรียกว่า " แรเงา " บริบทของการใช้งานจะเป็นดังนี้: " เช่นนั้นมอบไคลเอ็นต์" ที่แรเงา "สำหรับ XYZ " ตัวอย่างที่สมบูรณ์แบบคือปัญหาของ Jira สำหรับ HBase : " เผยแพร่สิ่งประดิษฐ์ของลูกค้าที่มีการขึ้นต่อกันของสีเทา " ดังนั้นฉันถาม: JAR สีเทาหมายความว่าอะไร "แรเงา"?
74 java  libraries  jvm 

4
ประโยชน์ในการพัฒนาของการใช้ Docker เป็นโมฆะเมื่อใช้ Java เมื่อเปรียบเทียบกับภาษาอื่น ๆ ใกล้กับระบบปฏิบัติการ Unix หรือไม่?
ฉันมีเพื่อนที่พูดว่า: นักเทียบท่าเป็นที่น่าอัศจรรย์ คุณสามารถใช้มันเพื่อทำซ้ำการผลิตและนิสัยใจคอของมันทั้งหมดในเครื่องท้องถิ่นของคุณ จากนั้นคุณสามารถปรับใช้อินสแตนซ์ที่ตรงผ่านทุกขั้นตอนการทำงานการแสดงละครซุปเปอร์รวดเร็ว ตอนนี้สิ่งนี้จะเป็นจริงถ้านักพัฒนาเขียน Ruby, PHP หรือGo - ที่ซึ่งมีการเชื่อมโยงแบบไบนารีทิศทางไปยังระบบปฏิบัติการ แต่เมื่อใช้Java - มีเลเยอร์เสมือนระหว่างระบบปฏิบัติการและภาษาอยู่แล้วทำให้การดำเนินงานสอดคล้องกันโดยไม่คำนึงถึงระบบปฏิบัติการพื้นฐาน ในกรณีนี้ประโยชน์ของการรัน Docker สำหรับนักพัฒนาในท้องถิ่นเพื่อทำซ้ำสภาพแวดล้อมการผลิตจะถูกทำให้ไร้ผล (เทียบกับ Ruby, PHP หรือ Go) ฉันเปิดให้มีการอภิปรายเกี่ยวกับเรื่องนี้และกระตือรือร้นที่จะได้ยินมุมมองที่ไม่เห็นด้วย (มีหลักฐาน) ประโยชน์ในการพัฒนาของการใช้ Docker เป็นโมฆะเมื่อใช้ Java เมื่อเปรียบเทียบกับภาษาอื่น ๆ ใกล้กับระบบปฏิบัติการ Unix หรือไม่?
53 java  deployment  jvm  docker 

8
การใช้การแปลงซอร์สโค้ดเป็น Java bytecode คืออะไร
ถ้าใครต้องการ JVM ที่แตกต่างกันสำหรับสถาปัตยกรรมที่แตกต่างกันฉันไม่สามารถเข้าใจได้ว่าอะไรคือเหตุผลเบื้องหลังการแนะนำแนวคิดนี้ ในภาษาอื่นเราต้องการคอมไพเลอร์ที่แตกต่างกันสำหรับเครื่องที่แตกต่างกัน แต่ใน Java เราต้องการ JVM ที่แตกต่างกันดังนั้นอะไรคือตรรกะที่อยู่เบื้องหลังการนำเสนอแนวคิดของ JVM หรือขั้นตอนพิเศษนี้?
37 java  jvm  bytecode 

4
JVM มีข้อ จำกัด อะไรในการเพิ่มประสิทธิภาพการโทรแบบหาง
Clojure ไม่ได้ดำเนินการเพิ่มประสิทธิภาพการโทรหางในตัวเอง: recurเมื่อคุณมีหางฟังก์ชันเวียนและคุณต้องการที่จะมีมันที่ดีที่สุดที่คุณจะต้องใช้รูปแบบพิเศษ ในทำนองเดียวกันถ้าคุณมีสองฟังก์ชั่น recursive trampolineร่วมกันคุณสามารถเพิ่มประสิทธิภาพพวกเขาเท่านั้นโดยใช้ คอมไพเลอร์ Scala สามารถดำเนินการ TCO สำหรับฟังก์ชันแบบเรียกซ้ำ แต่ไม่ใช่สำหรับสองฟังก์ชันแบบเรียกซ้ำ เมื่อใดก็ตามที่ฉันได้อ่านเกี่ยวกับข้อ จำกัด เหล่านี้พวกเขามักจะกำหนดข้อ จำกัด ที่แท้จริงให้กับตัวแบบ JVM ฉันไม่รู้อะไรเลยเกี่ยวกับคอมไพเลอร์ แต่มันทำให้ฉันสับสนเล็กน้อย Programming Scalaผมขอใช้ตัวอย่างจาก ฟังก์ชั่นที่นี่ def approximate(guess: Double): Double = if (isGoodEnough(guess)) guess else approximate(improve(guess)) ถูกแปลเป็น 0: aload_0 1: astore_3 2: aload_0 3: dload_1 4: invokevirtual #24; //Method isGoodEnough:(D)Z 7: ifeq 10: …
36 scala  clojure  jvm  tail-call 

2
StackOverflowError ใน Java หรือไม่?
ฉันเคยคิดว่ามันไม่ได้ แต่เมื่อวานนี้ฉันต้องทำ มันเป็นแอพพลิเคชั่นที่ใช้Akka (ระบบการทำงานของนักแสดงสำหรับ JVM) เพื่อประมวลผลงานอะซิงโครนัส หนึ่งในนักแสดงทำการจัดการไฟล์ PDF บางส่วนและเนื่องจากห้องสมุดมีรถบั๊กมันก็ตายด้วยStackOverflowErrorทุก ๆ คราว ด้านที่สองคือ Akka ได้รับการกำหนดค่าให้ปิดระบบนักแสดงทั้งหมดหากมีข้อผิดพลาดร้ายแรง JVM (เช่น StackOverflowError) ประเด็นที่สามคือระบบนักแสดงนี้ถูกฝังอยู่ภายในเว็บแอพ (สำหรับ WTF-ish, มรดก, เหตุผล) ดังนั้นเมื่อระบบนักแสดงปิดตัวลงแอปพลิเคชันเว็บจะไม่ ผลกระทบสุทธิคือในStackOverflowErrorแอปพลิเคชันการประมวลผลงานของเรากลายเป็นเพียงเว็บแอปที่ว่างเปล่า การแก้ไขอย่างรวดเร็วฉันต้องจับStackOverflowErrorการโยนเพื่อให้กลุ่มเธรดของระบบนักแสดงไม่ฉีกขาด นี่ทำให้ฉันคิดว่าบางทีมันก็โอเคที่จะจับข้อผิดพลาดโดยเฉพาะอย่างยิ่งในบริบทเช่นนี้? เมื่อใดที่มีเธรดพูลกำลังประมวลผลงานตามอำเภอใจ? ซึ่งแตกต่างจากOutOfMemoryErrorฉันไม่สามารถจินตนาการว่าStackOverflowErrorสามารถออกจากโปรแกรมที่อยู่ในสถานะที่ไม่สอดคล้องกัน สแต็กจะถูกล้างหลังจากข้อผิดพลาดดังกล่าวดังนั้นการคำนวณจึงสามารถดำเนินต่อได้ตามปกติ แต่บางทีฉันอาจพลาดสิ่งสำคัญไป นอกจากนี้ขอให้สังเกตว่าฉันทั้งหมดเพื่อแก้ไขข้อผิดพลาดในสถานที่แรก (ตามความเป็นจริงฉันได้แก้ไข SOE ในแอพเดียวกันนี้เมื่อไม่กี่วันที่ผ่านมา) แต่ฉันไม่รู้จริง ๆ ว่าเมื่อใด สถานการณ์แบบนี้อาจเกิดขึ้นได้ เหตุใดจึงเป็นการดีกว่าที่จะเริ่มกระบวนการ JVM ใหม่แทนการจับStackOverflowErrorทำเครื่องหมายว่างานนั้นล้มเหลวและดำเนินธุรกิจของฉันต่อไป มีเหตุผลที่น่าสนใจไหมที่จะไม่ใช้ SOE? ยกเว้น "แนวปฏิบัติที่ดีที่สุด" ซึ่งเป็นคำที่คลุมเครือซึ่งไม่ได้บอกอะไรเลย

5
อะไรทำให้ JVM มีความหลากหลายในการรองรับภาษา JVM มากมาย
JVM รองรับภาษาอื่น ๆ อีกมากมายนอกเหนือจาก Java เช่นGroovy,Clojure,Scalaetc ซึ่งเป็นภาษาที่ใช้งานได้แตกต่างจาก Java (ฉันหมายถึงJava ก่อนเวอร์ชัน 8ที่Lambda'sไม่รองรับ) ที่ไม่รองรับความสามารถในการทำงานในระดับสูงสิ่งที่ทำให้ JVM อเนกประสงค์นั้น สามารถรองรับทั้ง Object Oriented และ Function Functional ได้หรือไม่

2
ใบอนุญาต Java และ JVM
ใบอนุญาต Java อนุญาตให้ บริษัท อื่นสร้างภาษา Java ของตนเองหรือใช้อย่างถูกต้องหรือไม่ คำถามเดียวกันเกี่ยวกับ JVM ฉันได้ยินเกี่ยวกับซุนฟ้อง Microsoft เกี่ยวกับการเปลี่ยนการใช้งานจาวาในเวอร์ชัน. NET และ Java สำหรับ Google Android แต่ฉันไม่สามารถเข้าใจแนวคิดทั้งหมดเป็นจำนวนทั้งสิ้น
17 java  licensing  jvm 

1
Java สามารถปรับปรุงได้อย่างไรเพื่อไม่ต้องทำการลบประเภทอีกต่อไป?
การสอน Java อย่างเป็นทางการเกี่ยวกับข้อมูลทั่วไปอธิบายประเภทการลบและสาเหตุที่เพิ่มเข้าในคอมไพเลอร์: เมื่อประเภททั่วไปเป็นอินสแตนซ์คอมไพเลอร์แปลประเภทเหล่านั้นโดยใช้เทคนิคที่เรียกว่าประเภทการลบ - กระบวนการที่คอมไพเลอร์ลบข้อมูลทั้งหมดที่เกี่ยวข้องกับพารามิเตอร์ประเภทและอาร์กิวเมนต์ประเภทภายในชั้นเรียนหรือวิธีการ การลบประเภททำให้แอปพลิเคชัน Java ที่ใช้ generics เพื่อรักษาความเข้ากันได้ของไบนารีกับไลบรารี Java และแอปพลิเคชันที่สร้างขึ้นก่อนหน้า generics สิ่งนี้น่าจะเป็นวิธีปฏิบัติหรืออาจเป็นวิธีที่เจ็บปวดน้อยที่สุด อย่างไรก็ตามตอนนี้ข้อมูลทั่วไปได้รับการสนับสนุนอย่างกว้างขวางทั่วอุตสาหกรรมสิ่งที่สามารถทำได้เพื่อให้เราไม่จำเป็นต้องลบประเภท? มันเป็นไปได้โดยไม่จำเป็นต้องแบ่งความเข้ากันได้ย้อนหลังหรือถ้าเป็นไปได้มันเป็นจริงหรือไม่? คำแถลงสุดท้ายในข้อความข้างต้นกลายเป็นการอ้างอิงตนเองหรือไม่? นั่นคือ: "การลบประเภทช่วยให้แอปพลิเคชัน Java ที่ใช้ generics เพื่อรักษาความเข้ากันได้ของไบนารีกับไลบรารี Java และแอปพลิเคชันที่สร้างขึ้นด้วยเวอร์ชัน Java ที่ดำเนินการลบประเภท"
16 java  jvm 

4
เข้าใกล้ Java / JVM internals [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันตั้งโปรแกรมใน Java เป็นเวลาประมาณ 8 ปีและฉันรู้ภาษาค่อนข้างดีในฐานะนักพัฒนา แต่เป้าหมายของฉันคือการเพิ่มความรู้เกี่ยวกับ internals ให้ลึกซึ้งยิ่งขึ้น ฉันเรียนหลักสูตรระดับปริญญาตรีในสาขาการออกแบบ PL แต่พวกเขาเป็นภาพรวมทางวิชาการที่กว้างมาก (ใน Scheme, IIRC) มีคนแนะนำเส้นทางให้เริ่มเจาะลึกรายละเอียดได้ไหม โดยเฉพาะมีหัวข้อพิเศษ (เช่นการเก็บขยะ) ที่อาจเข้าถึงได้ง่ายกว่าหรือเป็นจุดเริ่มต้นที่ดี มีหนังสือระดับสูงที่ดีเกี่ยวกับ internals ของ JVM และการออกแบบภาษาการเขียนโปรแกรม Java หรือไม่? แนวทางปัจจุบันของฉันจะเริ่มต้นด้วยข้อมูลจำเพาะ JVMและการวิจัยตามต้องการ
15 java  books  jvm 

3
เมื่อฉันสร้างวัตถุจะมีการจัดสรรหน่วยความจำใหม่ให้กับทั้งเขตข้อมูลอินสแตนซ์และวิธีการหรือเฉพาะกับเขตข้อมูลอินสแตนซ์
ฉันมีคลาสต่อไปนี้ class Student{ int rollNumber; int marks; public void setResult(int rollNumber, int marks){ this.rollNumber=rollNumber; this.marks=marks; } public void displayResult(){ System.out.println("Roll Number= "+this.rollNumber+" Marks= "+this.marks); } } ตอนนี้ฉันสร้างวัตถุสองประเภทที่เป็นนักเรียนดังนี้ Student s1=new Student(); Student s2=new Student(); ตอนนี้มีการจัดสรรหน่วยความจำสองชุดที่แตกต่างกันสำหรับฟิลด์อินสแตนซ์ ตอนนี้คำถามของฉันคือการจัดสรรหน่วยความจำสำหรับวิธีการ ( setResultและdisplayResult) สองครั้งหรือหนึ่งครั้ง? โปรดดูรูปต่อไปนี้และคุณสามารถช่วยฉันบอกว่ารูปใดให้ข้อมูลที่ถูกต้อง

1
การจับคู่รูปแบบใน Clojure vs Scala
อะไรคือความแตกต่างที่สำคัญระหว่างการจับคู่รูปแบบในสองภาษานี้ ฉันไม่ได้อ้างถึงไวยากรณ์ แต่ความสามารถรายละเอียดการใช้งานขอบเขตการใช้งานและความจำเป็น แอปพลิเคชัน Scala (เช่น. ยกและเล่น) พูดอย่างภาคภูมิใจเกี่ยวกับรูปแบบภาษาที่ตรงกับความกล้าหาญ ในทางกลับกัน Clojure มีห้องสมุด core.match และสร้างขึ้นในการทำลายซึ่งดูเหมือนว่ามีประสิทธิภาพ * หมายเหตุ: เหตุผลที่ฉันได้รับแรงบันดาลใจในการถามคำถามนี้เป็นเพราะการโพสต์บล็อกที่ฉันเห็นซึ่งโปรแกรมเมอร์ในการทดลองสร้างล่ามเสียงกระเพื่อมโดยใช้ทั้ง Scala และ Clojure เขาบอกว่าการแข่งขัน Clojure แตกหลังจากช่วงระยะเวลาหนึ่ง แต่ไม่สามารถอธิบายได้ว่าทำไม แต่ฉันอยากรู้จริงๆ คุณสามารถค้นหาโพสต์นี้ได้ที่นี่: http://www.janvsmachine.net/2013/09/writing-simple-lisp-interpreter-in-clojure.html

4
Java Virtual Machine เรียกใช้โค้ดที่เขียนในภาษาอื่น ๆ ได้อย่างไร?
เนื่องจาก Java 1.6 JVM สามารถเรียกใช้ภาษาการเขียนโปรแกรมจำนวนมากแทนที่จะเป็นจาวา ฉันเข้าใจแนวคิดว่า Java ทำงานบน Java VM ได้อย่างไร แต่ไม่ใช่ว่าภาษาอื่น ๆ จะสามารถทำงานกับมันได้เช่นกัน สำหรับฉันมันดูเหมือนเวทมนตร์สีดำ คุณมีบทความใดบ้างที่ชี้ให้ฉันทราบเพื่อที่ฉันจะได้เข้าใจว่าสิ่งเหล่านี้เข้ากันได้อย่างไร
12 jvm 

5
JVM และ Java ของ WORA แตกต่างจากภาษาระดับสูงอื่น ๆ อย่างไร
ในโลกของ Java เรามักจะพูดถึง JVM และเมื่อ Java เป็นรุ่นใหม่มันมีคุณสมบัตินักฆ่าที่คาดว่าจะเป็นของ "Write Once, Run Anywhere" จากวิธีที่ผู้คนพูดคุยและเขียนสิ่งนี้ดูเหมือนจะแตกต่างจากวิธีการทำงานของ Python แต่ฉันไม่ได้ตระหนักถึงวิธีการที่รหัส Python ที่ฉันเขียนจะทำงานแตกต่างกันในเครื่องอื่น (แม้ว่าฉันจะไม่ได้เขียน Python มาก) แล้วฉันจะพลาดอะไรไป? JVM แตกต่างจาก Python interpreter อย่างไร? มีวิธีที่ Python ขาดความเป็นอิสระของแพลตฟอร์ม Java หรือไม่? หรือนี่เป็นเพียงความแตกต่างทางวัฒนธรรม?

2
JVM จัดการข้อยกเว้นที่เกิดจากวิธีหลักอย่างไร
ฉันเข้าใจข้อยกเว้นขว้างพวกมันจัดการพวกมันและแพร่กระจายมันไปยังวิธีที่ต่ำกว่าใน call stack (เช่นthrows) สิ่งที่ฉันไม่เข้าใจคือ: public static void main(String[] args) throws Exception { ... } ตอนนี้ฉันคิดว่าในกรณีที่mainมีการโยนExceptionJVM จัดการ (ถูกต้อง?) หากเป็นเช่นนั้นคำถามของฉันคือ: JVM จัดการข้อยกเว้นที่ส่งออกมาmainอย่างไร มันทำอะไร?
10 java  exceptions  jvm 

3
การอัพเกรด JVM เล็กน้อยปลอดภัยแค่ไหน?
ฉันทำงานกับ JVM มาหลายปีและฉันไม่ค่อยประสบกับความผิดพลาดของ JVM ... จนกระทั่งเมื่อประมาณ 6 เดือนที่แล้ว ตั้งแต่นั้นฉันพบปัญหา JVM ประมาณ 5 ครั้งเกิดจากข้อบกพร่อง JVM 2 ข้อ โซลูชันจาก Oracle นั้นเหมือนกันเสมอ ... อัพเกรด การอัปเกรดแต่ละครั้งจะไปและกลับจากการปล่อยจุด ... คือและคำแนะนำล่าสุดของ Oracle (หลังจากยืนยันว่าพวกเขาแก้ไขข้อผิดพลาดแล้ว) คือการอัปเกรดจาก 1.6u20 เป็น 1.6u26 ฉันควรอัพเกรด JVM รุ่นรองอย่างไร นี่เป็นงานใหญ่ที่จำเป็นต้องใช้การทดสอบการถดถอยจำนวนมากหรือเป็นการอัพเกรดที่ปลอดภัยที่ควรรับหรือไม่
10 java  oracle  jvm  upgrade 

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