JVM
JVM知识
一只小P熊
这个作者很懒,什么都没留下…
展开
-
【P说】垃圾回收算法与内存分配策略
关于垃圾收集(Garbage Collection,GC)顾名思义,所谓垃圾收集,就是对垃圾进行处理,在JAVA中,垃圾就是已经死亡的或者长时间没有使用的对象,通过对这些对象进行处理,释放他们占用的空间,来防止内存溢出。WHERE垃圾收集,主要在共享区域,像线程独有的(虚拟机栈,本地方法栈,程序计数器)是不会发生GC的,GC发生在堆和方法区中。WHICH那么,哪一个对象是要被回收的。有两种算法用来判断对象是否还存活:引用计算法每一个对象维护一个整形的数值,每当这个对象被引用时该值加一,所以可以原创 2020-06-10 10:59:48 · 344 阅读 · 1 评论 -
【P说】Java对象的创建、内存布局、访问定位
Java对象的创建检查加载这是JVM对象加载的第一步。JVM遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类的加载过程。分配内存对象所需内存的大小在类加载完成后便完全确定(对象内存布局),为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。这个过程就涉及到两种内存的划分方式:指针碰撞(Bump the pointer)Java堆中的内存是规整的,所有用原创 2020-06-08 15:52:15 · 180 阅读 · 0 评论 -
【P说】JVM内存模型
各个版本内存区域的变化内存模型程序计数器程序计数器是一块较小的内存空间,可看作当前线程正在执行的字节码的行号指示器。在多线程环境下,程序计数器可以保证在线程发生切换时,可以记得自己的执行位置。同时,字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。如果当前线程正在执行的是Java方法计数器记录的就是当前线程正在执行的字节码指令的地址本地方法那么程序计数器值为undefinedJava虚拟机栈(JVM Stack)JVM原创 2020-06-08 10:54:08 · 190 阅读 · 0 评论 -
JVM垃圾回收机制
哪些内存区域需要进行垃圾回收?可以共享的内存区域就要进行垃圾回收,Java堆区和方法区。判断对象是否存活的算法引用计数算法简介引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。当一个对象被创建时,就将该对象实例分配给一个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1,但当一个对象实例的某个引用超过了生命周期或者被设置为一个新值时...原创 2020-04-01 11:29:21 · 160 阅读 · 0 评论 -
JVM四种对象引用
前言从 JDK1.2 版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。强引用例如,o就是一个强引用。Object o = new Object();特点:只要还有强引用指向一个对象,垃圾收集器就不会回收这个对象。显式地设置 o 为 null,或者超出对象的生命周期,此时就可以回收这个对象。软引用如果一个对象只具有软引用,在内存足够时,垃圾回收器...原创 2020-04-01 10:18:54 · 378 阅读 · 0 评论 -
JVM逃逸分析-对象不一定都在堆上分配
前言随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。其实,在编译期间,JIT会对代码做很多优化。其中有一部分优化的目的就是减少内存堆分配压力,其中一种重要的技术叫做逃逸分析。JVM参数XX:+DoEscapeAnalysis : 表示开启逃逸分析XX:-DoEscapeAnalysis : ...原创 2020-03-31 10:16:27 · 331 阅读 · 0 评论