首頁  >  問答  >  主體

java - 今天开始用eclipse编写servlet程序,但是经常写着写着就变的很卡,最后强行关闭,又重启还是不行,为什么呢?

有时候会自己卡在那,有时候eclipse提示出现问题,要求我查看workspace.metadata.log文件,log文件提示的错误是:
!ENTRY org.eclipse.osgi 4 0 2016-11-05 15:17:10.371
!MESSAGE Error stopping the framework.
!STACK 0
java.lang.OutOfMemoryError: PermGen space


我在百度上查的java.lang.OutOfMemoryError解决方案是在tomcat配置里扩大内存,如图,红色部分是根据提示添加的:

还有的说在eclipse里修改Window/Perferences/General里的Startup and Shutdown,把打勾的都去掉。

我试了两种方法都不行,再次打开eclipse编程过一会还是会边卡,求大神指教,这是为什么啊?

迷茫迷茫2764 天前971

全部回覆(4)我來回復

  • 天蓬老师

    天蓬老师2017-04-18 10:21:04

    一 如下圖,你可以到ecplise的安裝路徑下面找到ecplise.ini選擇文字編輯器打開,查看框裡這些設定的參數,根據你自己的記憶體狀況設定


    二另外還可以攝者ecplise中你正在使用的jdk的虛擬內存
    找到eclispe 中window->preferences->Java->Installed JRE ,點擊右側的Edit 按鈕,在編輯界面中的“ Default VM Arguments 」選項中,填入下列數值即可。
    -Xms64m -Xmx128m

    三、修改Run Configurations

    在程式碼上右鍵,依序點選“Run As ”-> “Run Configurations ”,在Arguments 參數中的“VM arguments: ”中填入如下值即可。
    -Xms64m -Xmx128m

    最後,這些參數值並不是讓你照著填,結合自己機器的記憶體設定合理的值最好

    下面是官方說明
    堆(Heap)和非堆(Non-heap)內存
    按照官方的說法:「Java 虛擬機具有一個堆,堆是運行時資料區域,所有類別實例和數組的記憶體均從此處分配。可以看出JVM主要管理兩種類型的記憶體:堆和非堆。簡單來說堆就是Java程式碼可及的內存,是留給開發人員使用的;非堆就是JVM留給自己用的,所以方法區、JVM內部處理或優化所需的內存(如JIT編譯後的程式碼快取)、每個類別結構(如運行時常數池、欄位和方法資料)以及方法和建構方法的程式碼都在非堆記憶體中。
    堆記憶體分配
    JVM初始分配的記憶體由-Xms指定,預設為實體記憶體的1/64;JVM最大分配的記憶體由-Xmx指定,預設為實體記憶體的1/4。當預設空餘堆記憶體小於40%時,JVM就會增加堆直到-Xmx的最大限制;空餘堆記憶體大於70%時,JVM會減少堆直到 -Xms的最小限制。因此伺服器一般設定-Xms、-Xmx相等以避免每次GC 後調整堆的大小。
    非堆記憶體分配
    JVM使用-XX:PermSize設定非堆記憶體初始值,預設為實體記憶體的1/64;由XX:MaxPermSize設定最大非堆記憶體的大小,預設是實體記憶體的1/4。
    JVM記憶體限制(最大值)
    首先JVM記憶體限制於實際的最大實體記憶體(廢話!呵呵),假設物理記憶體無限大的話,JVM記憶體的最大值跟作業系統有很大的關係。簡單的說就32位元處理器雖然可控記憶體空間有4GB,但是具體的作業系統會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統下為1.5G-2G,Linux系統下為2G-3G),而64bit以上的處理器就不會有限制了。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:21:04

    • 加大內存/換SSD

    • 換電腦

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:21:04

    你把這些配置加到tomcat的JDK配置當中試試,截圖上傳不上,就是server>tomcat>JDK中的Optional Java VM arguments中

    回覆
    0
  • 阿神

    阿神2017-04-18 10:21:04

    簡單點,換用idea(不過配置要好)

    回覆
    0
  • 取消回覆