jvm的基本原理

首先在谈到jvm的基本原理之前,先介绍java中堆和栈的区别:

下面部分内容是看了别人的博客转译过来的。


堆和栈在数据结构中和操作系统中有着完全不同的意义,这里主要讨论操作系统中的堆和栈:

在计算机领域,堆栈是很重要的概念,堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。???此处是不是堆栈都是?求指教??疑问

要点:

堆,顺序随意。

栈,后进先出。

操作系统意义上的堆和栈的概念:

栈:由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。栈使用的是一级缓存,他们通常都是被调用时处于存储空间中,调用完毕后立即被释放。栈也有链存储。

堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于数据结构中的链表。堆存放在二级缓存中,生命周期有虚拟机的垃圾回收算法来决定(也不一定一旦成为孤儿对象(没有被引用)就会被回收)。所以调用这些对象的速度要相对来的慢一些。在内存中是靠前后地址映射起来的链表结构???


栈有链式存储和顺序存储。

堆有链式存储。

数据结构意义上的堆和栈的概念:

堆:堆可以被看成是一棵树(二叉树),如:堆排序

栈:一种后进先出的数据结构。栈是一种特殊的线性表。

Java 中堆和栈的区别:

java把内存划分为两种区域:栈内存 和 堆内存。

栈内存:在一个函数中,定义的 基本类型的变量 和 对象的引用变量 都被分配在该函数的栈内存中。例如,当一段代码块({})中定义一个变量时(局部变量),java就在 该函数的栈中 的对应区域为这个变量分配内存空间,当运行到超过该变量的作用域后,java会自动的释放该变量所占用的内存空间,这块内存空间便可以立即被其他函数使用。

堆内存:存放new创建的对象(实体,这些实体由引用变量的内容(堆中首地址)指向他们)和数组。在堆中分配的内存,一般没有引用它的变量时,java虚拟机jvm会自动用垃圾回收器来管理这些内存空间。


java中栈和堆的一些特点:

(1)栈和堆都是java用来在ram中存放数据的区域。与C++不同的是java会自动管理栈和堆,而不能直接被程序员设置。

(2)栈的优势是,存取速度比堆快,仅此于直接位于cpu中的寄存器。缺点是,存在于栈中的数据大小与生存周期必须是确定(确定何时释放这些内存),缺乏灵活性。并且栈数据可以共享。

(3)堆的优势是可以动态地分配内存大小,生存周期不必事先告诉编译器,java的垃圾收集器会自动回收这些不在被使用的数据。缺点是,因为要在运行时动态的分配内存,存取速度就会较慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值