堆、栈,队列,栈,树的个人理解和记录

首先,堆和栈是内存分配上的区别,拿java来说jvm启动后会对所能调用的内存进行分配,分为程序计数器,栈,堆,方法区,方法栈五部分。在这里简单说下这五部分的作用。

       程序计数器:也称PC寄存器,类似与汇编语言中的寄存器,作用是保存当前执行指令的地址,java中多线程是分配cpu执行时间片给线程,当时间片很短时,就达到了多线程的执行效果。就是说一个cpu内核在某个最小时间片单位内只执行一个线程,为了能够使得每个线程都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,否则就会影响到程序的正常执行次序。所以pc寄存器是线程私有的。

         栈:这个跟C语言中的栈是一样的,它可以看作是一个容器,先进后出,当执行一个方法时,会创建一个栈的单元,当方法执行完毕时,会将这个单元弹出,所以栈的顶部是程序正在执行的方法构建的单元。这也是我们用递归时容易导致内存溢出的原因。我们可以粗略的理解为它用来开辟变量,存储地址。而栈是不对程序员透明的。

          堆:这块内存是所有线程所共享的,他存储的是一个个的对象,在栈中的变量存储的地址指向这些对象,而在java中如果这些对象没有被指向,那么会被jvm回收,这个时间是不确定的,这就是java和C的区别,C中你需要手动释放。

         方法栈:可以看作是栈的一部分,因为在hotSopt虚拟机中将java栈和方法栈合二为一了。它的作用和栈是一样的,区别在于栈是执行java方法的,而方法栈是执行本地方法的。

          方法区:用来存储每个类的类名、常量、方法信息、静态变量、编译后的代码等。

 以上是jvm的内存分配。而栈和队列以及树是指数据结构。

        栈::数据结构中的栈和内存中的栈形式是一样的,都是先进后出。

        队列:先进先出  和栈一样都是线性结构

       树   :树状结构,特点比较多,以后在进行分析记录

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值