随笔分类 -  JVM 学习之路

摘要:在java代码到最终执行的指令序列的整个过程中,会出现重排序.也就是说最终执行的顺序并不是按照源代码执行的顺序来进行的. 其中1为编译器的优化重排序,2,3是处理器的重排序. 数据依赖 如果两个操作访问同一个变量的话,而且其中一个为写操作,那么这两个操作是存在数据数据依赖的. JMM规定,存在数据依 阅读全文
posted @ 2016-03-31 10:35 平林新袖 阅读(306) 评论(0) 推荐(0) 编辑
摘要:在了解轻量级锁之前,首先要知道什么是CASCAS--Compare And Swap 比较并交换--通过比较传入的旧值和原内存位置中的值比较,来决定是不是要更新数据。 CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”,CAS是项 乐观锁 技术,... 阅读全文
posted @ 2015-05-30 10:22 平林新袖 阅读(5670) 评论(0) 推荐(2) 编辑
摘要:学习自周志明老师的《深入理解Java虚拟机》第二版类的加载时机如上图所示: 类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了: 加载、验证、准备、解析、初始化、使用和卸载 这7个阶段。其中, 验证、准备和解析这三个部分统称为连接(linking) 。 其中,加载、验证、准... 阅读全文
posted @ 2015-05-25 19:43 平林新袖 阅读(240) 评论(0) 推荐(0) 编辑
摘要:《深入理解Java虚拟机》 第二版中介绍到了类的加载过程。一个类从加载入内存到卸载出内存为止,整个生命周期包括:Loading(加载)-----Verification(验证)-----Preparation(准备)-----Resolution(解析)-----Initialization(初始化... 阅读全文
posted @ 2015-05-25 16:41 平林新袖 阅读(454) 评论(0) 推荐(0) 编辑
摘要:Garbage First Garbage First 简称 G1,它的目标是要做到尽量减少 GC 所导致的应用暂停的时间,让应用达到准实时的效果,同时保持 JVM 堆空间的利用率,其最大的特色在于允许指定在某个时间段内 GC 所导致的应用暂停的时间最大为多少,例如在 100 秒内最多允许 GC ... 阅读全文
posted @ 2015-05-25 09:49 平林新袖 阅读(594) 评论(0) 推荐(0) 编辑
摘要:并发的标记—清除(Concurrent Mark Sweep,缩写为 CMS)收集器,使得在整个收集的过程中只是很短的暂停应用的执行,可通过在 JVM 参数中设置-XX:UseConcMarkSweepGC 来使用此收集器,不过此收集器仅用于old和Perm(永生)的对象收集,并发的标记—清除较之S... 阅读全文
posted @ 2015-05-25 09:07 平林新袖 阅读(1081) 评论(0) 推荐(1) 编辑
摘要:本文引用自:深入理解Java虚拟机的第2章内容 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。 概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工作的劳动人民—既拥有每一... 阅读全文
posted @ 2015-05-23 11:04 平林新袖 阅读(198) 评论(0) 推荐(0) 编辑
摘要:String 中“+” 的操作的补充说明在使用“+”的时候,会创建一个StringBuilder对象,然后invokevirtual append()操作“+”操作创建StringBuilder的粒度是行代码。String str = a+b+c;这就是一行,这样他就会只new 一个StringBu... 阅读全文
posted @ 2015-05-22 10:24 平林新袖 阅读(253) 评论(0) 推荐(0) 编辑
摘要:1 指令码 助记符 说明 2 0x00 nop 什么都不做 3 0x01 aconst_null 将null推送至栈顶 4 0x02 iconst_m1 将int型-1推送至栈顶 5 0x03 iconst_0 将int型0推送至栈顶 6 0x04 iconst... 阅读全文
posted @ 2015-05-20 22:56 平林新袖 阅读(291) 评论(0) 推荐(0) 编辑
摘要:本文中需要的基础知识:指令重排 线程中两个非常重要的问题就是:原子性与可见性. 而下面的先行发生原则就是用来解决可见性问题的. 先行发生原则--是判断是否存在数据竞争、线程是否安全的主要依据。 先行发生是Java内存模型中定义的两项操作之间的偏序关系。如果说操作A先行发生于操作B,其实就是说在发生操 阅读全文
posted @ 2015-03-29 20:08 平林新袖 阅读(4236) 评论(0) 推荐(1) 编辑
摘要:Serial GC -XX:+UseSerialGC 这样就设置为了串行GC回收方式,这种方式在Client模式下是默认的。 一般是使用在单机程序,小内存,CPU个数少的机器上。 没有复杂的算法,只用一个线程完成GC,ParallelGC 并行 如果启动了Server,那么使用的GC就是Pa... 阅读全文
posted @ 2015-03-14 17:40 平林新袖 阅读(165) 评论(0) 推荐(0) 编辑
摘要:ClassLoader类加载器 常见的类加载器有BootStrapClassLoader<-ExtClassLoader<-AppClassLoader<-用户ClassLoaderBootStrapClassLoader:加载Java自带的核心类;ExtClassLoader加载在/jre/li... 阅读全文
posted @ 2015-03-14 14:59 平林新袖 阅读(295) 评论(0) 推荐(0) 编辑
摘要:Java字节码文件的主体结构分为一下几个部分:Class文件头部、常量池区域、当前类的描述信息、字段列表、方法列表、属性列表。Class文件头部 任何的class文件的前四个字节的内容就是CA FE BA BE 。Java是一种咖啡,故称之为coffee baby。这四个字节作为该文件的校验码。-... 阅读全文
posted @ 2015-03-14 14:33 平林新袖 阅读(461) 评论(0) 推荐(0) 编辑
摘要:JVM 判断一段数据到底是数据还是引用类型,首先要看JVM选择用什么方式。通常这个选择会影响到GC的实现。一、保守式如果JVM选择不记录任何这种类型的数据,那么它就无法区分内存里某个位置上的数据到底应该解读为引用类型还是整型还是别的什么。这种条件下,实现出来的GC就会是“保守式GC(conserva... 阅读全文
posted @ 2015-01-12 10:23 平林新袖 阅读(1547) 评论(0) 推荐(3) 编辑

点击右上角即可分享
微信分享提示