什么是虚拟机?
在计算机科学中,虚拟机是指可以像真实机器一样运行程序的计算机的软件实现。
特点:
-
可同时在同一台PC上运行多个操作系统,每个OS都有自己独立的一个虚拟机, 就如同网络上一个独立的PC
-
虚拟机之间共享文件、应用、网络资源等
-
…
什么是JVM?
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
借助JVM,java不需要重新编译就可以跨平台运行java代码
java虚拟机 只需要解释 被java语言编译器编译生成的字节码文件成机器指令,即“一次编译,到处运行”。
JVM内部大概的样子
方法区:存放静态变量、类信息、运行时常量池、即使编译后的代码,线程共享
Java堆:存放实例变量 ,内存最大的一块,线程共享
虚拟机栈:存储局部变量表、操作数栈、动态链接、方法出口等信息,线程隔离
本地方法栈:存放本地方法的状态信息,线程隔离
程序计数器:记录下一条将要执行指令的地址,线程隔离
本地方法接口:用于调用本地方法的入口
本地方法库
执行引擎
JVM执行过程
我们写完java代码—>.java文件——>经过javac编译——>.class文件——>类加载器加载——>JVM分配内存——>垃圾回收,大概就是这样
什么是运行时数据区?
JVM程序执行时使用的数据区域,在JVM启动时创建,退出时销毁。包括程序计数器、虚拟机栈、方法区、运行时常量池
深、浅拷贝
堆栈区别
类加载器
-
类加载器用于识别并加载以.java为结尾的文件进内存。
-
类加载方式:隐式加载——平常写代码时经常用到的;显示加载——Class.forName(),反射会用到
-
类加载器类型包括:启动、扩展、系统、自定义加载器。
-
类加载器加载器类的过程:加载(寻找导入字节码文件)——>链接(验证:检查正确性、准备:分配内存空间、解析:替换成直接引用)——>初始化(静态变量和代码的初始化)
-
双亲委派机制:类加载器收到请求,不断向上委托给父类加载器,直到最高级别的启动类加载器无法加载就向下交由子类加载器尝试加载
垃圾回收对象
垃圾回收的对象是?堆内存中不再被引用变量引用的对象。垃圾回收在回收对象之前会调用对象的finallize方法。对象在堆内存中运行时会经历三个状态:可达状态——被引用、可恢复态——finallize方法可能使恢复成可达状态、不可达状态——经历过前两种状态之后的状态,该状态会被认定为垃圾回收的对象。
垃圾回收的方法
引用计数法、复制算法、标记清楚法、标记压缩法。