- 博客(8)
- 收藏
- 关注
原创 深入理解java虚拟机-读书笔记8-线程安全与锁优化
线程安全 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的 java语言中各种操作共享的数据分为以下5类: 不可变 一定是线程安全的。例如final,被final修饰的基础数据类型,被正确构造后是不可变的,亦为线程安全的。如果是一个对象,需要保
2016-12-08 22:06:49
315
原创 深入理解java虚拟机-读书笔记7-java内存模型与线程
java内存模型: Java内存模型它规定了所有变量都存在主内存,每条线程还有自己的工作内存,存储的是使用的变量的主内存拷贝。线程不能直接操作主内存中的变量,互相间也不能访问工作内存。交换、传输数据只能经过主内存。 内存见的交互操作:主内存与工作内存之间的交互协议,java内存模型中定义了以下8种操作来完成,每一种操作都是原子的、不可再分的。 1. lock锁定:作用于主内存的变量,把一个变
2016-12-06 21:19:28
307
原创 深入理解java虚拟机-读书笔记6-程序编译与代码优化
早期(编译期)优化:javac把java文件转变成class文件,这类前段编译器堆代码的运行效率几乎没有任何优化措施,性能的优化集中到了后端的即时编译器中,但是javac针对java语言编码过程的优化措施来提高编码效率。javac编译过程: java语法糖,在语义分析与字节码生成阶段。 泛型与类型擦除 本质是参数化类型的应用,也就是操作的数据类型被指定为一个参数。可以应用到类、接口、方法上。泛型
2016-12-06 20:49:43
549
原创 深入理解java虚拟机-读书笔记5-虚拟机字节码执行引擎
虚拟机字节码执行引擎的概念模型,在执行java代码的时候可能会有解释执行和编译执行两种选择。所有的执行引擎都是:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。 运行时栈帧结构 栈帧是支持虚拟机进行方法调用和执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。 在编译时,一个栈帧需要分配多少内存就完全确定
2016-12-01 22:34:53
411
原创 深入理解java虚拟机-读书笔记4-虚拟机类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是类加载机制。 类加载的时机: 下面5中情况必须立即对类进行”初始化”(加载、验证、准备自然需要在此之前开始): 遇到new、getstatic、putstatic、invokestatic这4个字节码指令时。即使用new实例化对象、读取类的静态字段、调用类的静态
2016-11-30 20:57:10
277
原创 深入理解java虚拟机-读书笔记3-类文件结构
虚拟机不和包括java在内的任何语言绑定,只与“class”文件这种特定的二进制文件格式所关联。Class类文件格式采用类似C语言结构体的伪结构来存储,这种伪结构中只有两种数据类型:无符号数和表。
2016-11-30 20:23:34
327
原创 深入理解java虚拟机-读书笔记2-垃圾收集器和内存分配策略
垃圾回收重点区域:堆和方法区部分区域。 引用计数算法: 1,引用计数算法: 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不再被使用的,垃圾收集器将回收该对象使用的内存。 实现简单,判定效率很高。但是很难解决对象之间循环引用的问题。 2,可达性分析算法: java所使用的垃圾回收算
2016-11-29 21:00:53
465
原创 深入理解java虚拟机-读书笔记1-Java内存区域与内存溢出异常
自动内存管理机制 - java内存区域与内存溢出异常 - 垃圾收集器与内存分配策略 - 虚拟机性能监控与故障处理工具 - 调优案例分析与实战java虚拟机运行时数据区,如下图所示: 程序计数器: 一块较小的内存空间,可以看做时当前线程所执行的字节码的行号指示器。 由于Java虚拟机的多线程时通过线程轮流切换并分配执行时间的方式来实现的,为了线程切换后能恢复到正确的执行位置,每
2016-11-28 20:42:45
410
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人