
JAVA虚拟机
JAVA虚拟机
如果时光可以倒流,我会选择在家陪伴家人
这个作者很懒,什么都没留下…
展开
-
线程安全与锁优化
线程安全:线程安全的实现方法①互斥同步:同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一条线程使用。而互斥是实现同步的一种手段。临界区、互斥量、信号量都是主要的互斥实现方式,因此在这4个字里面,互斥是方法,同步是目的。在JAVA里面,最基本的互斥同步手段就是synchronized关键字。synchronized关键字编译之后,会在同步块的前后分别形成monitorenter和monitorexit这2个字节码指令,这2个字节码都需要一个reference类型的参数来指明要锁定、原创 2020-06-09 10:45:13 · 144 阅读 · 0 评论 -
JAVA内存模型与线程
硬件的效率与一致性物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物理机对并发的处理方案对虚拟机的实现也有相当大的参考意义。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也引入了新的问题:缓存一致性。JAVA虚拟机内存模型中定义的内存访问操作与硬件的缓存访问操作是具有可比性的。除此之外,为了使得处理器内部的运算单元能尽量被充分利用,处理器可能会对编入代码进行乱序执行优化,处理器会在计算之后将乱序执行的结果重组,来保证该结果与顺序执行的结果是一致的,但并不保证程序中各.原创 2020-06-08 09:31:06 · 130 阅读 · 0 评论 -
虚拟机字节码执行引擎
概述执行引擎是JAVA虚拟机最核心的组成部分之一。物理机的执行引擎是直接建立在处理器、硬件、指令集、操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此虚拟机可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在JAVA虚拟机规范中制定了虚拟机字节码执行引擎的概念模型。运行时栈帧结构:概述栈帧是用于支持虚拟机进行方法调用、方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接、方法返回地址等信原创 2020-05-26 19:48:30 · 141 阅读 · 0 评论 -
虚拟机的类加载机制
概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析、初始化,最终形成可以被虚拟机直接使用的JAVA类型,这就是虚拟机的类加载机制。类型的加载、连接过程都是在程序运行期间完成,代价就是在类加载时增加一些性能开销,但却能为JAVA应用程序提供高度的灵活性,这就是JAVA天生可以动态扩展的语言特性就是依赖运行期动态加载、动态连接这个特点实现的。类加载的时机:概念类从被加载到虚拟机内存中开始,再到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、原创 2020-05-08 21:28:44 · 181 阅读 · 0 评论 -
类文件结构
概述由于计算机只识别0、1,因此,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式来作为程序编译后的存储格式。平台无关性的基石各种不同平台的虚拟机与所有平台都统一使用的程序存储格式:字节码是构成平台无关性的基石。实现语言无关性的基础仍然是虚拟机和字节码存储格式,使用JAVA编译器可以把JAVA代码编译为存储字节码的Class文件,使用JRuby等其他语言编写的编...原创 2020-05-04 10:39:40 · 429 阅读 · 0 评论 -
垃圾收集器与内存分配策略
概述程序计数器、虚拟机栈、本地方法栈这3个区域随着线程而生,随着线程而灭。栈中的栈帧随着方法的进入和退出而有条不紊地执行者入栈和出栈操作。每一个栈帧中分配多少内存基本上在java编译成class文件时,即类结构确定下来时就已经计算完毕(当然在运行期会由JIT编译期进行一些优化,但讨论的时候是基于概念模型讨论的,大体可以认为是编译期可知的),因此这几个区域的内存分配和内存回收都具备确定性:当方法...原创 2020-04-23 21:02:37 · 171 阅读 · 0 评论 -
JAVA内存区域与内存溢出异常
概述在C/C++语言中,需要程序员自己去负责内存的管理,对于程序员来讲,工作量比较大,且存在风险。到了JAVA这里,在JVM自动内存管理机制下,关于内存的操作就不需要程序员去关心。但是,随着工作年限的增长,内存泄露和内存溢出层出不穷,因此,如果想成为高级研发人员的话,对于内存管理这块,迟早是要了解的。运行时数据区域JVM在执行class文件的时候,会把它管理的内存划分为5个不同...原创 2020-04-22 20:50:33 · 207 阅读 · 0 评论