JVM内存结构分析整理

JVM内存结构:


线程共享:堆,方法区

非线程共享: 虚拟机栈,本地方法栈,程序计数器


堆:所有的实例对象以及数组都要在堆上分配  ,从内存回收角度看: 细分为 新生代 和 老生代          是垃圾收集器管理的主要区域。

方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(JIT)编译后的代码  

内存回收的主要目标:针对常量池的回收和对类型的卸载                                                                              垃圾比较少回收这个区域。

String.intern()方法 注意(参考深入 理解java虚拟机)


虚拟机栈: 线程私有,生命周期与线程相同   为虚拟机执行java方法(字节码)服务

 描述的是java方法执行的内存模型 :

每个方法被执行时同时会创建一个栈帧 用于存储局部变量表 、操作栈、动态链接、方法出口信息。方法被调用到执行完 对应着栈帧在虚拟机栈中从入栈到出栈的过程


本地方法栈:为虚拟机使用到的Native方法服务


程序计数器:线程私有   当前线程所执行的字节码的行号指示器。记录正在执行的虚拟机字节码指令的地址。


JVM垃圾回收机制:

GC的基本原理:找到程序中不再被使用的对象,然后回收这些对象所占用的内存空间。
GC判断对象不再使用的算法:
对象存活判断算法:引用计数算法和根搜索算法
基本的垃圾回收算法:标记-清除、复制、标记-整理,分代收集算法
依赖线程实现的回收算法:串行、并行、并发

 其中对象存活判定算法是其他算法的基石,用来判断对象是否存活,能否回收;基本的垃圾回收算法是垃圾垃圾收集器实现的基础算法;而依赖线程实现的算法,则是基本算法在考虑线程环境下的运用,这个有多线程基础的看名字就明白了。此外,还有综合以上算法并从特定角度实现的算法,如分代回收(针对分区)、增量回收(针对实时性)


内存分配和回收策略

1.对象优先在新生代 Eden上分配

2.大对象直接进入老年代

3.长期存活的对象将进入老年代(动态对象年龄判定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值