JVM
java虚拟机
颜颜颜颜颜越
这个作者很懒,什么都没留下…
展开
-
简述Jvm运行时数据区域
线程公有堆new对象 存放对象实例的地方此内存地区的唯一目的就是存放对象的实例,Java中几乎所有的对象实例都是在这个地方分配的GC垃圾回收发生的区域方法区存储已经被虚拟机加载的类型信息 常量 静态变量 即时编译器编译器后的代码缓冲等数据线程私有java虚拟机栈生命周期与线程相同。虚拟机栈描述的Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步穿件一个栈帧用于存储局部变量表 操作数栈 动态链接 方法出口等信息。每一个方法被调用直至执行完成的过程,就对应这一个.原创 2020-10-06 14:16:30 · 211 阅读 · 0 评论 -
java的四大引用类型
Java中的引用类型有四个级别分别为强引用 软引用 弱引用和虚引用强引用:比如一个对象被强引用了,那么垃圾回收机制绝对不会回收它,宁愿抛出 OutOfMemoryError 错误,使程序异常终止。软引用:如果一个对象只具有软引用,那么如果内存空间足够的时候,垃圾回收器就不会回收它,如果内存空间不够了,就会回收这些对象的内存,只要垃圾回收器没有回收,改对象就可以被程序使用。主要用于内存敏感的高速缓存。在 jvm 报告内存不足之前会清除所有的软引用,这样以来 gc 就 有可能收集软引用的对象,可能原创 2020-10-06 14:15:42 · 143 阅读 · 0 评论 -
类加载机制
什么时候会发生类加载?new对象 创建实例反射访问某个类或接口的静态变量 或是对静态变量赋值调用类的静态方法初始化一个类的子类JVM启动时标明的启动类,即文件名和类名相同的那个类类加载过程当程序主动要使用某个类时,如果该类还没有被加载到内存中,则JVM则会通过加载、连接和初始化来对类进行初始化。加载指把类的class文件读入内存,并且创建一个java.lang.Class对象。类的加载由类记载器来完成。链接当类被加载之后,系统为之生成一个对应的Class对象,接着将会进入连接阶原创 2020-10-06 14:15:03 · 178 阅读 · 0 评论 -
jvm垃圾回收机制
对象已死?给对象中添加一个引用计数器,每当有一个地方引用他时,计数器值就+1,;当引用失效时,计数器值就-1;任何时刻计数器为0的对象就是不可能在被使用。可达性路径分析法 GC Roots通过一系列的GC Roots的对象作为起始点,从这些根节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。可以作为GC Roots的对象包括以下几点虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中的类静态属原创 2020-10-06 14:14:02 · 233 阅读 · 0 评论 -
Java的引用类型
Java的引用类型有四种 强引用 软引用 弱引用和虚引用强引用:如果一个对象被强引用了,那么垃圾回收机制宁愿抛出OutOfMemoryError错误,也不会回收它。软引用如果一个对象时软引用类型的,在内存充足的情况下,垃圾回收不会回收它,一旦内存不足时,垃圾回收就会回收这个对象的内存。只要这个对象还没有被回收,该对象就可以被程序调用。软引用主要是用于内存敏感的高速缓存。在jvm报告内存不足的时候,会清理所有的软引用,这样GC就可以回收软引用的对象,解决内存吃紧的问题,避免内存溢出。弱引用如果一原创 2020-09-21 12:01:18 · 183 阅读 · 0 评论 -
【JVM】Java虚拟机方法区
方法区属于虚拟机运行时数据区域,属于全局共享的区域,可以被多个线程使用。方法区用来存储类信息、常量池、静态变量、JIT编译后的代码。JIT编译后的代码Java程序最初都是被编译为字节码,通过解释器进行解释执行,解释执行能够获得更好的启动时间。某些被频繁执行的方法或者代码块,会被JVM认定为“热点代码”。在运行时JVM会把这些热点代码编译成与本地平台相关的机器码,并且进行各种层次的优化,以提高执行效率。完成这个任务的编译器称为即时编译器(JIT编译器)...原创 2020-09-03 14:07:01 · 125 阅读 · 0 评论 -
【JVM】Java虚拟机基础概述
java虚拟机图示从图上来看 Java虚拟机大概分为执行引擎、类装载子系统、运行时数据区域和本地接口四部分组成其中执行引擎和类装载子系统为两个子系统运行时数据区域和本地接口为两个组件Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area。Execution engine(执行引擎):执行classes中的指令。Native Interface(本地接口):与native原创 2020-09-03 10:05:12 · 145 阅读 · 0 评论 -
JVM (java虚拟机) Java堆(全局共享)
对大多数应用而言,Java 堆是虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一作用就是存放对象实例,几乎所有的对象实例都是在这里分配的(不绝对,在虚拟机的优化策略下,也会存在栈上分配、标量替换的情况,后面的章节会详细介绍)。Java 堆是 GC 回收的主要区域,因此很多时候也被称为 GC 堆。从内存回收的角度看,由于现在收集器基本都采用分代收集算法,所以在Java堆被划分成两个不同的区域:新生代 (Young Generation) 、老年代 (Ol原创 2020-08-16 20:40:07 · 314 阅读 · 0 评论 -
JVM (java虚拟机) 本地方法栈(线程私有)
本地方法栈和Java虚拟机栈发挥的作用非常相似,主要区别是Java虚拟机栈执行的是Java方法服务,而本地方法栈执行Native方法服务(通常用C编写)。有些虚拟机发行版本(譬如Sun HotSpot虚拟机)直接将本地方法栈和Java虚拟机栈合二为一。与虚拟机栈一样,本地方法栈也会抛出StackOverflowError和OutOfMemoryError异常。对于一个运行中的Java程序而言,它还可能会用到一些跟本地方法相关的数据区。当某个线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限制原创 2020-08-16 20:39:06 · 862 阅读 · 0 评论 -
JVM (java虚拟机)JAVA虚拟栈(线程私有)
线程私有内存空间,它的生命周期和线程相同。线程执行期间,每个方法被执行时,都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每个方法从被调用到执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。「属于线程私有的内存区域」栈帧(Stack Frame)栈帧(Stack Frame)是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack) 的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从原创 2020-08-16 20:34:06 · 485 阅读 · 0 评论 -
JVM (JAVA虚拟机) 程序计数器
概念程序计数器是一块较小的内存区域,可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。「属于线程私有的内存区域;总结当前线程所执行的字节码行号指示器。每个线程都有一个自己的PC计数器。线程私有的,生命周期与线程相同,随JVM启动而生,JVM关闭而死。线程执行Java方法时,记录其正在执行的虚拟机字节码指令地址。如果当前执行的方原创 2020-08-16 15:13:43 · 225 阅读 · 0 评论