2011-07-03 25 views
16

Tôi đã làm việc trên một dự án Java trong năm. Mã của tôi đã hoạt động tốt trong nhiều tháng. Một vài ngày trước, tôi đã nâng cấp Java SDK lên phiên bản mới nhất 1.6.0_26 trên máy Mac của tôi (Snow Leopard 10.6.8). Sau khi nâng cấp, một cái gì đó rất lạ xảy ra. Khi tôi chạy một số các lớp học, tôi nhận được lỗi này:Truy cập bộ nhớ không hợp lệ của vị trí trong Java

truy cập bộ nhớ không hợp lệ của vị trí 0x202 rip = 0x202

Nhưng, nếu tôi chạy chúng với -Xint (giải thích) họ làm việc, chậm nhưng công việc khỏe. Tôi nhận được vấn đề đó trong các lớp học mà tôi sử dụng các toán tử bitwise (bitboards cho trò chơi Othello). Tôi không thể đặt bất kỳ mã ở đây bởi vì tôi không nhận được một lỗi, ngoại lệ hoặc một cái gì đó tương tự. Tôi chỉ nhận được thông điệp khó chịu đó.

Mã bình thường không chạy mà không có -Xint nhưng nó hoạt động với nó? Tôi nên làm gì?

Cảm ơn trước

+1

Rất lạ. Đây có phải là ngoại lệ không? Lỗi biên dịch? Thứ gì khác? Có thêm văn bản nào trong thông báo lỗi không? Nó có cho biết số dòng không?Chương trình có tiếp tục chạy hay không? Điều đó có xảy ra mỗi khi bạn chạy mã của mình mà không có -Xint không? Bạn đang sử dụng Swing cho GUI của bạn? Có tiềm năng nào cho vấn đề tương tranh không? –

+2

Không được hiển thị dưới dạng ngoại lệ, chỉ là một tin nhắn. Nó biên dịch tốt. Đó là thông điệp duy nhất, đôi khi nó cho thấy một địa chỉ bộ nhớ khác nhau, nhưng chỉ cùng một thông điệp. Chương trình ngừng chạy. Tôi không sử dụng Swing, nhưng tôi đang sử dụng các chủ đề. Nó có thể là một vấn đề tương tranh, nhưng tại sao nó không hoạt động khi chạy như được diễn giải? Đó là phần khó chịu. –

+3

Trông giống như một lỗi trong VM. Cố gắng tách biệt vấn đề bằng cách cắt chương trình của bạn (loại bỏ những gì bạn nghĩ là không cần thiết - nếu nó không xảy ra lần nữa, hoàn tác và thử với một phần khác. Nếu nó vẫn xảy ra, lặp lại). Sau đó gửi lỗi cho bất kỳ ai đã tạo ra JRE của bạn. –

Trả lời

4

Khi JVM bắt đầu bị rơi như vậy, đó là dấu hiệu cho thấy có điều gì đó đã phá vỡ mô hình thực thi của JVM.

Ứng dụng của bạn có bao gồm bất kỳ mã gốc nào không? Nó có sử dụng bất kỳ thư viện của bên thứ ba nào với các thành phần mã nguồn gốc không? Nếu không đúng, thì có khả năng đây là lỗi trong cổng Apple của JVM. Nó có thể là một lỗi trình biên dịch JIT, hoặc một lỗi trong một số thư viện mã nguồn gốc của JVM.

Bạn có thể làm gì với một lỗi như vậy?

Không nhiều.

  • Giảm đơn đăng ký của bạn bằng cách cắt từng bước một cho đến khi bạn có một testcase nhỏ thể hiện sự cố.
  • Dựa trên testcase, hãy xem có một số cách thực nghiệm để tránh sự cố không.
  • Gửi báo cáo lỗi cho Apple bằng testcase.
+0

Không, ứng dụng của tôi không bao gồm bất kỳ mã gốc nào và tôi không sử dụng bất kỳ thư viện nào của bên thứ ba. Tôi sẽ làm theo đề xuất của bạn, hãy xem tôi mất bao nhiêu thời gian để tìm lỗi. Cảm ơn! –

0

Đồng thời xác minh rằng bạn đang tạo GUI trên the event dispatch thread và không bao giờ cập nhật thành phần GUI từ bất kỳ chuỗi nào khác.

Lỗi liên quan nổi tiếng là khó tái tạo, nhưng thay đổi liên quan đến thời gian thay đổi là khêu gợi.

4

Tôi vừa tình cờ gặp tình huống này và hóa ra nó có liên quan đến một đoạn mã đang tuần tự hóa một đối tượng JSON với tham chiếu tuần hoàn cho chính nó. Tôi đã xóa chu trình và lỗi đã biến mất. Tôi nghi ngờ điều này liên quan đến lỗi tràn bộ nhớ hiện được xử lý khác nhau bởi các JVM mới hơn trên Mac OSX. Trong trường hợp này, tôi đã chạy Mac OSX 10.7.

Đối với đầy đủ các lỗi tôi đã nhận được là:

Invalid access of stack red zone 0x10e586d30 rip=0x10daabba6 
Bus error: 10 

Và:

Invalid memory access of location 0x10b655890 rip=0x10a8baba6 
Segmentation fault: 11 
+0

tôi đã có một vấn đề tương tự bằng cách sử dụng jackson. giải quyết vấn đề của tôi bằng cách sử dụng @JsonIgnore – Yevgeniy

0

Vui lòng kiểm tra nếu /etc/hosts trống và xác minh rằng nó bao gồm các cấu hình này:

127.0.0.1  localhost 
255.255.255.255 broadcasthost 
::1    localhost 
fe80::1%lo0  localhost 
Các vấn đề liên quan