![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA虚拟机
一滴点儿
这个作者很懒,什么都没留下…
展开
-
Java虚拟机的体系结构
一个虚拟机实例的行为分别是按照子系统,内存区,数据类型,指令这几个术语来描述的。当java虚拟机运行一个程序时,它需要使用内存来存储许多东西,例如:1.字节吗2.从已经装载的class文件中得到的其他信息3.程序创建的对象4.传递给方法的参数5.返回值6.局部变量7.运算的中间结果Java虚拟机会把上述元素都组织到"运行时数据区",目的是便于管理。尽管这些"运行...原创 2019-04-22 13:27:14 · 98 阅读 · 0 评论 -
对象访问
对象的访问基础Object obj = new Object();Object obj是保存在java栈的本地变量中,而new Object()这部分则会反映道java堆中,形成一块存储了Object类型所有实例的数据值结构化内存。在这块堆中,必须含有能够查找到此对象类型数据(对象类型,父类,接口,方法等)的地址信息,这些类型的数据保存在方法区中。reference类型在java虚拟机...原创 2019-04-27 14:09:58 · 173 阅读 · 0 评论 -
本地方法区、Java堆、方法区、运行时常量池
本地方法区 java堆 方法区 运行时常量池本地方法区:在本地方法栈中执行非java语言编写的代码,例如C或者C++。Java堆:是类实例和数组的分配空间,是一块线程所共享的内存区域,虚拟机启动时创建。方法区:方法区在虚拟机启动时创建,也是一块所有线程共享的内存区域,它用于存储已被虚拟机加载的类的信息,常量,静态变量,及时编译器编译后的代码数据。运行时常量池:是方法区的一部分,...原创 2019-04-27 13:35:04 · 2481 阅读 · 0 评论 -
运行时的数据区域
Java虚拟机在执行java程序时,会在运行时环境中将其所管理的内存分为几个不同的数据区域。有的区域会在java虚拟机启动进程时创建,死亡时销毁。有些区域则是依赖于用户进程的启动而创建,结束时而销毁所有线程共享堆和方法区。虚拟机栈,本地方法栈和程序计数器则是线程隔离的数据区。所以java虚拟机会将其管理的内存分为:堆 方法区 虚拟机栈 本地方法区 程序计数器程序计数器:线...原创 2019-04-27 11:31:17 · 98 阅读 · 0 评论 -
Java的内存管理
1.栈:Java程序的运行区,是在线程创建时创建。生命周期与线程生命周期一致。栈是由栈帧的格式存在,栈帧是一个内存区块,是一个有关方法的和运行时数据的数据集。栈帧主要保存一下几种变量:1)本地变量:包括输入参数和输出参数以及方法内的变量2)栈操作:记录出栈和入栈操作3)栈帧数据:包括类文件,方法2 堆:堆内存用来存放关键字 new 创建的对象和数组。在堆中分配的内存,由Ja...原创 2019-04-27 11:10:28 · 110 阅读 · 0 评论 -
类型装载、连接和初始化详解
类型装载装载阶段由三个基本动作组成:1)根据类型的完全限定名,产生一个能够代表该类型的二进制流2)解析这个二进制流为方法区的数据结构3)创建一个能够代表该类型的java.lang.Class实例实际上就是一个把二进制数据流解析为方法区的数据结构,并在堆中创建一个实例,这就是装载。java类型的装载要么由启动类装载器装载,要么由用户自定义的类装载器装载。连接验证连...原创 2019-04-22 23:15:26 · 177 阅读 · 0 评论 -
栈和局部变量操作之一
类型的装载、连接和初始化装载:把二进制形式的java类型读入java虚拟机中连接:把已经读入虚拟机的二进制形式的数据合并到虚拟机运行时的状态中去。连接分为三个状态1.验证 2.准备 3.解析初始化:在此期间都给类变量赋以适当的初始值上述三个阶段必须严格按照时序进行,唯一有区别的是,在连接的解析阶段,可以在初始化之后进行在类和接口被装载和连接的时机上,java虚拟机规范给出了...原创 2019-04-22 22:08:42 · 91 阅读 · 0 评论 -
Java虚拟机之数据类型
byte short int long char float double booleanreturnAddress类类型接口类型数组类型byte 一个字节short 两个字节int 四个字节long 八个字节char 两个字节float 四个字节double 八个字节每个字节八位在java虚拟机中boolean会用int 或者Byte来表示...原创 2019-04-22 14:19:35 · 203 阅读 · 0 评论 -
Java虚拟机运行一
某些运行时数据时数据区是共享的,还有一些则是只由一个线程所拥有,每个java虚拟机实例都有一个方法区和堆,他们是由所有新线程所共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析所得到的类信息,并将其放在方法区里面。当程序运行时,虚拟机会把所有在该程序中创建的实例对象放入堆中。当一个线程被创建时,它都将得到它自己的pc寄存器(程序寄存器)以及一个java栈,...原创 2019-04-22 13:58:29 · 396 阅读 · 0 评论 -
内存泄漏
内存泄漏通常分为一下四类1)常发性内存泄漏发生内存泄漏的代码会被多次执行,每行一次执行都会导致一块内存泄漏2)偶发性内存泄漏发生内存泄漏的代码只在某些特定的环境或操作中才会发生,常发性和偶发性是相对的,在特定的环境下,偶发性内存泄漏也许就变成了常发性3)一次性内存泄漏发生内存泄漏的代码只被执行一次。4)隐式内存泄漏程序在运行过程中不停的分配内存,但直到结束时才释放内...原创 2019-04-27 14:22:57 · 292 阅读 · 0 评论