sách gpt4 ăn đã đi

Việc sử dụng bộ nhớ JVM, một JVM có luồng hay bốn JVM cho bốn ứng dụng của tôi?

In lại Tác giả: Walker 123 Thời gian cập nhật: 29-11-2023 08:06:15 28 4
mua khóa gpt4 giày nike

Tôi hiện có bốn ứng dụng java khác nhau chạy từ các tệp jar được khởi chạy bởi các tệp .bat nằm trong thư mục starup của menu bắt đầu Windows XP Embedded. Tôi cũng đã khởi động Firefox. Bây giờ Firefox hoặc một trong các ứng dụng Java vừa đóng. Tôi đoán là tôi không có đủ bộ nhớ (Win XP Embedded with 512 MB RAM).

Bốn ứng dụng Java này là,

  • Phần phụ trợ HMI (được xây dựng bằng khung Spark "micro")
  • Một ứng dụng ghi nhật ký ghi dữ liệu từ PLC vào cơ sở dữ liệu H2. Điều này được thực hiện bằng cách sử dụng Hẹn giờ/Timertask
  • máy chủ cơ sở dữ liệu h2
  • Lập lịch thực hiện các công việc định kỳ. Điều này được thực hiện bằng cách sử dụng Quartz.

Do đó, mỗi ứng dụng Java này đều được khởi chạy trong JVM của riêng chúng (theo như tôi biết). Câu hỏi đầu tiên là: Tôi có thể giảm mức sử dụng bộ nhớ của bốn ứng dụng này bằng cách chạy chúng trong một JVM thay vì bốn JVM hay không. Nếu vậy, tôi có nên sử dụng nó để khởi chạy mọi ứng dụng không?

Ngoài ra, điều cơ bản đầu tiên tôi nên làm để giảm dung lượng bộ nhớ là gì, vì tôi là người mới làm quen với lập trình Java "thực sự". Nhóm kết nối H2, tái sử dụng các đối tượng, còn gì nữa? Jconsole và thứ Xmx đó?

Có lẽ là ngây thơ, nhưng tôi thực sự đã nghĩ, này, GC sẽ giải quyết "mọi thứ" cho tôi. Có lẽ không? =)

biên tập: Phần phụ trợ HMI sử dụng máy chủ web Jetty. Ngoài ra, tất cả mã đều là mã nguồn mở hoặc do tôi xây dựng.

Chỉnh sửa 2: Khung web:http://www.sparkjava.com/ .Tôi đang phân phối phương tiện tĩnh thông qua khung thay vì thông qua Jetty (jetty-webapp-7.3). Đây có thể là một cái gì đó để cải thiện việc sử dụng bộ nhớ? Các thành phần khác của ứng dụng web HMI là công cụ mẫu freemarker, gson, servlet-api-3, slf4j và log4j.

Có thể thử khởi động trình ghi nhật ký và lập lịch trong một chuỗi khi khởi động ứng dụng web. Sau đó chỉ cần chạy hai JVM. Một cho ứng dụng web và một cho máy chủ cơ sở dữ liệu.

Tôi đang sử dụng Java 7, đây là hệ thống 32 bit. Hy vọng nó sẽ hữu ích cho việc sử dụng sản xuất (nếu không tôi sẽ gặp rắc rối).

câu trả lời hay nhất

Việc chuyển từ một tập hợp các quy trình riêng biệt sang một quy trình duy nhất thường không chỉ là vấn đề "bật công tắc". Chúng là những kiến ​​trúc khác nhau về cơ bản:

  • thuộc vềquá trình tương tựCác luồng chia sẻ một số tài nguyên nhất định (không gian bộ nhớ, phần xử lý tệp, v.v.) mà chúng có thể "nhìn thấy"; chúng có thể giao tiếp với nhau và chia sẻ dữ liệu một cách rất "nhẹ nhàng";
  • quá trình khác nhauTheo một cách khác, các đơn vị "biệt lập" hơn: chúng không thể chỉ "nhìn trộm" bộ nhớ, bộ xử lý tệp, v.v. của nhau mà thay vào đó phải giao tiếp với nhau theo cách "nặng hơn" (ví dụ: qua ổ cắm hoặc hệ điều hành các tiện ích khác được cung cấp).

Bây giờ, mức độ dễ dàng mà bạn có thể chuyển từ mô hình này sang mô hình khác và hiệu suất mà nó mang lại cho bạn thực sự phụ thuộc vào chức năng của các thành phần cụ thể và cách chúng tương tác với nhau. Tôi không quen với một số thành phần mà bạn đã đề cập, nhưng từ mô tả của bạn, có vẻ như về cơ bản bạn có một loạt "hộp đen" được kết nối với nhau mà bạn sẽ không thể tái kiến ​​trúc nhiều.

Do đó, tôi khuyên bạn nên xem tài liệu về các thành phần khác nhau để xem liệu chúng có cho phép bạn chỉ định kích thước VM (hoặc "kích thước heap") khi khởi động hay không, sau đó cố gắng giảm các thành phần xuống mức tối thiểu mà chúng cần. (Quy trình ghi nhật ký của bạn có thể không cần hàng trăm megabyte...)

Về nguyên tắc, Windows không nên "tắt một tiến trình do không đủ bộ nhớ". Nếu nó cần trao đổi các bit của vùng heap JVM vào và ra khỏi bộ nhớ ảo [*] thì nó có thể bắt đầu ồn ào như địa ngục. Nhưng thực tế nó không nên tắt quá trình này. Mặt khác, nếu một ứng dụng Java nhất định gặp phải OutOfMemoryError khi cố gắng phân bổ bộ nhớ từ vùng heap của nó, thì nó có thể quyết định tắt (hoặc tắt như hành vi mặc định, tùy thuộc vào việc xử lý ngoại lệ của nó). Nhật ký từ các thành phần khác nhau cho biết điều gì đã xảy ra?

[*] Không giống như các ứng dụng gốc, các ứng dụng Java không xử lý tốt bộ nhớ ảo, bởi vì đối với Java, bộ nhớ của nó là một "đống" duy nhất mà nó thực sự mong đợi được phân trang mọi lúc. Bạn nên tránh phân bổ tổng kích thước vùng nhớ heap cho một JVM gần bằng hoặc lớn hơn dung lượng bộ nhớ vật lý trong máy.

Về việc sử dụng bộ nhớ java - JVM, một JVM có luồng hay bốn JVM cho bốn ứng dụng của tôi? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11003167/

28 4 0
Walker 123
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