目录
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在,而使用的是本地内存,元空间的大小由本地内存限制