JVM
ting说你跳
Android Developer.
展开
-
JVM,Dalvik和ART
1.Dalvik: 它是Google公司自己设计用于Android平台的Java虚拟机。dex格式是专为Dalvik应用设计的一种压缩格式,适合于内存和处理器速度有限的系统。Dalvik允许同时运行多个虚拟机的实例,并且每一个应用作为独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。 2.ART: 在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节原创 2017-05-25 16:40:34 · 313 阅读 · 0 评论 -
JVM垃圾回收(深入理解Java虚拟机学习笔记)
1.标记-清除算法 最基础的收集算法是“标记-清除”(Mark-Sweep)算法,如同它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它的标记过程其实在前一节讲述对象标记判定时已经介绍过了。 之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的。 它的主要不足有两个:一个是效率问题,标原创 2017-05-18 16:01:17 · 719 阅读 · 0 评论 -
JVM内存模型(深入理解Java虚拟机学习笔记)
Java虚拟机(Java virtualmachine)实现了Java语言最重要的特征:即平台无关性。 平台无关性原理:.Java文件经过Java Compiler编译成为.Class文件。编译后的 Java程序(.class文件)由 JVM执行,JVM屏蔽了与具体平台相关的信息,使程序可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行,因此实原创 2017-05-17 20:55:28 · 970 阅读 · 0 评论 -
Java与线程(深入理解Java虚拟机学习笔记)
线程的实现我们知道,线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、 文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。主流的操作系统都提供了线程实现,Java语言则提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经执行start()且还未结束的java.lang.Thread类的实例就代表了一个线原创 2017-08-07 14:28:08 · 327 阅读 · 0 评论 -
Java内存模型(深入理解Java虚拟机学习笔记)
参考文章:深入理解Java内存模型(一)——基础主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量(Variables)与Java编程中所说的变量有所区别,它包括了实例字段、 静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会在线程之间共享,不会有内存可见性问题,也不受内原创 2017-08-03 11:37:08 · 936 阅读 · 1 评论 -
对于volatile型变量的特殊规则(深入理解Java虚拟机学习笔记)
关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制,但是它并不容易完全被正确、 完整地理解,以至于许多程序员都习惯不去使用它,遇到需要处理多线程数据竞争问题的时候一律使用synchronized来进行同步。 了解volatile变量的语义对后面了解多线程操作的其他特性很有意义,在这里我们将多花费一些时间去弄清楚volatile的语义到底是什么。Java内存模型对volatile专门原创 2017-08-03 11:49:25 · 721 阅读 · 0 评论 -
正确使用 Volatile 变量
转载自:正确使用 Volatile 变量引言Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。本文介绍了几种有效使用 volatile 变量的模式,并强调了几种不适合使用 volatile转载 2017-08-03 14:22:23 · 334 阅读 · 0 评论 -
Java高效并发之锁优化(深入理解Java虚拟机学习笔记)
引言高效并发是从JDK 1.5到JDK 1.6的一个重要改进,HotSpot虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、 锁消除(Lock Elimination)、 锁粗化(Lock Coarsening)、 轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)等,这些技术都是为了在原创 2017-08-07 20:36:11 · 2088 阅读 · 1 评论 -
Java线程安全(深入理解Java虚拟机学习笔记)
Java语言中的线程安全我们已经有了线程安全的一个抽象定义,那接下来就讨论一下在Java语言中,线程安全具体是如何体现的?有哪些操作是线程安全的?我们这里讨论的线程安全,就限定于多个线程之间存在共享数据访问这个前提,因为如果一段代码根本不会与其他线程共享数据,那么从线程安全的角度来看,程序是串行执行还是多线程执行对它来说是完全没有区别的。为了更加深入地理解线程安全,在这里我们可以不把线程安全当做一个原创 2017-08-07 17:39:56 · 619 阅读 · 0 评论 -
JVM内存:年轻代,老年代,永久代
参考文章: 1.Java 新生代、老年代、持久代、元空间 2.Java内存与垃圾回收调优Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象,如下图所示: 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old)。新生代 ( Young ) 又被划分为三个区域:Eden、S0、S1。 这样划分的目的是为了使 JVM 能够更原创 2017-05-18 17:06:57 · 20001 阅读 · 1 评论 -
Java类加载(深入理解Java虚拟机学习笔记)
概述类加载的生命周期七个阶段:加载、验证、准备、解析、初始化、使用和卸载。 类加载的过程五个阶段:加载、验证、准备、解析、初始化。 在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶原创 2017-07-17 14:45:39 · 733 阅读 · 1 评论