博客
分类
标签
归档
友链
关于
博客
分类
标签
归档
友链
关于
Volantis
文档
帮助
示例
社区
博客
源码
JVM - 类加载机制
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。与那些在编译时需要进行连接的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略让Java语言进行提前编译会面临额外的困难,也会让类加载时稍微增加一些性能开销,但是却为Java应用提供...
2023-06-05
阅读全文
JVM - 线程安全与锁优化
线程安全当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。 这个定义要求线程安全的代码都必须具备一个共同特征:代码本身封装了所有必要的正确性保障措施(如互斥同步等),令调用者无需关心多线程下的调用问题,更无须自己实现任何措施来保证多线...
2023-06-03
阅读全文
JVM - Java与线程
线程的实现线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度。目前线程是Java里面进行处理器资源调度的最基本单位。 主流的操作系统都提供了线程实现,Java语言则提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经调用过 start() 方法且还未结束的 java....
2023-05-26
阅读全文
JVM - Java 内存模型
主内存与工作内存Java 内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到存储到内存和从内存中取出变量值这样的底层细节。此处的变量与 Java 编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,也就不会存在竞争问题。 Java 内存模型规定了所有的变量都存储在主内存中。每条...
2023-05-23
阅读全文
JVM - 垃圾收集器与内存分配策略
哪些内存需要回收? 什么时候回收? 如何回收? 对象已死?垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。 引用计数算法很多教科书判断对象是否存活的算法是这样的:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计时器为零的对象就是不可能再被...
2023-05-09
阅读全文
JVM - 内存区域
运行时数据区域运行时数据区域包括: 方法区(method area)(线程共享的数据区) 虚拟机栈(VM stack) 本地方法栈(native method stack) 堆(heap)(线程共享的数据区) 程序计数器(program counter register) 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在 Java 虚拟机的概念模...
2023-04-19
阅读全文