JVM

本文详细解析了JVM运行时数据区域,包括线程私有的程序计数器、本地方法栈、虚拟机栈,以及线程共享的堆和方法区。阐述了不同区域的功能、生命周期及内存溢出风险,并介绍了垃圾回收机制。

jvm 运行时数据(内存) 分为多个区域

线程私有部分:

1.程序计数器(指向正在执行字节码指令的地址(行号))
java是多线程的,可以记录当前线程执行状态,保证程序正常执行
2.本地方法栈,虚拟机栈
栈是一种数据结构,出入口只有一个,特点:先进后出
主要是用来存储java执行时的方法中的信息 
一个栈帧代表一个方法:
	局部变量表:(一般第一个存放this)存放变量地址的引用
	操作数栈:方法中的代码对栈进行操作
	动态连接:支持多态,
	返回地址:运行完当前方法,返回的地址
生命周期:跟随线程的,可能会内存溢出(栈的深度大于最大深度(递		归,导致栈溢出 StackOverflowError))
多线程时,建议将栈的大小(-Xss)设置小点 例如128k

线程共享部分:堆和方法区

方法区:类的信息,静态变量,常量

堆:JMM(JVM内存模型)

<jdk1.8   -xms -xmx
新生代(100): 
	Eden(80m):对象优先分配在Eden取
	s1(10m):交换区
	s2(20m):	用于GC 复制算法
老年代(200m):
	大对象直接进入老年代
	长期存活的的对象也会分配到老年代(15次)
	动态年龄判断:多个对象交换区放不下,就一起移动到老年代
永久代:
对象的 回收 ----判断对象的存活(可达性分析) GC ROOTS
	1.方法区:类镜头属性引用对象
	2.方法区:常量引用对象
	3.虚拟机栈(本地变量表)对象
	4.本地方法栈(Native方法)中引用的对象
新生代:Minor GC() 线程 除了定时器会调用,当内存不足时也会调用
老年代:Full GC 当老年代满了才会调

复制回收算法Copying  适合于新生代
标记-清除算法:使用后可使用内存不是连续的,有碎片
标记-整理算法:将已用内存整理到一起	

JVM处理问题:
1.OOM后保存堆栈快照日志
2.分析内存泄漏
3.调整内存设置
4.控制垃圾回收频率 full GC
5.选择适合的垃圾回收器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值