JVM虚拟机

1、JVM的结构、执行流程

		JavaSource:源代码
		JavaClass:将源代码的字节码文件
		使用java命令 运行JavaClass文件的时候,就会创建一个java虚拟机,创建一个main主线程作为程序入口
		1.类加载子系统:将字节码文件读取到内存中,存到方法区
		2.方法区:类的信息
		3.堆(Heap):对象信息,new的对象
		4.栈(Stacks):局部变量、方法参数
						java虚拟机栈:java中的方法
						本地方法栈:调本地方法接口,到本地库中找方法执行
		5.程序计数器:记录各个线程的运行状态,上下文的切换
		6.解释器(Interpreter):将java代码解释成机器代码,机器才可以识别
		7.即时编译器(JIT Compiler):将一些热点信息解释成机器代码后,存到缓存中
		8.垃圾回收器(GC):不再被引用的对象会被回收

2、造成内存溢出的情况

jvm的结构中,除了程序计数器不会造成内存溢出,其他都有可能造成内存溢出。
OutOfMemoryError:
1.方法区内存耗尽:加载的类越来越多
2.堆内存耗尽:对象越来越多,且一直在使用,不能被垃圾回收
3.栈内存耗尽:线程越来越多,每个线程占用1M内存
StackOverflowError:
1.虚拟机栈内部:方法的调用次数过多,造成线程的1M内存被耗尽。如:回调、死循环

3、方法区的元空间

方法区中的信息是存在元空间中,元空间就是将类的信息存到本地内存中。
元空间的销毁:
元空间中的某个类在堆内存中的引用消失,该类不会立即被释放;
而是当堆内存中元空间所有的类引用消失,GC在做垃圾回收时,发现该类加载器中数据都被回收了,才会回收类加载器,同时回收类加载器对应的元空间中所有的数据,对元空间内存进行释放。

4、jvm垃圾回收算法

  • 标记清除:对引用的数据打上标记,未标记的数据就会被清除。
    缺点:内存碎片化严重
  • 标记整理:未使用的数据删除后,将使用的数据整理,向一端靠拢。
    优点:解决内存碎片化。
    缺点:多了一个移动数据的操作
  • 标记复制:将内存分成两部分,一部分用来存储数据from,另一部分为空闲区to。将打上标记的数据从from移动到to中,然后将from区全部清理。
    优点:效率相比前两种高。
    缺点:占用了一份空闲内存。
    适用情况:适用于新生代垃圾回收;不适用于老年代垃圾回收,老年代复制量较大,适合标记整理法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值