JVM记录

JVM:

线程私有:

程序计数器(一个cpu只能执行一条指令,当线程切换时,为了让线程切回到正确的执行位置,因此每个线程都需要一个计数器,并且各自之间互相独立,这些区域就叫做程序计数器)、
java虚拟栈(java方法执行的内存模型【方法执行时会建立一个栈,存储方法的一些局部变量、动态链接、出口等】因此生命周期与线程相同)、
**:局部变量区时:
1、一旦线程方法请求的栈深度大于设定值,会抛出StackOverFlowError异常
2、栈的内存不满足于方法的执行时,会进行动态扩展时,一旦没有申请到足够的内存,会抛出oom异常。OutOfMemoryError
本地方法栈(与java虚拟栈的区别:执行jvm的native方法)、

线程共享:
java堆(存放的是对象实例、垃圾回收的主要区域,又称GC堆 堆没有足够内存创建实例、或者无法扩展时、会抛出oom异常

内存泄漏:对象无法被回收
内存溢出:本身应该活着,但是内存满了,需要扩展内存,或者查看生命周期是否过长
【GC回收: 先确定对象的死活 {
方法:
1.引用计数法(无法避免互相包庇): 对象赋予一个计数器、引用时+1,失效时-1 =0时死亡
&&&:JVM不采用,无法解决对象间互相引用问题【A引用B(+1) B引用A(+1)俩者都啥也没干,计数器不会归0,但是没有用,是垃圾】

2.可达性分析算法:从一个指定(GC Roots)对象去走all引用,当互相包庇时,引用链不会走到,判断对象已死。
GC Roots的对象:虚拟机栈(栈帧中的本地变量表)中引用的对象 、方法区中类静态属性引用的对象 、方法区中常量引用的对象、本地方法栈中JNI(Native方法)引用的对象
}

回收方法区:(废弃常量、无用的类)
标记-清除【效率不高、会产生大量的不连续的内存碎片】
复制算法:
新生代回收算法【】
老年代回收算法【】

)、
运行时常量区、(方法区的一部分【字面量{字符串、final常量、基本数据类型}和符号引用{类名、字段名、描述以及方法名、描述}】)
方法区(存放常量、静态的变量、类的信息等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值