JVM内存模型

一、class文件

将本地编译文件通过汇编,生成class文件,然后进入类加载过程

二、 类加载器

1、类加载器一般分为四种:启动类加载器(Java本身类),扩展类加载器(第三方jar包,依赖),应用类加载器(本地Java创建类),自定义类加载器

2、双亲委派机制:依据上面的类加载器顺序,如果类加载不出来,则会依次让后续的类加载器加载,当最后一个依然加载不出来,则报错。依次可以防止原生类被恶意篡改。

三、本地方法栈和本地库接口

1、例如多线程中的start0方法,底层是由c++来实现的,不属于Java本身实现,诸如此类

2、Java根本上依赖c++,初始为了兼容c++,需要对外暴露接口,以此达到和c++的连通,兼容更加多元完善的代码功能

四、程序计数器

1、为了保证java代码的执行顺序按照自己既定的顺序来执行

五、Java栈

1、比如定义一个变量,则该变量存在于栈中

2、栈的数据结构遵循先进后出,Java自身的方法都存放在Java栈中

六、方法区

1、该区域属于共享区域

2、静态变量,常量,类信息(构造器,接口定义),运行时常量池存在于该方法区中

七、堆

1、分为新生区,养老区,永久区。其中新生区分为(伊甸园区,幸存0区,幸存1区),永久区在Java7后改为元空间

2、元空间和永久代最大区别在于元空间并不在虚拟机中,而且使用的是本地内存,受本地内存限制,但可以调节

3、对象是在新生区的伊甸园区产生的,经历轻度垃圾回收,15次后如果没有被回收,进入养老区,养老区会有full GC

4、幸存0区和幸存1区会互相交换

5、创建对象后,变量存在于栈中,但是实例变量存在于堆中,通过地址,栈中的变量指向堆中的实例变量

6、永久区是存放jdk自身所携带的,运行程序必须的类,接口等信息,这些信息不会回收,等到程序彻底结束,永久区占用的内存才会被释放

7、永久区是对方法区的一个补充,或者说是一个实现。可以把方法区看成接口,永久区就是方法区的impl。

八、GC

1、分代收集算法:频繁收集新生区,较少收集养老区,基本不动元空间

2、GC算法:①标记引用法,当使用标记为0是,回收,但无法解决循环引用,已弃用。②复制算法,不会产生空间碎片,但由于交换过程,需要双倍空间。③标记清除算法。④标记清除压缩算法,会有标记和压缩耗时,节约空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值