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.

时间: 2024-10-16 01:52:37

Java Heap and Stack的相关文章

Java里的堆(heap)栈(stack)和方法区(method)

基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收.   引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 . 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收.局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收. 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用完成后从栈空间分配.

a堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)

--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有什么异同,以及和数据结构中的堆栈有何关系? 一.Java 堆存储空间 堆内存(堆存储空间)会在Java运行时分配给对象(Object)或者JRE的类.只要我们创建了一个对象,那么在堆中肯定会分配一块存储空间给这个对象.而我们熟知的Java垃圾回收就是在堆存储空间上进行的,用以释放那些没有任何引用指向

Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)

--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有什么异同,以及和数据结构中的堆栈有何关系? 一.Java 堆存储空间 堆内存(堆存储空间)会在Java运行时分配给对象(Object)或者JRE的类.只要我们创建了一个对象,那么在堆中肯定会分配一块存储空间给这个对象.而我们熟知的Java垃圾回收就是在堆存储空间上进行的,用以释放那些没有任何引用指向

java heap space, PermGen space 错误 使用jvisualvm监测设置合理值

使用myeclipse启动tomcat 报java heap space ,PermGen space 错误,分别为 heap内存不足,PermGen内存不足需加大 tomcat启动项参数 Xmx 和 XX:MaxPermSizePermGen是指内存的永久保存区域,它用于存放class和 method 对象,以及String 对象(sun原文:permanent generation is the area of the heap where class and method objects

Jenkins部署报weblogic.deploy.api.tools.deployer.DeployerException: Java heap space

Jenkins部署报weblogic.deploy.api.tools.deployer.DeployerException: Java heap space异常 解决办法: 在MAVEN_OPTS中设置一下参数 -Xdebug -Xnoagent -Xms256m -Xmx512m -Djava.compiler=NONE 参数解析 -D,--define arg Define a system property -E,--emacs Produce logging information w

Eclipse java.lang.OutOfMemoryError: Java heap space故障处理过程

最近在eclipse-jee-luna-SR2-win32开发环境(java version:1.7.0_60)下导入JEECG3.5.2开源项目过程中发现在build workspace过程中报Internal Error,查看workspace文件夹下的.metadata文件夹中的.log文件发现有下面的错误: !ENTRY org.eclipse.core.jobs 4 2 2015-08-04 18:37:10.621!MESSAGE An internal error occurred

Java Heap dump文件分析工具jhat简介

jhat 是Java堆分析工具(Java heap Analyzes Tool). 在JDK6u7之后成为标配. 使用该命令需要有一定的Java开发经验,官方不对此工具提供技术支持和客户服务. 用法: jhat [ options ] heap-dump-file 参数: options 可选命令行参数,请参考下面的 Options heap-dump-file 要查看的二进制Java堆转储文件(Java binary heap dump file). 如果某个转储文件中包含了多份 heap d

解决eclipse maven install 造成JVM 内存溢出(java.lang.OutOfMemoryError: Java heap space)

maven install 报错信息: The system is out of resources.Consult the following stack trace for details.java.lang.OutOfMemoryError: Java heap space at java.util.HashMap.createEntry(HashMap.java:897) at java.util.HashMap.addEntry(HashMap.java:884) at java.ut

JVM内存四大类型:Heap,Stack,Contant,DirectMemory等

Stack属于栈的区域,属于每条线程私有的. 方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的代码,本地方法栈指向的是C/C++. Java开发,对象就在堆中,一般而言,堆中只有对象. 堆溢出测试:程序运行设置:-verbose:gc -Xms10M -Xmx10M -Xss128k -XX:+PrintGCDetails package com.dt.spark.jvm.basics; import java.util.ArrayList; import java.util.Li