JVM学习(九):锁优化
摘要:1、高效并发是JDK1.5到JDK1.6的一个重要改进,出现了适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁粗化(Lock Coarsening)、轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)等一系列锁优
阅读全文
posted @
2019-08-25 11:39
逍遥1989
阅读(183)
推荐(0)
JVM学习(八):线程安全
摘要:1、线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也无需进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。 2、线程安全的等级(由强到弱依次如下): (1)不可变:不可变(Immutable
阅读全文
posted @
2019-08-25 10:39
逍遥1989
阅读(234)
推荐(0)
JVM学习(七):Java与线程
摘要:1、操作系统线程:轻量级的进程,是CPU调度的基本单位。线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程之间共享进程资源(内存地址、文件I/O等)。 2、Java线程:一个已经执行了start()且还未结束的java.lang.Thread类的实例。 3、线程模型 (1)内核线程(Ker
阅读全文
posted @
2019-08-24 18:49
逍遥1989
阅读(145)
推荐(0)
JVM学习(六):Java内存模型
摘要:1、Java内存模型(Java Memory Model,JMM):线程、主内存和工作内存。所有的变量都存储在主内存(虚拟机内存的一部分)中,每条线程还有自己的工作内存。线程对变量的所有操作(读取、赋值等)必须在工作内存中进行,不同线程之间无法直接访问对方工作内存中的变量,需要通过主内存来完成。 2
阅读全文
posted @
2019-08-24 18:04
逍遥1989
阅读(145)
推荐(0)
JVM学习(五):类加载机制
摘要:1、类加载机制的含义:Java程序运行期间,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。 2、类在虚拟机中的生命周期: (1)分为7个阶段:加载、验证、准备、解析、初始化、使用和卸载。 (2)验证、准备、解析统称为连
阅读全文
posted @
2019-08-24 15:06
逍遥1989
阅读(142)
推荐(0)
JVM学习(三):垃圾收集
摘要:1、垃圾收集(Garbage Collection,GC),需要考虑以下3件事 (1)哪些内存需要回收?(What) (2)什么时候回收?(When) (3)如何回收?(How) 2、判断堆内存是否需要回收,主要是判断对象的引用是否还存在,主要有以下策略 (1)引用计数算法:每个对象含有一个引用计数
阅读全文
posted @
2019-08-17 15:28
逍遥1989
阅读(140)
推荐(0)
JVM学习(二):内存溢出
摘要:1、Java对象无法被垃圾收集器回收就会造成内存泄漏,内存泄漏越来越多就可能会导致内存溢出(java.lang.OutOfMemoryError)。 2、内存溢出有以下几种情形: (1)堆溢出 (2)虚拟机栈(本地方法栈)溢出 (3)方法区(运行时常量池)溢出 (4)直接内存溢出 3、常用JVM参数
阅读全文
posted @
2019-08-17 15:01
逍遥1989
阅读(113)
推荐(0)
JVM学习(四):Class文件结构
摘要:1、各种平台的虚拟机统一使用的程序存储格式为 字节码(ByteCode)。 2、Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。 3、任何一个Class文件都对应唯一一个
阅读全文
posted @
2019-06-14 08:36
逍遥1989
阅读(251)
推荐(0)
JVM学习(一):JVM运行时数据区域
摘要:1、JVM运行时内存区域划分 2、各区域功能介绍 (1)程序计数器:线程私有内存区域,由于多线程是上下文切换运行,为了使线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器,当线程执行的是Java方法时,程序计数器记录的是正在执行的虚拟机字节码指令的地址。此区域是JVM中唯一一个不会出
阅读全文
posted @
2019-02-19 22:54
逍遥1989
阅读(163)
推荐(0)