JVM中堆和栈的描述

JVM specification对JVM内存的描述:

 

主要包括两个子系统和两个组件: Class loader(类装载器) 子系统,Execution engine(执行引擎) 子系统;Runtime data area (运行时数据区域)组件, Native interface(本地接口)组件 
     Class loader
子系统的作用 :根据给定的全限定名类名( java.lang.Object)来装载class文件的内容到 Runtime data area中的method area(方法区域)Javsa程序员可以extends java.lang.ClassLoader类来写自己的Class loader 
      Execution engine
子系统的作用 :执行classes中的指令。任何JVM specification实现(JDK)的核心是Execution engine 换句话说:Sun JDK IBMJDK好坏主要取决于他们各自实现Execution engine的好坏。每个运行中的线程都有一个Execution engine的实例。

  Native interface组件 :与native libraries交互,是其它编程语言交互的接口。

     Runtime data area组件 : 这个组件就是JVM中的内存。

     Runtime data area 主要包括五个部分:Heap (), Method Area(方法区域), Java Stack(java的栈), Program Counter(程序计数器), Native method stack(本地方法栈)Heap(堆) Method Area是被所有线程的共享使用的;而Java stack, Program counter Native method stack是以线程为粒度的,每个线程独自拥有。

 

Java

Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文。栈空间随着线程的终止而释放。

Java

Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等。

 

举例说明

简单的说其实 栈(stack) 就是存放变量引用的一个地方, 堆(heap) 就是存放实际对象的地方. 也就是比如: int i = 7;  这个 其实是存在栈里边的。内容为 i = 7。

 Apple app = new Apple();  这个 app 是在栈里边的 他对应的是一个内存地址也在堆里边, 而这个内存地址对应的是堆里边存放 Apple 实例的地址。

String s = "Hello World!";  这个其实是存在另外一块静态代码区。

 

总体来说:  栈--主要存放引用 和基本数据类型。

            堆--用来存放 new 出来的对象实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值