摘要:
synchronized关键字是Java并发编程中非常重要的一个工具。它的主要目的是在同一时间只能允许一个线程去访问一段特定的代码,从而保护一些变量或者数据不会被其他线程所修改。Synchronized的作用主要有三个:原子性:确保线程互斥的访问同步代码;可见性:保证共享变量的修改能够及时可见,其实 阅读全文
摘要:
1.1定义 如果一个对象可以安全的被多个线程同时使用,那它就是线程安全的。——来自Google搜索的简单定义当多个线程访问同一个对象时,如果不用考虑多个线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线 阅读全文
摘要:
JVM规范试图定义一种Java内存模型(Java Memory Model, JMM)来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。 1 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存进内存和取出 阅读全文
摘要:
前期优化: 概述 Java语言编译期是一段不确定的操作过程,可能指前端编译器(叫编译器的前端更准确)把*.java文件转变为*.class文件的过程,也可能指虚拟机后端编译器(JIT编译器 Just Time Compiler)把字节码转为机器码的过程;还可能指静态提前编译器(AOT编译器)直接把* 阅读全文
摘要:
执行引擎是 Java 虚拟机最核心的组成部分之一。「虚拟机」是相对于「物理机」的概念,这两种机器都有代码执行的能力,区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机执行引擎是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的 阅读全文
摘要:
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证 阅读全文
摘要:
为了节省空间,类文件中没有任何分隔符,各个数据项都是一个挨着一个紧凑排列的,所以其中无论是顺序还是数量等都是严格规定的,哪个字节代表什么含义,长度是多少,先后顺序如何,都不允许改变。下面我们先看一下类文件的整体结构: 其中常量、接口、字段、方法和属性在其中按各自的结构紧密排列,个数由其前面的数量字段 阅读全文
摘要:
对象存活判定算法 引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加 1 ;当引用失效时,计数器值就减 1;任何时刻计数器值为 0 的对象就是不可能再被使用的。 Python 就用的是引用计数算法。 引用计数算法的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法 阅读全文
摘要:
1. 内存区域 Java虚拟机执行Java程序过程中会把它管理的内存划分为若干不同的数据区域。 程序计数器 线程私有。各条线程之间计数器互不影响,独立存储。生命周期同线程。 可以看成当前线程所执行的字节码行号指示器。字节码解释器工作时通过改变这个计数器值选取下一条需要执行的字节码指令(分支、循环、跳 阅读全文
摘要:
Implement pow(x, n), which calculates x raised to the power n (i.e. xn). 方法一: 递归 public double quickMul(double x, long N) { if (N == 0) { return 1.0; 阅读全文