zoukankan      html  css  js  c++  java
  • Java Heap and Stack

    Heap(堆)(FIFO):

      heap是一个运行时数据区, 类的对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收(GC)来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢

    Stack(栈)(FILO):

      Stack的存取速度比heap要快,仅次于寄存器。栈中数据可共享。栈中主要存放基本数据类型和对象句柄。缺点是栈中数据大小和生命周期是确定的,不灵活。

          栈的最大特点就是数据共享。也就是通常所说的“有则指向,无则创建”。需要注意的是栈的数据共享与对象引用指向同一个对象的数据共享是不同的概念,前一种栈的共享之间是不会有影响的,也就是修改一个变量的值不会影响其他变量的值。而对象的引起是会影响其他对象的。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。

    可见,垃圾回收GC是针对堆Heap的,而栈因为本身是FILO(first in last out). 先进后出,能够自动释放。 这样就能明白到new创建的,都是放到堆Heap!

    Heap 又分为 Young, Old, Permanet.

  • 相关阅读:
    JVM内存结构解析
    tomcat服务器日志分页
    20多个常用的免费WebService接口
    将tomcat设置在服务中为开机自动启动
    oracle11g安装常见错误
    Resultset 转化成list或map
    SprngMVC工作原理
    Spring中ContextLoaderListener作用
    oracle如何导出和导入数据库/表
    轻松搭建Redis缓存高可用集群
  • 原文地址:https://www.cnblogs.com/hzm112567/p/5672964.html
Copyright © 2011-2022 走看看