JVM
h_lizeming
这个作者很懒,什么都没留下…
展开
-
Java本地方法栈
本地方法栈和Java虚拟机栈实现的功能类似,只不过本地方法栈是本地方法运行的内存模型.本地方法被执行的时候,在本地方法栈也会创建一个栈帧,用于存放该本地方法的局部变量表\操作数栈\动态链接\出口信息.方法执行完毕后相应的栈帧也会出栈并释放内存空间.也会抛出OutOfMemoryError和StackOverflowError异常.Java本地方法栈的特征:本地方法栈和java虚拟机栈十...原创 2019-03-29 14:23:03 · 1704 阅读 · 0 评论 -
方法区
与Java堆一样都是线程共享的(所以要注意线程安全问题,当A,B线程试图寻找temp_A类,但是temp_A类还没有加载所以一个线程执行类加载,另一个则等待。),只要是存储已被虚拟机加载的类信息,常量(方法区中有常量池),静态变量,即编译器编译后的代码等数据。1、类型信息类型的全限定名超类的全限定名直接超接口的全限定名类型标志(该类是类类型还是接口类型)类的访问描述符(p...原创 2019-03-29 13:33:20 · 949 阅读 · 0 评论 -
常量池(运行时常量池 静态常量池)
深入浅出java常量池理论 jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令。 本地方法栈是jvm调用操作系统方法所使用的栈。 虚拟机栈是jvm执行java代码所使用的栈。 方法区存放了一些常量、静态变量、类信息等,可以理解成class文件在内存中的存放位置。 虚...转载 2019-03-29 11:39:16 · 3735 阅读 · 2 评论 -
JVM
JVM194. 说一下 JVM 的主要组成部分?及其作用?• 类加载器(ClassLoader)• 运行时数据区(Runtime Data Area)• 执行引擎(Execution Engine)• 本地库接口(Native Interface)组件的作用: 首先通过类加载器(ClassLoader)会把 J...原创 2019-03-29 10:20:21 · 297 阅读 · 0 评论 -
JVM内存的结构与永久代的消失
所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了解那块的内存区域出现问题,以便于快速的解决生产故障。先看一张图,这张图能很清晰的说明JVM内存结构布局。JVM...转载 2019-03-31 10:06:14 · 364 阅读 · 0 评论 -
JVM_垃圾收集器
垃圾收集器如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现Serial收集器串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会Stop The World(服务暂停)参数控制:-XX:+UseSerialGC串行收集器ParNew...转载 2019-03-31 09:45:11 · 218 阅读 · 0 评论 -
JVM垃圾回收算法
JVM垃圾回收算法常见的垃圾回收算法包括:标记-清除算法,复制算法,标记-整理算法,分代收集算法。在介绍JVM垃圾回收算法前,先介绍一个概念。Stop-the-WorldStop-the-world意味着 JVM由于要执行GC而停止了应用程序的执行,并且这种情形会在任何一种GC算法中发生。当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态直到GC任...原创 2019-03-31 09:29:00 · 229 阅读 · 0 评论 -
类的加载
1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次...转载 2019-03-30 21:02:43 · 1064 阅读 · 0 评论 -
JVM
JVM介绍和源码首先JVM是一个虚拟机,当你安装了jre,它就包含了jvm环境。JVM有自己的内存结构,字节码执行引擎,因此class字节码才能在jvm上运行,除了Java以外,Scala,groovy等语言也可以编译成字节码而后在jvm中运行。JVM是用c开发的。JVM内存模型内存模型老生常谈了,主要就是线程共享的堆区,方法区,本地方法栈。还有线程私有的虚拟机栈和程序计数器。堆区存放...转载 2019-03-29 19:00:38 · 185 阅读 · 0 评论 -
java中静态变量,静态代码块,静态方法,实例变量,匿名代码块等的加载顺序
一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种:1.普通代码块:就是类中方法的方法体 public void xxx(){ //code }2.构造块:用{}裹起来的代码片段,构造块在创建对象时会被调用,每次创建对象时都会被调用,并且优先于类构造函数执行。 构造块中定义的变量是局部变量。 { //code }...原创 2019-03-29 18:21:51 · 312 阅读 · 0 评论 -
堆
一 堆描述堆是用来存放对象的内存空间,几乎所有的对象都存储在堆中.对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块.Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存.这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配,但是随着JIT...原创 2019-03-29 15:41:44 · 167 阅读 · 0 评论 -
Java虚拟机栈
一 Java虚拟机栈概念。Java虚拟机栈中存储的内容,它用于存储数据和部分过程结果的数据结构,同时也被用来处理动态链接/方法返回值和异常分派.一个完整的栈帧包括:局部变量表/操作数栈/动态链接信息/方法正常完成和异常完成信息.Java虚拟机栈是描述Java方法运行过程的内存模型.Java虚拟机会为每一个即将运行的Java方法创建一块叫做”栈帧”的区域,这块区域用于存储该方法在运行过...原创 2019-03-29 15:15:02 · 388 阅读 · 0 评论 -
程序计数器
一 程序计数器概念程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现)1.字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、2.线程恢复等基础功能都需要依赖这个计数器来完成。- - 摘自《深入理解Java虚拟机》程序计数器是...转载 2019-03-29 13:46:29 · 5061 阅读 · 0 评论