JVM基础知识(二)

文章详细介绍了JVM内存的各个区域,包括程序计数器、虚拟机栈、栈帧、本地方法区、堆以及Java中的元数据。同时,讨论了Java中堆和栈的区别,JVM加载class文件的流程,以及GC(垃圾回收)的工作原理和作用,强调了GC在防止内存泄漏中的重要性。
摘要由CSDN通过智能技术生成

目录

1.程序计数器

2.虚拟机栈

3.栈帧

4.本地方法区

5.Native方法

6.Java中堆和栈的区别

7.JVM加载class文件的原理

1.加载

2.连接:包含验证、准备、解析

3.初始化

4.使用

5.卸载

8.GC是什么

9.堆是什么

10.Java的元数据


1.程序计数器

        是一块比较小的内存区域,每条线程都有一个独立的程序计数器,因此这类内存也被称为线程私有的内存。若正在执行Java方法,计数器会记录当前指令的地址

2.虚拟机栈

        是描述Java方法执行的内存区域,每个方法执行的同时都会创建一个栈帧(stack frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

        每个方法从调用到执行完成的过程,对应着一个栈帧在虚拟机栈中入栈到出栈的过程

        

3.栈帧

        是用来存储数据和部分过程结果的数据结构,同时也用来处理动态链接、方法返回值、异常分派。

        栈帧随着方法的调用而创建,随着方法的结束而销毁。

4.本地方法区

        本地方法区是为Native方法服务的,区别于虚拟机栈是为执行Java方法服务

5.Native方法

        Native Method就是一个Java调用非Java代码的接口,该接口的实现由非Java语言实现,比如C语言;用做Java和其他语言进行协作。

6.Java中堆和栈的区别

        内存区域不同:堆属于线程共享区域,栈属于线程私有区域

        使用目的不同:堆中用来分配对象内存区域,栈常用来保存方法帧和局部变量

7.JVM加载class文件的原理

1.加载

        通过类名对应的字节码文件( .class文件),将字节码文件读入到内存中,并创建Class对象

2.连接:包含验证、准备、解析

        验证:确保Class文件符合JVM规定的Class文件格式

        准备:为类的静态变量分配内存并设置初始化值(不包括final修饰的静态变量)

        解析:将常量池的间接引用转化为直接引用,包括字段解析,方法解析,接口解析

3.初始化

        初始化静态变量和静态块,先初始化类的父类,后初始化当前类

4.使用

        程序执行时使用

5.卸载

        程序执行完毕、出现异常等结束后,进行垃圾回收

8.GC是什么

GC(Garbage Collection):垃圾回收

为什么使用GC:内存处理不当会导致程序或系统不稳定甚至崩溃,因此Java提供了GC进行自动垃圾回收机制,较为安全的管理内存。

作用:垃圾回收GC可以有效防止内存泄漏问题,垃圾回收器GC作为一个低优先级线程运行,不可预知的对内存中死亡或者长时间未使用的对象进行清除与回收。(Android系统的“杀后台”行为就是由于Android系统中垃圾回收的不可预知性)

9.堆是什么

        堆(Heap)是线程共享的区域,用来保存创建的对象或数组,是垃圾回收器收集垃圾最重要的内存区域。

        Java堆从GC角度细分为:新生代、老年代、永久代

10.Java的元数据

        Java8中,永久代被替换为一个元数据区(元空间),元数据区并不在JVM在,而使用的是本地内存,元空间的大小由本地内存限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值