- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 glassfish 服务器上部署了一个 Web 应用程序,它只包含一堆 JAX-RS REST 服务和通过 JPA 处理的数据库。我用于部署的 WAR 文件大约为 2MB,而且它的流量非常小(只有几个测试请求)。出于好奇,我运行了一个 jmap 来查看内存使用情况,我得到了这个
using thread-local object allocation.
Parallel GC with 2 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 536870912 (512.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 17592186044415 MB
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 21757952 (20.75MB)
MaxPermSize = 201326592 (192.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 99090432 (94.5MB)
used = 36256552 (34.576942443847656MB)
free = 62833880 (59.923057556152344MB)
36.589357083436674% used
From Space:
capacity = 38797312 (37.0MB)
used = 13067872 (12.462493896484375MB)
free = 25729440 (24.537506103515625MB)
33.68241593644426% used
To Space:
capacity = 37748736 (36.0MB)
used = 0 (0.0MB)
free = 37748736 (36.0MB)
0.0% used
PS Old Generation
capacity = 70254592 (67.0MB)
used = 59577728 (56.8177490234375MB)
free = 10676864 (10.1822509765625MB)
84.80261048274254% used
PS Perm Generation
capacity = 135266304 (129.0MB)
used = 88929544 (84.80982208251953MB)
free = 46336760 (44.19017791748047MB)
65.74404812598414% used
看到 Perm Gen 为这么小的应用程序占用大约 84MB 的内存,我感到非常惊讶。当我重新启动服务器时,这个数字下降了(之前大约是 100MB,这看起来已经很奇怪了,因为我读到 perm gen 永远不会被垃圾收集,所以它怎么会下降呢?)。我的疑问是:用这么小的应用程序获得如此高的数字是否正常?在过去的几周里,我实际上部署和重新部署了该应用程序很多次,这可能是因为这个吗?该应用程序运行完美,所以我没有特别的问题需要解决,我只是想知道这是否会在未来造成问题。即使是 Eden 空间的数字在我看来也很大,34MB 用于目前只有一个用户的应用程序,数据库是空的,这基本上没有做任何相关的事情!
编辑:我现在取消部署应用程序并重新启动服务器(现在在不同的 pid 下运行)。令我惊讶的是,我运行了另一个 jmap,我得到了非常相似的 perm gen 数字(比如使用了 70MB)。有没有可能这只是与 glassfish 有关,与我的应用无关?
câu trả lời hay nhất
Perm Gen 的一个问题是静态的东西。静态从 Perm Gen 分配,但直到容器(Glassfish、Tomcat 等)重新启动后才会释放。
如果静态指向另一个类(即使这个类不是静态的),那么另一个类也永远不会被释放。如果在没有重启容器的情况下重启应用程序,则不会释放该类的内存,并且会为应用程序的新实例分配该类的另一个实例。
许多类都有指向其他类的静态指针。您可以尝试消除代码中的问题,但许多 Java 类都存在此问题,因此它可能超出您的控制范围。
这是关于该主题的优秀帖子:Classloader Leaks .
对 Glassfish 评论的回应:
是的,这可能是由于 Glassfish。每个类(class)都分配给Perm Gen,所以类(class)多就意味着Perm Gen很多。你的类(class)虽然小,但站在巨人的肩膀上。
关于java - 与应用程序大小相比巨大的 Perm Gen,这正常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27651899/
Tôi đang làm việc thông qua labrepl và tôi thấy một số mã tuân theo mẫu này: ;; Pattern (apply #(apply f %&) coll) ;;
Tôi chưa bao giờ gửi ứng dụng lên cửa hàng ứng dụng nhưng tôi sẽ làm như vậy trong tương lai gần. Cho đến nay, tôi cảm thấy thoải mái khi thiết kế cho iPhone hơn là iPad. Tôi hiểu rằng bằng cách đặt ứng dụng TRẢ TIỀN phổ biến trên App Store, khách hàng có thể thanh toán một lần để sử dụng
Tôi có một ứng dụng xuất bản trên Facebook bằng các ứng dụng Facebook khác nhau (2 AppID khác nhau) và hiển thị ứng dụng đó là "qua iPhone"/"qua iPad". Khi ứng dụng Facebook
Tôi có một yêu cầu là chúng tôi phải chạy một trang web trong ứng dụng iOS Webview bằng cách lưu tệp nguồn trang web trong ứng dụng iOS cục bộ. Angular yêu cầu máy chủ để chạy ứng dụng, nhưng vì chúng tôi lưu tệp cục bộ nên chúng tôi không thể
Vì vậy, tôi có một ứng dụng khách một trang. Luồng thông thường: Ứng dụng -> Máy chủ OAuth2 -> Ứng dụng Chúng tôi có máy chủ OAuth2 của riêng mình để mọi người có thể đăng nhập vào ứng dụng và nhận access_t được liên kết với thực thể người dùng
Giả sử tôi đã cài đặt ứng dụng Android A trên thiết bị của người dùng, ứng dụng của tôi có AppWidget nơi chúng tôi có thể cho phép các nhà phát triển Android khác đăng quảng cáo quảng bá ứng dụng của họ trên cơ sở chi phí mỗi lần cài đặt. Vì vậy
Có một ví dụ trong Bí mật của Ninja Ninja cung cấp đoạn mã sau để vượt qua hàm Math.min() của JavaScript, hàm này yêu cầu một danh sách có độ dài thay đổi. Ví dụ:
Khi tôi truyền một mảng và một đối tượng cho hàm.apply() tương ứng, tôi nhận được o/p NaN, nhưng khi tôi truyền một đối tượng và một mảng, tôi nhận được một số. Tại sao điều này xảy ra? Vì mảng cũng được coi là đối tượng nên tại sao tôi không thể sử dụng nó
CFSDN nhấn mạnh vào nguồn mở để tạo ra giá trị và chúng tôi cam kết xây dựng một 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 Ứng dụng Chuyển đổi ASP Chức năng Thời gian Greenwich DateDiff() được thu thập và biên soạn bởi CFSDN. tác giả, nếu bạn
Tôi đang chuyển một danh sách tới bản đồ và muốn trả về một đối tượng data.frame có tên đã hợp nhất. Ví dụ: thư viện(tidyverse) thư viện(broom) mtcars %>% spl
Tôi có một câu hỏi rất cơ bản nhưng tôi không biết cách triển khai nó: Tôi có một khung dữ liệu trả về trong đó các giá trị trả về của từng công cụ được sắp xếp theo hàng: tmp<-as.data.frame(t(data.frame (a=rnorm(250,0,1)
Tôi đang sử dụng ứng dụng FB của mình để tạo nhóm và mời người dùng vào nhóm ứng dụng của mình và mọi thứ đều hoạt động tốt trong lần đầu tiên. Khi tôi cố gắng tạo một nhóm khác, tôi gặp lỗi sau: {"(OAuthException - #4009) (#4009) Khi có nhiều người dùng hơn
Chúng tôi đang phát triển một ứng dụng con tương tự như ứng dụng Talking Ben. Nó chứa một số lượng lớn các chuỗi hình ảnh JPEG cho hoạt ảnh tương tác. Vấn đề là hình ảnh động chơi tốt trên iPad Air nhưng lại bị chậm hoặc lag trên iPad 2
Tôi đã theo dõi Clojure được một thời gian và một số tính năng của nó rất thú vị (cấu trúc dữ liệu liên tục, phương thức chức năng, trạng thái bất biến). Tuy nhiên, vì tôi vẫn đang học nên tôi muốn hiểu cách áp dụng nó trong các tình huống thực tế, chứng minh lợi ích của nó, sau đó phát triển và áp dụng nó cho các vấn đề phức tạp hơn. Ngay lập tức,
Tôi đã phát triển một ứng dụng chỉ bằng tiếng Na Uy. Ứng dụng không sử dụng bản địa hóa vì nó được cho là chỉ được hiển thị bằng một ngôn ngữ (tiếng Na Uy). Tuy nhiên, tôi đã đặt "Bản địa hóa vùng phát triển gốc" thành "không" trong tệp Info.plist. Tôi cũng sử dụng
Sau khi đọc câu trả lời của Anthony cho câu hỏi về trình phân tích cú pháp liên quan đến phong cách, tôi đang cố gắng thuyết phục bản thân rằng việc viết một trình phân tích cú pháp nguyên khối vẫn có thể khá nhỏ gọn. Vì vậy, thay vì tham khảo::
Có điều gì tương tự như sapply trong thư viện đa lõi không? Hay tôi phải unlist(mclapply(..)) để đạt được điều này? Nếu nó không tồn tại: lý do là gì? Cảm ơn trước và chúng tôi xin lỗi nếu đây là một câu hỏi ngu ngốc
Tôi muốn kết quả bật lên trong cửa sổ để chúng dễ nhìn và tìm thấy hơn (ví dụ: chúng không bị mất khi bảng điều khiển tiếp tục cuộn). Một cách là sử dụng sink() và file.show(). Ví dụ: y <- rnorm(100); x <- r
Tôi có Bộ điều khiển mvc mùa xuân như hiển thị bên dưới @RequestMapping(value="/new", Method=RequestMethod.POST) public Stri
Tôi đang đọc StructMap về việc tiêm phụ thuộc (tiêm), đầu tiên có hai phần để khởi tạo bản đồ, giao diện của loại lớp cụ thể và phần còn lại chỉ là khởi tạo (yêu cầu một thể hiện). Phần đầu tiên yêu cầu cấu hình và thiết lập, được thực hiện trong Bo
Tôi là một lập trình viên xuất sắc, rất giỏi!