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