2010-06-17 35 views
7

Tôi chịu trách nhiệm duy trì một ứng dụng dựa trên JSP, chạy trên IBM WebSphere 6.1 (IBM J9 JVM). Tất cả các trang JSP có tham chiếu bao gồm tĩnh và trong tệp này bao gồm một số phương thức Java tĩnh được khai báo. Chúng được bao gồm trong tất cả các trang JSP để cung cấp một "truy cập dễ dàng" với các phương thức tĩnh tiện ích đó. Tôi biết rằng đây là một cách rất tồi tệ để làm việc, và tôi đang làm việc để thay đổi điều này. Nhưng, chỉ vì tò mò, và để hỗ trợ nỗ lực của tôi trong việc thay đổi điều này, tôi tự hỏi làm thế nào những phương thức tĩnh "trùng lặp" này được tối ưu hóa bởi trình biên dịch JIT JVM.Mã Java "sao chép" được tối ưu hóa bởi trình biên dịch JIT JVM như thế nào?

  • Chúng được tối ưu hóa riêng biệt ngay cả khi có chữ ký giống hệt nhau?
  • Trình biên dịch JVM JIT có nhìn thấy các phương thức này giống hệt nhau cung cấp mã JIT'ed "thống nhất" không?
+0

Bạn có thể làm mới suy nghĩ của tôi và cho tôi biết cú pháp của 'static include' là gì? – OscarRyz

+1

Nó bao gồm việc sử dụng chỉ thị JSP (<% @ page include = "includeFile.inc"%>). Nội dung của "includeFile.inc" được bao gồm tĩnh trong mã JSP tại thời gian biên dịch. Một bao gồm động có thể được thực hiện bằng cách sử dụng một thẻ JSP (), nơi bạn có thể tham chiếu một URL và nội dung được bao gồm trong thời gian chạy. Sử dụng thẻ, bạn cũng có thể chọn thực hiện bao gồm tĩnh. –

+0

+1 để được hỗ trợ. Tôi đã chính xác nơi bạn đang ở. Sự khác biệt duy nhất, trong dự án mà tôi đã kế thừa là các phương thức 'static' này được cắt và dán vào mọi trang JSP. –

Trả lời

11

Mỗi trang JSP được biên dịch thành một lớp duy nhất và do đó mã được bao gồm cũng sẽ được biên dịch thành các lớp riêng biệt. JIT sẽ không hợp nhất các bản sao mã khác nhau thành một.

Để tránh điều này, bạn có thể đặt mã được nhập vào một lớp Java thực và nhập vào trong JSP. Sau đó, sẽ không có bản sao, vì bạn đang sử dụng lại cùng một lớp.

0

Bạn có thể sử dụng hàng nhập tĩnh từ một lớp duy nhất: <% @ page import = "static foo. *"%>.

Sau đó, bạn không còn có tất cả trùng lặp đó nữa. Và khác với việc nhập khẩu, bạn sẽ không cần phải chạm vào aything khác.

3

@ mdma là câu trả lời đúng cho các JVM hiện tại, nhưng cần phải đủ điều kiện theo một vài khía cạnh.

  1. Các JIT trong các JVM tương lai có thể hỗ trợ tối ưu hóa tích cực để giảm bộ nhớ của mã gốc.

  2. Flipside là trừ khi bạn có hàng nghìn JSP riêng biệt, cơ hội là chi phí của một vài phương pháp tĩnh cho mỗi lớp JSP sẽ không tạo ra nhiều khác biệt cho dấu chân bộ nhớ của webapp của bạn.

Các vấn đề liên quan