03-数据区概述与线程
数据区JVM在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域(包括5个运行时数据区)
1、方法区 2、虚拟机栈 3、本地方法栈 4、堆 5、程序计数器
运行时数据区的完整图
Java的内存区域
灰色的为单独线程私有的,红色的为多个线程共享的。
即:
1、每个线程:独立包括程序计数器、虚拟机栈、本地方法栈。
2、线程间共享:堆、堆外内存(永久代或元空间、代码缓存)
线程的简单介绍线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行
当一个Java线程准备好执行以后,此时一个操作系统的本地线程也同时创建。Java线程执行终止后,本地线程也会回收。
操作系统负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程中的run()方法。
JVM线程(*)
虚拟机线程:这种线程的操作是需要JVM达到安全点才会出现。这些操作必须在不同的线程中发生的原因是他们都需要JVM达到安全点,这样堆才不会变化。这种线程的执行类型包括”stop-the-world”的垃圾收集,线程栈收集,线程挂起以及偏向锁撤销。
周 ...
02-类加载器和类加载过程
类加载过程
加载1、通过一个类的全限定名获取定义此类的二进制字节流
2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
链接:一共分为三个部分,验证、准备和解析一、验证目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身。
验证阶段是十分重要的,直接决定了Java虚拟机是否能承受恶意代码的攻击,验证阶段的工作量在虚拟机的类加载过程中占了相当大的比重。
主要包括四种验证:文件格式验证,元数据验证,字节码验证,符号引用验证
二、准备1、为类变量分配内存并且设置该变量的默认初始值,即零值。
2、这里不包括含用final修饰的static,因为final在编译的时候就会分配数值了,准备阶段会显式初始化。
3、这里不会为实例变量分配初始化,类变量会分配在方法区,而实例变量是会随着对象一起分配到java堆中。
三、解析1、将常量池内的符号引用转换为直接引用过程
2、实际上,解析操作往往会伴随着JVM在执行完初始化之后再 ...
01-什么是JVM?
什么是JVM?①. JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机
②. jvm是运行在操作系统之上的,与硬件没有任何关系
Java的跨平台及原理①. 跨平台:由Java编写的程序可以在不同的操作系统上运行:一次编写,多处运行
②. 原理:编译之后的字节码文件和平台无关,需要在不同的操作系统上安装一个对应版本的虚拟机(JVM)
JVM的整体的理解①. 类加载子系统
②. 运行时数据区(我们核心关注这里 的栈、堆、方法区)
③. 执行引擎(一般都是JIT编译器和解释器共存)
java代码执行流程 java源码—java编译器—生成字节码—进入java虚拟机(类加载器—字节码校验器—翻译字节码—JIT编译器)
JVM的架构模型Java编译器输入的指令流基木上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
基于栈式架构的特点
跨平台性
指令集小
指令多
执行性能比寄存器差
基于寄存器架构的特点
指令集架构则完全依赖硬件,可移植性差
性能优秀和执行更高效
举例
同样执行2+3这种逻辑操作,其指令分别如下:
1、基于栈的计 ...