linux程序設計:堆和棧的區別
棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其 操作方式類似于數據結構中的棧。
主體不同 堆:是計算機科學中一類特殊的數據結構的統稱。堆通常是一個可以被看做一棵完全二叉樹的數組對象。棧:又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。
棧:棧是高地址向低地址擴展的連續內存,棧的大小一般是2M;堆:堆是低地址向高地址擴展的不連續內存,堆的大小與計算機有效的虛擬內存有關系。
(1)管理方式不同。棧由操作系統自動分配釋放,無需我們手動控制;堆的申請和釋放工作由程序員控制,容易產生內存泄漏;(2)空間大小不同。每個進程擁有的棧的大小要遠遠小于堆的大小。
堆和棧的區別在于兩點:生命周期 性能 第一點才是我們需要著重考慮的。由于棧的特性,如果你需要一個具有比其所在的上下文更長的生命周期的變量,只能在堆上創建它。
linuxjvm設置線程棧大小linuxjvm設置
Linux安裝JDK步驟先從網上下載jdk(jdk-1_5_0_02-linux-i58rpm),推薦SUN的官方網站,下載后放在/home目錄中,當然其它地方也行。
-Xss128k:設置每個線程的堆棧大小。JDK0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。
不顯式設置-Xss或-XX:ThreadStackSize時,在Linux x64上ThreadStackSize的默認值就是1024KB,給Java線程創建棧會用這個參數指定的大小。這是前一塊代碼的意思。
建議你在linux底下編譯so加-g選項,然后gdbjava,進去以后可以bc函數名來設置斷點,單步調試。或者生成core文件,再gdbjavacore看看崩潰堆棧上下文。推薦第一種方式。
年輕代的設置很關鍵 JVM中最大堆大小有三方面限制:相關操作系統的數據模型(32bit還是64bit)限制:系統的可用虛擬內存限制;系統的可用物理內存限制。32位系統下,一般限制在5G-2G;64位操作系統對內存沒有限制。
BTW:剛上線的新服務,不知道該設置多大的內存的時候,可以先多設置一點內存,然后根據GC之后的情況來進行分析。初始JVM內存參數設置為: Xmx=2G Xms=2G xmn=1G 使用jstat 查看當前的GC情況。
linux系統最大堆棧內存
1、你好。執行命令ulimit -a,查看棧大小的限制。通過使用 ulimit -s 數字 進行設置。
2、-Xms:初始堆大小。只要啟動,就占用的堆大小。-Xmx:最大堆大小。java.lang.OutOfMemoryError:Java heap這個錯誤可以通過配置-Xms和-Xmx參數來設置。-Xss:棧大小分配。
3、內存是Linux內核所管理的最重要的資源之一。內存管理系統是操作系統中最為重要的部分,因為系統的物理內存總是少于系統所需要的內存數量。虛擬內存就是為了克服這個矛盾而采用的策略。
4、比較合理和常用的設置是:最低可設置512M或是1024M,最高設置為物理內存5倍左右,也就是1024*8*5=12288M。