jvm中的堆和栈

转载 2015年11月17日 21:51:06

   jvm是基于堆栈的虚拟机,堆和栈都是java中用来存储数据的地方.
(1)堆的特点:

       每个java应用进程(一个main线程以及它的子线程)对应一个堆,堆的大小可以通过参数-xms,-xmx来设置。 java中所有通过new出来的对象和数组都存在堆中,可以为各线程共享,堆中的内存空间通过垃圾回收器进行回收。
(2)栈的特点:

       栈是线程私有的,栈的生命周期就是线程的生命周期,可以通过-Xss来分配每个线程的栈空间,如果某个线程的栈空间不足,系统会抛StackOverFlowError异常。栈中是以栈帧为单位进行维护的,java中没调用以方法就会创建一个栈帧,用于存储局部变量区,操作数,等,所以可以说,java中方法的调用过程,其实就是对栈的操作过程(分为压栈和出栈)。基本类型(如short,int...)和对象的引用的保存在栈中,由于这些数据都有已知的固定的大小,栈中的存取速度较快,栈还有一个特点,就是存在栈中的数据可以共享,而堆却不可以,共享的意思就是讲相同的数据可以共用同一内存块, 比如 :
int a=1; 
int b=1; 
上面过程建立了a和b两个引用,当执行b=1的时候,会先去栈中找是否存在1的值,如果存在,就不会开辟新的内存块给1了,而是直接使用之前的内存,把它的地址直接赋给b,所以a引用和b引用指向相同的内存地址,这也就不难解释a==b的道理了。 
还有String的情况, 比如: 
String c = "aaa"; 
String d = "aaa"; 
这里的c==d也是为true,也可用上面的原理来解释,就是说当以上面的方式来创建字符串的时候,jvm会将创建的字符串保存在栈中,并拥有的栈中共享的特点,所以c==d,但是通过new String("aaa")的方式的话就比较麻烦了,首先会在栈中寻找或者创建(不可能之间建过,就可公用)一个"aaa",然后用它来在堆中又新建(肯定开辟新的空间)一个字符串。

 

相关文章推荐

JVM的堆和栈以及GC算法的介绍

JVM就是java虚拟机,我们可以把它理解成一个操作系统,每个不同的平台都有不同的JVM,比如linux系统和windows系统,就是因为这个原因所以java程序就有了一个很突出的特性就是 跨平台性其...

JVM中的堆和栈

JVM 全名是Java Virtual Machine 它是负责跨平台的已编译的一小段代码,这里的平台包括硬件和操作系统。 JVM不认识java语言,它不知道java,它只解析特定格式的文件class...
  • zjcybfq
  • zjcybfq
  • 2015年05月05日 23:45
  • 315

什么是jvm?

说明:做java开发的几乎都知道jvm这个名词,但是由于jvm对实际的简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少有人能很好的去学习及理解什么是j...

JVM架构(006)_java堆和栈有什么区别

1、java堆和栈有什么区别 了解jvm内存管理看这里:jvm是如何管理内存的  在《jvm是如何管理内存的》这篇文章中,已经对PC寄存器(计数器 pc registers)、方法区(meth...

jvm 内存划分 栈区 堆区 方法区

这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有 比较大的帮助。 废话不想讲了.入主题: 先了解具体的概念: JAVA的JVM的内存可分为...

JVM 内存 (堆(heap)、栈(stack)和方法区(method) )

JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )

Java JVM 中 堆,栈,方法区 详解

一 jvm运行时数据区有哪些我们先来看一张图 JVM运行时数据区分类 1. JVM栈 (Java Virtual Machine Stacks) 2. 堆内存 (Heap Memory)...

jvm 堆、栈、方法区、程序计数器

最近在读周志明的《深入理解Java虚拟机:JVM高级特性与最佳实践》,从中学到了很多,有些人可能会问为什么我们要学习JVM,他有什么用?在这里我想说一下,并不是这本书是大家都推荐的说有用处,我们才去读...

JVM内存管理,堆、栈

VM运行时数据区域 JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途、创建和销毁时间。 JVM包括下列几个运行时数据区域: 1、程序计数器(Program Count...

jvm的堆,栈,方法区

这两天看了一下深入浅出JVM这本书,推荐给高级的java程序员去看,对你了解JAVA的底层和运行机制有 比较大的帮助。 废话不想讲了.入主题: 先了解具体的概念: JAVA的JVM的内存可分为...
  • qqq2830
  • qqq2830
  • 2016年03月24日 09:38
  • 275
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jvm中的堆和栈
举报原因:
原因补充:

(最多只允许输入30个字)