- jvm是一种规范 并非实体存在,目前的实现中最流行的是sun开发的hotspot vm
- jvm加载.class文件也即是字节码文件到内存中,再由解析器转化成机器语言交给cpu执行
- jvm是java跨平台的基础,因为有不同的jvm来负责在转换成机器语言交给cpu,jvm只负责接受字节码文件(其他类java语言生成的也可以,比如kotlin0
- jvm机构体系:类加载器(四种);运行时数据区(存储对象信息);执行引擎(调用对象执行任务);本地库接口(处理其他编程语言)
- 运行时数据区(堆,虚拟机栈,方法区,程序计数器,本地方法栈)
- GC:垃圾的判断(计数器算法和可达性分析)和垃圾的收集算法(标记清除(容易产生碎片内存和暂停应用),标记复制算法(只能利用一半的内存)和垃圾收集器(对前面两者的综合优化后的产物,没有了空间了碎片,对空间的利用率也很高)).minorGC,majorGC,FullGC.....
- 四大应用:强(new个对象)软(内存不足是回收)弱(下一次就回收掉)虚(无法获取对象实例,丧失了引用了基本功能,价值就是死之前留下遗言).
- 堆:jvm内存中最大的一块,用于存储对象实例,几乎所有的对象(除了少部分逃逸掉的(拓展了解逃逸分析和标量替换)),物理上的地址可以是不连续的,逻辑连续即可...包含年轻代(伊甸区,幸存from,幸存to(对应人类的新生,创世纪以及大灾变))和老年代(15岁以后的年轻代会被GC到此处)
- 虚拟机栈::描绘的是方法执行时的内存模型,每个方法在被线程调用的时候的会创造一个栈帧用于存储局部变量表,操作数栈等.
- 方法区:主要用来存储加载的类信息.jdk1.8以后,方法区的实现从堆中搬到了本地内存当中,不再与jvm共享内存,被称作元空间,以前叫做永久代..方法区的大小决定了可以加载多少类.字符串常量池和静态变量依然在堆中...存储有:类型的信息;类型的域的信息;方法的相关信息;静态变量;常量;常量池(字面量和符号引用)
- 本地方法栈:于虚拟机栈类似,处理的是对本地方法的调用而非java方法.
- 程序计数器:当前线程执行的字节码的标识符,方便字节码文件经过解析器由cpu执行的时候识别进程的位置以及顺序,要不然多线程下cpu就蒙蔽了.
posted @
2022-11-13 20:19
千里兮兮
阅读(
34)
评论()
收藏
举报