jvm个人学习

1 篇文章 0 订阅


一、jvm内存模型

在这里插入图片描述

这是jdk1.8的jvm内存模型,之前的方法区,永久代已经被优化

1.程序技术器区

每个线程一块内存,指向当前正在执行的字节码的行号。如果当前线程是native方法,则其值为null。

2.java虚拟机栈

在这里插入图片描述
java虚拟栈是java方法使用的,每个java方法被调用时就会在这里创建一个栈,然后入栈,栈是先进后出,然后栈的长度是有限制的太深了会抛出StackOverflowError,或者请求不到内存了OutOfMemoryError。

3.本地方法栈

和虚拟机栈类似,主要为虚拟机使用到的Native方法服务。

4.堆

唯一的用途就是存放对象实例:所有的对象实例以及数组都在堆上进行分配。堆时JVM内存占用最大,管理最复杂的一个区域。分成新生代和老年代。(下面有详细介绍堆的)

5.元数据区

存放虚拟机加载的类信息,静态变量,常量等数据。本质就是取代以前的方法区,是方法区的实现。

6.直接内存

JDK 1.4引入了NIO,使用Native函数库直接分配堆外内存。

二、堆的解析

在这里插入图片描述
此区域唯一的目的就是存放对象实例。Java堆是内存回收的主要区域(GC堆)。从内存回收的角度来看,java堆可以细分为新生代和老年代。
老年代:2/3的堆空间
新生代:1/3的堆空间
eden区:8/10的新生代空间
survivor 0:1/10的新生代空间
survivor 1:1/10的新生代空间
而堆信息的升级转化,每次使用Eden和其中一块Survivor(两个Survivor区域一个称为From区,另一个称为To区域)。每次GC(垃圾回收算法)会清理新生代90%的区域也就是会剩下1个survivor不清理(为什么会剩呢,因为经过GC后剩下的对象实例会复制到这个空的survivor,而空的空间当然不需要GC),然后经过这样的轮回15次还没被垃圾回收的就复制到老年代。而jvm调优就是调节老年代新生代空间大小比例,还有轮回次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值