JVM

Java虚拟机与Java语言并没有必然的联系,它只与特定的二进制文件格式(class文件格式所关联)
Java 虚拟机就是一个字节码翻译器,它将字节码文件翻译成各个系统对应的机器码,确保字节码文件能在各个系统正确运行
JVM体系结构
三个主要的子系统 ———— 类加载器子系统、运行时数据区、执行引擎
java的动态类加载功能由类加载器子系统处理。
加载是通过:引导类加载器,扩展类加载器,应用程序类加载器,三个加载器帮助完成加载;
加载完毕之后要连接操作。加载又分为三个步骤,验证,准备,解析。
验证做的事情是字节码验证程序,将验证生成的字节码是否正确,如果验证失败

JVM主要的内存结构
JVM里有哪些东西。堆和栈的概念
负责存放基本数据类型和对堆中对象的引用,比如布尔类,字节类,字符类
里面存放对象,比如string
栈是线程私有的,堆是公有的
程序计数器(pc register)电脑注册-->网吧网管
记录当前要执行的指令地址,也就是每个线程执行到哪了。记录存档,
方法区存放的是运行时常量,每个类的结构,字段,方法,这些源数据信息。
Java的反射机制常用到class,field,method类,这些类对应的信息就存在方法区。
本地方法栈本地方法的栈,为本地方法提供的专门的栈空间
其它语言编写的,交由Java运行的方法。使用native修饰的就是本地方法。

一、GC垃圾回收
JVM 的垃圾回收动作可以大致分为两大步,首先是1、「如何发现垃圾」,然后是2、「如何
回收垃圾」。说明一点, 线程私有的不存在垃圾回收, 只有线程共享的才会存在垃圾回收, 所
以堆中存在垃圾回收

1、如何发现垃圾
Java 语言规范并没有明确的说明JVM使用哪种垃圾回收算法,但是常见的用于「发现
垃圾」的算法有两种,引用计数算法和根搜索算法

(1)引用计数算法
该算法很古老(了解即可)。核心思想是,堆中的对象每被引用一次,则计数器加1,
每减少一个引用就减1,当对象的引用计数器为0时可以被当作垃圾收集。
优点:快。
缺点:无法检测出循环引用。如两个对象互相引用时,他们的引用计数永远不可能为0。

(2)根搜索算法(也叫可达性分析)
根搜索算法是把所有的引用关系看作一张图,从一个节点GCROOT开始,寻找对应的
引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕
之后,剩余的节点则被认为是没有被引用到的节点,即可以当作垃圾。
Java 中可作为GCRoot的对象有
1.虚拟机栈中引用的对象
2.本地方法栈引用的对象
2.方法区中静态属性引用的对象
3.方法区中常量引用的对象

2、如何回收垃圾
Java 中用于「回收垃圾」的常见算法有
标记-清除算法
标记-整理算法

posted @ 2024-03-05 13:50  launch  阅读(10)  评论(0)    收藏  举报