簡體   English   中英

Java Swing應用程序凍結

[英]Java Swing application freezes out

我們有一個Java應用程序,它很大,需要太多內存,盡管我使用Xm標志設置了初始和最大內存,但有時會凍結,並且在1-2分鍾后會出現OutOfMemoryError (如果幸運的話)。

如果發生這種情況,我們需要重新啟動應用程序。

我們通過僅運行命令行的本機c應用程序運行該程序。

問題

  1. 如果我沒有設置Xmx標志怎么辦?
  2. 這是否意味着無限的內存使用?
  3. 我如何知道應用程序是用C還是Java凍結的?

如果我沒有設置Xmx標志怎么辦?

然后,JVM默認將應​​用程序的內存大小設置為(通常為適度)。

這是否意味着無限的內存使用?

沒有。

我如何知道應用程序是用C還是Java凍結的?

修復內存泄漏1

請注意,我回答的問題使用的是“發布”,而不是“實現”。 經過仔細考慮,我認為答案應該完全相同。 “釋放(內存)”或“意識到(存在問題)”都無法真正解決問題。 解決實際問題(內存泄漏)的任何一種方法都更好。


作為旁白。 我不認為問題出在C代碼中,但是一個簡單的測試(從命令行啟動應用程序)應該可以揭示這兩種方法。 我認為這個問題是Java代碼的原因OutOfMemoryError是由(大概)全功能的JVM檢測。

如果是C app。 使用了JVM為其本身或應用程序保留的內存空間 我猜想錯誤可能會大不相同,可能是由於以下原因: JVM internal error..

1.修復內存泄漏

其他貢獻者還提供了一系列好的建議,我將在這里重新討論。

  • @ChristianKullmann通過強調內存分析的重要性開始了它。
  • @KlasLindbäck隨后在評論中提供了一些出色的資源。
    • Java堆轉儲
      “發現內存泄漏的一種方法是分析堆轉儲。有多種方法來獲得堆轉儲(不包括第三方工具)。”
    • 分析Java虛擬機堆內存轉儲的提示和技巧
      “內存轉儲是JVM在任何給定時間分析內存內容的非常有用的功能,但是內存轉儲的使用需要一定的經驗,在這篇文章中,我將與您分享一些我從中學到的技巧和竅門。年,所以希望它們對您也有用。”
  • @mKorbel解決了一些典型的問題:
    *“如果有close()全部,則在代碼中搜索:
    • JDBC,
    • FileIO,
    • 插座,
    • 等等,在最后的方塊中,那么您可能會想過多地進行工程改造” *

使用C本機代碼運行應用程序並不意味着您可以通過JVM參數來控制整個內存的使用。 嘗試為系統運行內存監視(例如,在Linux上使用shift + m對TOP進行內存使用排序),或者更好地為內存配置應用程序。

運行應用程序后嘗試獲取內存轉儲(那里有一些性能分析工具,大多數IDE也提供某些功能)來檢查Java對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM