Tôi sẽ tham gia cuộc thi battlecode của MIT. Những người tham gia viết các chương trình điều khiển robot chiến đấu với nhau. Bắt là robot của bạn bị hạn chế để thực hiện một số tiền nhất định của bytecode trong một lượt (năm ngoái là 10000 mỗi lượt). Bây giờ, một vòng lặp đơn giản nhưCách đếm số bytecode được thực hiện trong java
(int i=0; i<100; i++){
// do nothing
}
sử dụng, theo phần mềm của họ, khoảng 400 bytecode (có lẽ là một cái gì đó giống như (2 bytecode cho incrementing i cộng với 2 bytecode để kiểm tra nếu tôi < 100) * 100 = 400 bytecode) vì vậy chúng tôi phải viết mã rất chặt chẽ. Do đó, khi tôi thử một số thuật toán điều hướng khác nhau, điều quan trọng là tôi có thể tìm ra mã bytecode mà tôi đang sử dụng - làm cách nào tôi có thể thực hiện điều này?
(Có thể - họ làm điều đó, tôi chỉ không chắc chắn như thế nào! Ngoài ra, họ phải dừng JIT đi vào chơi bằng cách nào đó. Tôi biết rằng mỗi robot được chạy trong một Chủ đề riêng biệt, vì vậy tôi ' m chắc chắn câu trả lời liên quan đến một số loại chủ đề thủ đoạn gian trá tôi không biết về)
Nếu bạn đang được đo bằng số lượng lệnh được thực thi, có thể bạn sẽ muốn viết bytecode bằng tay. Trình biên dịch Java dịch một cách mù quáng nguồn của bạn thành bytecode mà không tối ưu hóa, có nghĩa là nó có rất nhiều lệnh dư thừa. Thông thường đây không phải là vấn đề vì VM tối ưu hóa chúng đi, nhưng nó sẽ làm tăng số lượng lệnh của bạn. Bạn có thể làm tốt hơn rất nhiều bằng cách viết bytecode trực tiếp. – Antimony