JVM 堆跟栈

需要说明一点,现存的JVM有好多种,Sun公司的是Sun Hotspot JVM

堆:是JVM用来储存对象的地方,他是存储单位(部门)

什么是对象?

首先要知道,Java并不是完全的面向对象的,因为基本数据类型的变量就不是一个对象。

除了Java的基本数据类型之外的所有的Object都是对象。

包括,类对象,接口对象和数组对象。

堆中的数据是所有线程共享的,所以在其中追加一个对象需要给他加上锁,这也是为什么new一个对象的系统开销比较大的原因。

Sun Hotspot JVM中new一个对象,如果对象较小的话是不会加锁的。因为它会直接为每一个线程开辟一块新的空间。

栈:是JVM用来存储基本数据类型,以及逻辑处理的地方,他是运行时单位

JVM栈实例的创建与线程相关。启动一个线程就会创建一个JVM栈的实例。

栈中存放的大部门是基本数据类型以及堆中对象的引用。

方法区:存放加载的类的相关信息的地方

包括类名称,类修饰符,类中的静态变量,类中final类型的常量,类中字段信息,类中方法信息

Class的getClassName,inInterface等方法调用的时候会在这个区域中获得相应的信息。

GC:JVM销毁无用对象

JVM堆中的对象的引用不再出现在JVM栈中的时候,JVM的垃圾回收机制就会把这个堆中的对象所占用的空间回收。

JVM 堆跟栈

时间: 2024-08-09 10:44:26

JVM 堆跟栈的相关文章

JVM堆和栈的区别

各司其职 最主要的区别就是栈内存用来存储局部变量和方法调用. 而堆内存用来存储Java中的对象.无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中. 独有还是共享 栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存. 而堆内存中的对象对所有线程可见.堆内存中的对象可以被所有线程访问. 异常错误 如果栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.StackOverFlowError.

jvm 堆内存 栈内存 大小设置

  4种方式配置不同作用域的jvm的堆栈内存! 1.Eclise 中设置jvm内存: 修改eclipse的配置文件,对所有工程都起作用 修改eclipse根目录下的eclipse.ini文件 -vmargs  //虚拟机设置 -Xms40m //初始内存 -Xmx256m //最大内存 -Xmn16m //最小内存 -XX:PermSize=128M //非堆内存 -XX:MaxPermSize=256M  2.Eclise 中设置jvm内存:jres VM Arguments参数的设置,对所有

【转】jvm 堆内存 栈内存 大小设置

原文地址:http://blog.csdn.net/qh_java/article/details/46608395 4种方式配置不同作用域的jvm的堆栈内存! 1.Eclise 中设置jvm内存: 修改eclipse的配置文件,对所有工程都起作用 修改eclipse根目录下的eclipse.ini文件 -vmargs  //虚拟机设置 -Xms40m //初始内存 -Xmx256m //最大内存 -Xmn16m //最小内存 -XX:PermSize=128M //非堆内存 -XX:MaxPe

Java基础-JVM堆与栈

java内存分区      运行时数据区即是java内存,而且数据区要存储的东西比较多,如果不对这块内存区域进行划分管理,会显得比较杂乱无章.程序喜欢有规律的东西,最讨厌杂乱无章的东西. 根据存储数据的不同,java内存通常被划分为5个区域:程序计数器(Program Count Register).本地方法栈(Native Stack).方法区(Methon Area).栈(Stack).堆(Heap). 程序计数器(Program Count Register) 又叫程序寄存器.JVM支持多

JVM 堆和栈的区别

栈内存: 程序在栈内存中运行 栈中存的是基本数据类型和堆中对象的引用 栈是运行时的单元 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据 一个线程一个独立的线程栈 堆内存: 程序运行所需的大部分数据保存在栈内存中 堆中存的是对象 堆是存储的单元,堆只是一块共享的内存 堆解决的是数据存储的问题,即数据怎么放,放在哪儿 所有线程共享堆内存 Java中的参数传递( 传值呢?还是传引用? ): 程序运行永远都是在栈中进行的,因而参数传递时,只存在传递基本类型和对象引用的问题,不会直接传递对象本身

[转]JVM堆和栈的区别

物理地址 堆的物理地址分配对对象是不连续的.因此性能慢些.在GC的时候也要考虑到不连续的分配,所以有各种算法.比如,标记-消除,复制,标记-压缩,分代(即新生代使用复制算法,老年代使用标记——压缩) 栈使用的是数据结构中的栈,先进后出的原则,物理地址分配是连续的.所以性能快. 内存分别 堆因为是不连续的,所以分配的内存是在运行期确认的,因此大小不固定. 栈是连续的,所以分配的内存大小要在编译期就确认,大小是固定的. 存放的内容 堆存放的是对象的实例和数组.因此该区更关注的是数据的存储 栈存放:局

JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结--转载http://www.cnblogs.com/kubixuesheng/p/5202561.html

转载自---http://www.cnblogs.com/kubixuesheng/p/5202561.html 俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面的堆,栈 JVM的堆,栈和os如何对应 为啥方法的调用需要栈 属于月经问题了,正好碰上有人问我这类比较基础的知识,无奈我自觉回答不是有效果,现在深入浅出的总结下: 前一篇文章总结了:JV

JVM堆与JVM栈

JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题,即数据怎么放.放在哪儿,另外JVM堆中存的是对象.JVM栈中存的是基本数据类型和JVM堆中对象的引用. JVM基础概念:JVM堆与JVM栈 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置. 基本类型包括:by

JVM基础:深入学习JVM堆与JVM栈(转)

JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题,即数据怎么放.放在哪儿,另外JVM堆中存的是对象.JVM栈中存的是基本数据类型和JVM堆中对象的引用. JVM基础概念:JVM堆与JVM栈 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值."引用值"代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置. 基本类型