sách gpt4 ăn đã đi

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

In lại Tác giả: qq735679552 Thời gian cập nhật: 28-09-2022 22:32:09 27 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này về các vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

1. Phân tích hiệu suất tốc độ của heap và stack.

       Heap và stack là hai thành phần quan trọng trong mô hình bộ nhớ JVM. Tôi đã tóm tắt sự khác biệt giữa heap và stack từ lâu. Về cơ bản, chúng được hiểu từ các khía cạnh về nội dung lưu trữ, kích thước không gian lưu trữ và tốc độ lưu trữ. Tuy nhiên, Về tốc độ lưu trữ của đống và ngăn xếp, chỉ biết lưu trữ đống Tốc độ chậm và tốc độ lưu trữ của ngăn xếp nhanh Về lý do tại sao tốc độ truy cập của đống chậm hơn tốc độ truy cập của ngăn xếp, tôi cũng không tìm thấy nhiều thông tin chuyên sâu về vấn đề này. Internet, nhưng tôi không đồng ý với nhiều lý do. Dưới đây là một số lý do và kết hợp chúng với Phân tích của riêng tôi dựa trên sự hiểu biết của bạn, vui lòng sửa cho tôi nếu nó sai.

       1. Phân tích từ góc độ phân phối.

            Kích thước và vòng đời của ngăn xếp trong Java được xác định trong quá trình biên dịch (các bạn có thể tham khảo phần phân tích mô hình bộ nhớ JVM mà tôi đã viết trước đây. Cuối tuần này tôi sẽ viết blog về chiến lược gc và gc Collector trong loạt điểm kiến ​​thức này ) và vùng heap được phân bổ động trong thời gian chạy, việc này tốn rất nhiều thời gian, do đó, từ góc độ phân bổ, vùng heap chậm hơn so với ngăn xếp.

      2. Phân tích từ góc độ tiếp cận.

           Nhiều bài viết trên Internet nói rằng việc truy cập vào ngăn xếp chỉ mất một lần, trong khi truy cập vào heap cần hai lần để lấy địa chỉ và lần thứ hai để truy cập đối tượng dựa trên địa chỉ. quan điểm này. Chúng tôi biết rằng ngăn xếp máy ảo lưu trữ từng khung một. Mỗi khung ngăn xếp lưu trữ một số bảng biến cục bộ, toán hạng, liên kết động, địa chỉ trả về, v.v. Khi truy cập vào ngăn xếp, bạn có thể lấy được những dữ liệu này trong một lần truy cập. là hai cách chính để truy cập các đối tượng heap trong Java: truy cập thông qua các con trỏ và bộ điều khiển trực tiếp. Phương thức con trỏ trực tiếp có phần giống với địa chỉ đầu tiên của một mảng. Ưu điểm của phương pháp này so với xử lý là nhanh hơn, nhưng nhược điểm cũng rất rõ ràng: khi gc được thực hiện, địa chỉ sẽ thay đổi và gc rất thường xuyên. Một cách khác là tay cầm tương đương với người gác cửa của một cộng đồng. Khi bạn muốn tìm một cư dân nào đó trong cộng đồng này (cư dân này rất giàu có và có ý chí và sống ở các tầng và phòng khác nhau mỗi ngày), bạn phải làm vậy. Đầu tiên, hãy đến gặp người gác cửa. Người gác cửa sẽ cho bạn biết hôm nay người này ở tòa nhà và phòng nào, sau đó bạn có thể đi tìm anh ta trong căn phòng này. Bằng cách này, bạn cần phải đến thăm 2 lần (một lần với người gác cửa, sau đó tìm cư dân dựa trên người gác cửa). Điều này đương nhiên là chậm hơn, nhưng ưu điểm của phương pháp này là bạn sẽ luôn biết cư dân ở đâu thông qua người gác cửa, bất kể cư dân thay đổi như thế nào (các đồ vật sẽ di chuyển thường xuyên trong quá trình gc, dẫn đến thay đổi địa chỉ thường xuyên). Do đó, sự hiểu biết của tôi là: Nếu heap sử dụng phương thức con trỏ trực tiếp, sẽ có rất ít sự khác biệt so với góc độ truy cập. Tất nhiên, nếu nó sử dụng phương thức xử lý thì điều đó có ý nghĩa.

       3. Phân tích từ góc độ tỷ lệ trúng CPU.

           Chúng tôi biết rằng CPU có ba cấp độ bộ đệm. Bộ đệm cấp một là nhanh nhất và gần bằng tốc độ của CPU. Tuy nhiên, bộ đệm cấp một nhỏ hơn, bộ đệm cấp hai có tốc độ thứ hai và lớn hơn một chút. space. Bộ đệm cấp ba chậm hơn và có không gian lớn hơn và khi CPU đọc, nó sẽ đọc theo hàng. Ví dụ: máy 64 bit đọc 64 bit mỗi lần, tương đương với việc đọc 2 bit mỗi lần. Độ dài của kiểu int Mỗi khi một dữ liệu nhất định được đọc, dữ liệu liền kề có thể được đọc cùng nhau và ngăn xếp chiếm một không gian nhỏ, do đó tốc độ truy cập CPU sẽ cao hơn và tốc độ loại bỏ sẽ thấp hơn. Heap chiếm nhiều không gian. Nói một cách tương đối, tỷ lệ trúng cho mỗi lần đọc thấp hơn và tỷ lệ loại bỏ cao hơn. Do đó, từ góc độ này, ngăn xếp được ghi nhanh hơn so với heap.

       Trên đây là sự khác biệt giữa tốc độ lưu trữ của heap và stack. Tiếp theo, hãy phân tích so sánh tốc độ giữa các phương thức tĩnh và các phương thức không tĩnh.

       2. Thực hiện phân tích hiệu suất trên các phương thức tĩnh và phương thức không tĩnh (với điều kiện đối tượng đã được tạo).

       Trên thực tế, trực giác trước đây của tôi là tốc độ truy cập của các phương thức tĩnh phải nhanh hơn tốc độ truy cập của các phương thức không tĩnh, bởi vì các phương thức tĩnh được lưu trong vùng phương thức khi lớp được tải và có thể được gọi trực tiếp khi chạy, trong khi không- Các phương thức tĩnh cần khởi tạo đối tượng trước khi gọi, khi đó câu hỏi sẽ xuất hiện: Nếu đối tượng đã được khởi tạo, phương thức nào nhanh hơn để gọi phương thức tĩnh hoặc phương thức không tĩnh? Lúc đầu, tôi nghĩ rằng các phương thức không tĩnh sẽ nhanh hơn, vì các phương thức không tĩnh được lưu trữ trong ngăn xếp máy ảo và tốc độ truy cập của ngăn xếp tương đối nhanh, nhưng điều này không nghiêm ngặt, vì vậy hãy thực hiện một thử nghiệm.

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

     Hình ảnh dưới đây là kết quả của nhiều lần chạy:

     Đầu tiên:

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

     Lần thứ hai:

   。

     Lần thứ ba:

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

     Lần thứ tư:

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

    Có thể thấy, trong số kết quả lặp 10.000 lần, tốc độ thực hiện của phương thức non-static nhanh hơn phương thức tĩnh 3/4 lần. Hãy thực hiện thêm 100.000 vòng nữa và xem kết quả:

    Đầu tiên:

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

   Lần thứ hai:

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

    Lần thứ ba:

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

   Lần thứ tư:

Vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA

    Điều này càng rõ ràng hơn, do đó xét về kết quả thử nghiệm, nếu đối tượng đã được tạo thì tốc độ truy cập của các phương thức không tĩnh sẽ nhanh hơn tốc độ truy cập của các phương thức tĩnh. Nhưng về lý do, những lý do trên vẫn có vẻ hơi gượng ép và vẫn chưa rõ ràng lắm. Nếu bạn có bất kỳ câu hỏi nào, xin vui lòng để lại tin nhắn cho tôi và tôi sẽ trả lời bạn kịp thời. Tôi cũng xin cảm ơn mọi người đã ủng hộ trang web của tôi! .

Liên kết gốc: https://www.cnblogs.com/be-thinking/p/9400761.html.

Cuối cùng, bài viết này về các vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA kết thúc ở đây. Nếu bạn muốn biết thêm về các vấn đề tốc độ của heap, stack, phương thức tĩnh và phương thức không tĩnh trong JAVA, Về nội dung, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

27 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress