jvm分爲: java
{ 受到GC管理(線程共享) c++
}{爲每一個線程私有空間 網絡
} jvm
設置堆最大空間256MB(按需分配), 初始空間50MB spa
java -Xmx256M -Xms50M // 代碼中查看: Runtime.getRuntime().maxMemory() 操作系統
設置線程最大的棧空間,128K, 決定java嵌套調用的最大層次 線程
(說明:java每嵌套調用一個方法就會向java棧中壓入一個棧幀①。調用的層次越多棧內存就消耗的越多。當棧內存已經沒法支付方法的調用時拋出StackOverflowError) 代理
java -Xss128K 對象
設置方法區的初始與最大使用空間分別爲5MB和64MB 內存
java -XX:PermSize=5M -XX:MaxPermSize=64M //jdk6 , jdk7 設置
(說明:分配越大的空間,就能夠加載越多的類。動態代理可能會建立大量並加載大量的類。
在jdk8中的設置: java -XX:MaxMetaspaceSize64M。在jdk中若是不設置大小,虛擬機可能會耗盡全部的系統內存,由於它用的是直接內存。)
①棧幀:{
1.局部變量表:用於存在方法的參數與局部變量,僅僅是變量名,其引用指向堆中
2.操做數據棧:保存計算過程的中間結果,一個臨時的存儲空間
3.幀數據區: 常量池解析,方法的返回結果,與異常的處理
}