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。