JVM
Java虚拟机
斜月&三星
这个作者很懒,什么都没留下…
展开
-
13. 晚期(运行期)优化
Java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为"热点代码"。在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器E(Just In Time Compiler 简称 JIT编译器)。JIT编译器并不是虚拟机必需的部分。一、HotSpot 中的即时编译器...原创 2020-01-13 15:42:03 · 107 阅读 · 0 评论 -
12. 早期(编译期)优化
Java 的 “编译器” 是一段 “不确定” 的操作过程,它可能是指一个前端编译器把 *.java 文件转换成 *.class 文件的过程;也可能是指虚拟机的后端运行期编译器(JIT 编译器,Just In Time Compiler)把字节码转换成机器码的过程;也可能是是指使用静态提前编译器(AOT 编译器,Ahead Of Time Compiler)直接把 *.java 文件...原创 2020-01-12 21:15:39 · 120 阅读 · 0 评论 -
11. 类文件结构
实现语言无关性的基础是虚拟机和字节码存储格式,虚拟机并不关心 Class 的来源是什么语言,只要它符合 Class 文件应有的结构就可以在Java虚拟机中运行。 ...原创 2020-01-12 16:30:41 · 98 阅读 · 0 评论 -
10. 锁优化
1. 自旋锁与适应性自旋锁 若物理机器上有一个以上的处理器,能让两个或两个以上的线程同时执行,我们可以让后面的请求锁的那个线程“稍等一下”,但是不放弃处理器的执行时间,看看持有锁的线程是否会很快就释放锁。为了让线程等待,我们只需让线程执行忙循环(自旋),这项技术称为自旋锁。 自旋锁在 JDK1.4.2 引入,但默认是关闭的。在 JDK1.6 中默认开启。优点是,避免...原创 2020-01-10 14:24:13 · 70 阅读 · 0 评论 -
9. 线程安全
当多个线程访问一个对象时,若不用考虑这些线程在运行时环境下的调度和交替执行,也不需要额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。-----摘自《Java Concurrency in Practice》一、Java中的线程安全Java中各种操作共享数据可以分为以下几种:不可变 绝对线程安全 相对...原创 2020-01-10 13:26:44 · 89 阅读 · 0 评论 -
7. Java内存模型
它的意义是来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效。在此之前,主流程序语言(C/C++等)直接使用物理硬件和操作系统的内存模型。因此,会由于不同平台上的内存模型差异,有可能导致程序在不同平台上运算结果不同。因此在某些场景下必须对不同的平台来编写程序。1. 主内存与工作内存 Java内存模型主要目标是定义程...原创 2020-01-09 15:27:27 · 104 阅读 · 0 评论 -
8. Java与线程
一、线程的实现 线程是比进程跟轻量级的调度执行单位,它可以把一个进程的资源分配和执行调度分开,各个线程既可以进行共享进程资源,又可以独立调度(线程是CPU调度的基本单位)。 Java提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经执行start()且还未结束的java.lang.Thread类的实例就代表了一个线程。在Thread类中,它的所有关键方法...原创 2020-01-09 17:30:28 · 89 阅读 · 0 评论 -
6. 虚拟机字节码执行引擎
一、运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数据区的虚拟机栈的栈元素。它存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等元素。方法的执行到结束对应着栈帧在虚拟机栈的入栈和出栈过程。每一个栈帧都包含了局部变量表、操作数栈、动态连接和方法返回地址和一些其它的附加信息。在编译代码时,栈帧所需要多大的局部变量...原创 2020-01-08 21:25:39 · 80 阅读 · 0 评论 -
5. 虚拟机的类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终生成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java中,类型的加载和连接过程都在程序运行期间完成。一、类加载的时机类从被加载到虚拟机内存中开始,到卸载为止,它的整个生命周期分为七个阶段:加载(Loading) 验证(Verification) 准备(Prep...原创 2020-01-07 10:48:18 · 82 阅读 · 0 评论 -
4. 垃圾收集器
垃圾收集器是对内存回收的及具体实现。 HotSpot虚拟机的垃圾收集器1. Serial收集器 它是最基本、发展历史最久的收集器,在JDK1.3之前是虚拟机新生代...原创 2020-01-06 14:53:01 · 72 阅读 · 0 评论 -
3. Java的内存回收
一、判断对象死亡的方法1. 引用计数法 给对象添加一个引用计数器,每当有一个地方引用该对象时,计数器就加1;当引用失效时,计数器就减1;当计数器为0时,表示该对象就不可能再被使用了。 它的优点为实现简单,判断效率也很高。但是它存在一个问题:它无法解决对象之间的相互循环引用的问题。 2. 可达性分析算法 通过一系列的称为“GC Roo...原创 2020-01-06 11:39:57 · 78 阅读 · 0 评论 -
1. HotSpot虚拟机对象探秘
一、对象的创建过程 1)当虚拟机遇到new指令时,会首先检查这个指令的参数是否在常量池中存在,并检查这个指令代表的类是否被加载、解析和初始化过。若没有,就必须执行相应的类加载过程。 2)当类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可以完全确定。为对象分配空间的方式有两种:指针碰撞(Bump the Pointer): ...原创 2020-01-03 16:53:50 · 203 阅读 · 0 评论 -
2. Java内存区域
运行时数据区域 Java虚拟机运行时数据区1. 程序计数器(Program Counter Register) ...原创 2020-01-03 15:25:49 · 82 阅读 · 0 评论