首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
jvm
goingflygo
创建于2021-08-27
订阅专栏
jvm
暂无订阅
共12篇文章
创建于2021-08-27
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
线程安全与锁优化
并发处理的广泛应用是Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有力武器。 在软件业发展的初期,程序编写都是以算法为核心的,程序员会把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理这些数据,这种…
Java内存模型与线程
“高效并发”将会介绍虚拟机如何实现多线程、多线程之间由于共享和竞争数据而导致的一系列问题及解决方案。 一个重要的复杂性的来源是绝大多数的运算任务都不可能只靠处理器“计算”就能完成。处理器至少要与内存交互,如读取运算数据、存储运算结果等,这个I/O操作就是很难消除的(无法仅靠寄存…
虚拟机字节码执行引擎
MethodHandle机制。 虚拟机在执行代码时,如何找到正确的方法,如何执行方法内的字节码,以及执行代码时涉及的内存结构。 Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时…
虚拟机类加载机制
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证…
字节码指令简介
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需的参数(称为操作数,Operand)构成。 在Java虚拟机的指令集中,大多数指令都包含其操作所对应的数据类型信息。举个例子,iload指令…
类文件结构
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。 如果全世界所有计算机的指令集就只有x86一种,操作系统就只有Windows一种,那也许就不会有Java语言的出现。 java虚拟机执行的是class文件,这又提供了语言无关性…
垃圾收集算法
从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。这里介绍的都是追踪式垃圾收集的范畴。 弱分代假说(…
对象已死?
垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了。 顾名思义,就是在对象中添加一个引用计数器,有新引用时加1,引用失效时减1。引用计数器值为0的对象就是不再被使用的。 缺点:必…
HotSpot虚拟机对象创建、布局和访问
注:文中讨论的对象限于普通Java对象,不包括数组和Class对象等。 对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。 假设Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边…
java运行时数据区
程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器(每个线程都有自己独立的程序计数器)。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 首先我们要搞清楚JVM的多…
深入理解java虚拟机第12章Java内存模型与线程
实现线程主要有三种方式:使用内核线程实现、使用用户线程实现、使用用户线程加轻量级进程混合实现。 内核线程就是直接由操作系统内核支持的线程。 程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口—轻量级进程,轻量级进程就是我们通常意义上讲的线程,由于每个轻量级进程都由…
深入理解java虚拟机学习笔记
对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象…