java堆/栈

1、java程序运行时的内存分配策略

①静态分配:使用空间位于静态存储区,也就是方法区。这块内存在程序编译的时候就已经分配好了,并且在整个程序运行期间都会存在。这是和堆栈最大的不同

②栈分配:使用空间位于栈区。方法执行的时候,方法体内的局部变量在栈上都会创建,并且在方法执行之后,这些内存都会被释放。栈内存分配运算置于处理器的指令集中。效率很高,但是分配的内存容量有限。

③堆分配:使用空间位于堆区。程序运行时new出来的内存,这部分内存在不使用的时候就会由java的内存回收器负责回收。



2、


3、


不管哪种语言的内存分配方式,都需要返回分配内存的真实地址,也就是说返回一个指针到内存块的首地址。java当中对象采用的是new或反射方式创建的,这些对象的创建都是在堆中分配的,所有这些对象的回收都是java虚拟机通过垃圾回收机制来完成的,而垃圾回收器为了能够正确地回收对象,它会监控每个对象的运行状况,对申请、引用、被引用、赋值等方法,都会进行监控。而java中会使用右侧的图进行内存管理,实时监控对象是否可以达到,如果不可以达到就将其回收,这样就可以解决循环引用的问题。


4、java内存泄漏引起的原因


内存泄漏:无用对象或不再使用的对象持续占用内存。或者无用对象的内存得不到及时释放,从而造成内存空间的浪费,就称为内存泄漏。

内存泄漏有时很严重,有时很小不易察觉,这样开发的时候就不知道内存泄漏。但有时也会很明显,比如达到一定程度就会造成oom。

内存泄漏的根本原因:长声明周期的对象持有短生命周期对象的引用就很可能发生内存泄漏。

5、


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值