![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA虚拟机
william_919
这个作者很懒,什么都没留下…
展开
-
一、深入理解JVM之运行时数据区域
一、运行时数据区域Java虚拟机管理的内存包括几个运行时数据内存:方法区、虚拟机栈、本地方法栈、堆、程序计数器,其中方法区和堆是由线程共享的数据区,其他几个是线程隔离的数据区。1.1、程序计数器程序计数器是一块较小的内存,他可以看做是当前线程所执行的行号指示器。字节码解释器工作的时候就是通过改变这个计数器的值来选取下一条需要执行的字节码的指令,分支、循环、跳转、异常处理、线程恢复等基础功能...原创 2019-04-15 10:23:36 · 108 阅读 · 0 评论 -
二、深入理解JVM之虚拟机对象
二、hotspot虚拟机对象2.1、对象的创建2.1.1、检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。2.1.2、分配内存接下来将为新生对象分配内存,为对象分配内存空间的任务等同于把一块确定的大小的内存从Java堆中划分出来。假设Ja...原创 2019-04-15 10:24:49 · 148 阅读 · 0 评论 -
三、深入理解JVM之OutOfMemoryError 异常
三、OutOfMemoryError 异常3.1、Java堆溢出Java堆用于存储对象实例,只要不断的创建对象,并且保证GCRoots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在数量到达最大堆的容量限制后就会产生内存溢出异常。如果是内存泄漏,可进一步通过工具查看泄漏对象到GC Roots的引用链。于是就能找到泄露对象是通过怎样的路径与GC Roots相关联并导致垃圾收集器无法自...原创 2019-04-15 10:29:16 · 432 阅读 · 0 评论 -
四、深入理解JVM之垃圾收集(GC)
四、垃圾收集程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。4.1、判断对象存活4.1.1、引用计数器法给对象添加一个引用计数器,每当由一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。从图中可以看出,如果不下小心直接...原创 2019-04-15 11:57:42 · 182 阅读 · 0 评论 -
五、深入理解JVM之虚拟机类加载机制
五、虚拟机类加载机制虚拟机吧描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制在Java语言里面,类型的加载。连接和初始化过程都是在程序运行期间完成的5.1 类加载的时机类被加载到虚拟机内存中开始,到卸载为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段加载、验证、准备、...原创 2019-04-15 11:59:01 · 96 阅读 · 0 评论 -
六、深入理解JVM之Java内存模型与线程
六、Java内存模型与线程6.1内存间的交互操作关于主内存与工作内存之间的具体交互协议,即一个变量如何从主内存拷贝到工作内存、如何从工作内存同步到主内存之间的实现细节,Java内存模型定义了以下八种操作来完成:lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占状态。unlock(解锁):作用于主内存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。...原创 2019-04-15 11:59:55 · 146 阅读 · 0 评论 -
七、深入理解JVM之线程安全
七、线程安全1、不可变:不可变的对象一定是线程安全的、无论是对象的方法实现还是方法的调用者,都不需要再采取任何的线程安全保障。例如:把对象中带有状态的变量都声明为final,这样在构造函数结束之后,它就是不可变的。2、绝对线程安全3、相对线程安全:相对的线程安全就是我们通常意义上所讲的线程安全,它需要保证对这个对象单独的操作是线程安全的,我们在调用的时候不需要做额外的保障措施,但是对于一些特...原创 2019-04-15 12:01:11 · 220 阅读 · 0 评论