java 堆栈

堆栈(stack)。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些 内存。这是一种快速有效的分配存储方法,仅次于寄存器。

创建程序时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些JAVA数据存储在堆栈中——特别是对象引用,但是JAVA对象不存储其 中

堆(heap)。一种通用性的内存池(也存在于RAM中),用于存放所有的JAVA对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区 域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当你需要创建一个对象的时候,只需要new写一行简单的代码,当执行这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储需要更多的时间。

http://www.cnblogs.com/xiohao/p/4296088.html

时间: 2024-10-05 23:48:31

java 堆栈的相关文章

java堆栈

java堆栈 2008-11-25 12:04 19929人阅读 评论(17) 收藏 举报 javastringintegerimmutable编译器primitive Java栈与堆 ----对这两个概念的不明好久,终于找到一篇好文,拿来共享 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必

Java堆栈详解 .

1. Java中堆栈(stack)和堆(heap) (1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不 允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求.栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的

java 堆栈的区别

java有两种内存管理:堆 和 栈. 栈中保存的是基本数据类型(如:int.short.char.long等)与对象句柄. 栈中保存的内存在变量超出作用域后会被自动释放. 栈的存取速度比堆快,数据可以共享,但是不灵活. 举个例子: int i = 5: int j = 5; String s1 = "abc"; String s2 = "abc"; 其中 i 和 j ,s1 和 s2在栈中保存的数据是共享的.也就是说改变过其中一个变量的值,另外一个变量的值也会被相应

java 堆栈分析

再次,研究了一个下午的jhat好jmap.从一开始惊呆.懵懂于那样大量而无聊乏味的数据,到现在有那么一点点收货.赶紧记录下来.没办法,悟性太低... C:\Users\Administrator>jps 11896 12528 Jps C:\Users\Administrator>jps 11896 19016 Jps 5060 HttpServer C:\Users\Administrator>jmap -dump:file=testJmapa 5060 Dumping heap to

java 堆栈分析4

jprofiler ,又是一款好工具... —— 不过显然,我觉得有了jvisualvm就足够了,难道它会比jvisualvm还强大很多!?? 什么时候需要它呢?它有什么特别好用的地方吗? 带来什么方便之处吗? http://www.cnblogs.com/langtianya/p/3172180.html java 堆栈分析4

java 堆栈分析2

有了mat.同时我们发现Java有提供jvisualvm, jvisualvm是一个不错的工具: heap dump . thread dump. cpu/mem profile 无所不能. 不过观察发现,对同一个java程序,其导出的hrof格式数据跟jmap导出的bin格式数据有所不同,比如String类的count,size等.应该是底层实现不同吧 同时惊人的发现jconsole竟然也可以导出hrof格式的的堆栈信息(参考http://blog.csdn.net/moneyice/arti

java 堆栈分析3

很多方式,比如jconsole.jvisualvm,或者jstack -as 这样的形式, 都可以看到实时的java堆栈的变化: eden suvirried0 suvirried1 old perganget major gc minor gc 线程 等等的变化, 但是,问题是,有了这些信息,我们能从中发现什么有价值的东西呢? 总结 虽然电脑中,java程序运行很快,但是我们总是可以获取其一举一动,任何一个细节.其运行中的蛛丝马迹,我们都可以看得清清楚楚,这就现代科技的发达!! java 堆栈

【Java集合的详细研究9】Java堆栈(stack)的使用方法

栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,从而可以达到保护栈顶元素以下的其他元素."先进后出"或"后进先出"就是栈的一大特点,先进栈的元素总是要等到后进栈的元素出栈以后才能出栈.递归就是利用到了系统栈,暂时保存临时结果,对临时结果进行保护. 栈是存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.

java 堆栈内存分析详解

计算机术语里面堆和栈代表不同的存储结构:stack-栈:heap-堆 所以java虚拟机(JVM)中堆和栈是两种内存 堆.栈对比 对比点 堆 栈 JVM中的功能 内存数据区 内存指令区 动静态 运行时数据区,动态地分配内存大小   存储数据 对象实例(保存对象实例,实际上是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在stack中).对象实例在heap中分配好以后,需要在stack中保存一个4字节的heap内存地址,用来定位该对象实例在heap中的

如何理解JAVA堆栈

Java把内存划分成两种:一种是栈内存,一种是堆内存. 堆栈的概念逻辑上的,在完全符合Java规范的Java处理器面世之前,所有Java虚拟机提供的内容都是由软件模拟出来的. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用. 堆内存用来存放由new创建的对象和数组. 在堆中分配的内存,由Java虚拟机的自