![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java虚拟机
lsm18829224913
每天对自己笑一笑,快乐是唯一的信仰。
展开
-
java垃圾回收器
概述:在java中我们不需要管理垃圾回收,但是如果我们觉得这种回收的效率比较低不能达到我们的目的时,我们就要自己去了解。程序计数器,虚拟机栈,本地方法栈都是线程私有的,随着线程的存在而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作,每一个栈帧中药分配多少内存基本已经确定下了了,所以这几个区域的内存分配和回收都具备确定性。但是java堆和方法区则不一样,一个接口中的多...原创 2018-05-08 22:24:59 · 89 阅读 · 0 评论 -
java运行时数据区域-----程序计数器
什么是运行时数据区域?java虚拟机在执行java程序的过程中会把它所管理的内存分成若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间。主要包含 方法区,虚拟机栈,本地方法栈,堆,程序计数器。程序计数器:可以看做是当前线程执行的字节码的行号指示器,通过高边这个计数器的值来读取下一条(指的是字节码的行数,并不是java代码的行数)需要执行的字节码指令,比如一些循环跳转指令。由于jav...原创 2018-05-08 16:45:26 · 2073 阅读 · 0 评论 -
java运行时数据区域-----java虚拟机栈+本地方法栈+java堆+方法区+运行时常量池
java虚拟机栈:虚拟机栈描述的是java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接和方法出口等信息,所以java虚拟机栈也是线程私有的。局部变量表:存放了编译器可知的各种基本数据类型和对象引用。其中long和double类型的数据会占用两个局部变量空间,其余都只占用一个,局部变量表所需要的内存空间在编译器内完成分配,当进入一个方法时,这个方法...原创 2018-05-08 17:37:56 · 180 阅读 · 0 评论 -
java运行时数据区域-----对象的创建
对象的创建:虚拟机遇到一个new关键字时,先会去常量池中检查是否有这个类的符号引用,并检查这个类所代表的类是否已经被加载,解析,初始化如果没有,那就必须先进行相应的类加载过程。在类加载过程通过后,接下来将为新生的对象分配内存(从java堆中划分出来一片内存区域出来)。1如果java堆中的内存是规整的左边我们叫做A区域,存放已经使用过的内存,右边我们叫B区域,存放着还没使用的内存区域,中间放着指示器...原创 2018-05-08 18:07:22 · 128 阅读 · 0 评论 -
java运行时数据区域-----对象的内存布局+对象的访问定位
在HostSpot中,java在内存中的布局可以分为三块内存区域,对象头,实例数据,对齐填充。对象头分为两部分 第一部分用于存储对象自身的运行时数据,如哈希吗,GC分代年龄,锁状态标志,偏向锁ID,线程持有的锁,偏向时间戳,这部分数据称为Mark Word,但是对象头信息是与对象自身定义的信息无关的额外存储成本,考虑到虚拟机的空间效率,Mark Word被设计成了一个非固定的数据结构,...原创 2018-05-08 19:33:59 · 158 阅读 · 0 评论 -
java运行时数据区域-----java堆溢出+虚拟机栈溢出/本地方法栈溢出+方法区溢出+常量池溢出+本机内存直接溢出
java堆溢出:在对象数量到达最大堆的容量限制后就会产生内存溢出异常。虚拟机栈溢出/本地方法栈溢出:请求栈的深度达到虚拟机所允许的最大深度,抛出StackOverError异常。在扩展栈时候无法申请到足够的内存空间则抛出,OutOfMemoryError异常。在单线程情况下,这两种情况只能抛出StackOverError异常。方法区溢出+常量池溢出:String.intern()是一个Native...原创 2018-05-08 19:58:11 · 458 阅读 · 0 评论