深入理解java虚拟机
sky国士无双
不积跬步,无以至千里。
展开
-
《深入理解java虚拟机》七-线程安全与锁优化
一、线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。1.java语言中线程安全(1)不可变在Java语言中,不可变的对象一定是线程安全的,无论是对象的方法实现还是对象的调用者,都不需要再采取任何的线程安全保障措施。(2)绝对线...原创 2020-01-12 15:39:26 · 189 阅读 · 1 评论 -
《深入理解java虚拟机》六-java内存模型与线程
一、概述衡量一个服务性能的高低好坏,每秒事务处理数(TPS)是最重要的指标之一,它代表着一秒内服务端平均能响应的请求总数,而TPS值与程序的并发能力又有非常密切的关系。二、硬件的效率与一致性基于高速缓存的存储交互很好的解决了处理器与内存的速度矛盾,但是也为计算机系统带来更高的复杂度,因为它引入了一个新的问题:缓存一致性。在多处理器系统中,每个处理器都有自己的高速缓存,而他们又共享同一主内存。...原创 2020-01-09 23:12:41 · 115 阅读 · 0 评论 -
《深入理解java虚拟机》五-虚拟机字节码执行引擎
运行时栈帧结构栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态链接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程。在编译代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写入到方法表得Code属性之中。因此一个栈帧需要...原创 2020-01-07 20:53:56 · 111 阅读 · 2 评论 -
《深入理解java虚拟机》四-虚拟机类加载机制
一、概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。二、类加载的时机类从加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析这3个部分统称为连接,这7个阶段的发生顺序如下图所示其中,加载、验证、...原创 2020-01-07 19:19:01 · 112 阅读 · 0 评论 -
《深入理解java虚拟机》三 类文件结构
一、无关性的基石实现语言无关性的基础仍然是虚拟机和字节码储存格式。java虚拟机不和包括java在内的任何语言绑定,它只与"Class文件"这种特定的二进制文件格式所关联,Class文件中包含了java虚拟机指令集和符号表以及若干其他辅助信息。二、class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任...原创 2020-01-02 22:52:25 · 165 阅读 · 0 评论 -
《深入理解java虚拟机》二 垃圾收集器与内存分配策略
一、概述java内存中运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈的操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具有确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随回收了。而java堆和方法区则...原创 2019-12-31 14:00:35 · 101 阅读 · 0 评论 -
《深入理解java虚拟机》一 java内存区域与内存溢出异常
一、概述对于java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄露和内存溢出问题,由虚拟机管理内存这一切看起来都很美好,不过,也正是因为java程序员把内存控制的权利交给了java虚拟机,一旦出现内存泄露和溢出方面的问题,如果不了解虚拟机是怎么使用内存的,那么排查错误将会成为一项异常艰难的工作。二、运行时数据区域...原创 2019-12-26 13:22:45 · 159 阅读 · 0 评论