![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
藤原豆腐店-
准备迁移博客,新博客地址:https://www.jianshu.com/u/16102e967c0f
展开
-
Java内存模型 内存管理机制理解
JVM主要将内存分为栈和堆。如果细分的话有程序计数器,虚拟机栈,本地方法栈、堆、方法区。如图所示 程序计数器由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时间的,在任一具体时刻,一个CPU的内核只会执行一条线程中的指令,因此,为了能够使得每个线程都在线程切换后能够恢复在切换之前的程序执行位置,每个线程都需要有自己独立的程序计数器,并且不能互相被干扰,否则就会影响到程序...原创 2019-02-26 17:20:35 · 301 阅读 · 0 评论 -
JVM垃圾回收机制GC解析
GC是在什么时候,对什么东西,做了什么事情?1.什么时候 年轻代:划分为三个区域:原始区(Eden)和两个小的存活区(Survivor),两个存活区按功能分为From和To。绝大多数的对象都在原始区分配,超过一个垃圾回收操作仍然存活的对象放到存活区。垃圾回收绝大部分发生在年轻代。年老代:存储年轻代中经过多个回收周期仍然存活的对象,对于一些大的内存分配,也可能直接分配到永久代。持...原创 2019-02-26 17:20:32 · 196 阅读 · 0 评论 -
GC 深入解析JVM垃圾回收机制
垃圾回收程序计数器、 虚拟机栈、 本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。 每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译器进行一些优化,但在本章基于概念模型的讨论中,大体上可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因...转载 2019-02-26 17:20:27 · 181 阅读 · 0 评论 -
java JVM类加载机制 双亲委派机制
类加载是将类的.class文件读入内存,通常是创建一个字节数组读入class文件内容。然后生成对应的class对象,加载类完成,不过这时候的类还不能使用,之后还要经过验证、准备(为静态变量分配内存并设置变量的初始值)、解析(将符号引用替换为直接引用)。最后JVM对类进行初始化,如果当前类有父类,则先去初始化父类。如果当前类中有初始化语句,则去依次执行这些初始化语句。具体过程:JVM类加载机制分...原创 2019-02-26 17:20:23 · 336 阅读 · 0 评论 -
JVM中常量池存放在哪里
Java6和6之前,常量池是存放在方法区中的。Java7,将常量池是存放到了堆中,常量池就相当于是在永久代中,所以永久代存放在堆中。Java8之后,取消了整个永久代区域,取而代之的是元空间。没有再对常量池进行调整。...原创 2019-02-26 16:58:05 · 34804 阅读 · 40 评论 -
GC可达性分析回收算法 解决循环引用问题 强引用弱引用
JVM有一个回收算法是引用计数算法,每当对象被引用一次,就+1,释放一个引用就-1,当垃圾回收时,引用计数为0的对象就会被GC掉。但这个方法有个问题,就是无法解决循环引用的问题。循环引用就是对象A引用了对象B,对象B引用了对象A,构成了一个引用环。彼此都没发挥什么作用,但却不会被GC。为了解决这个问题,就有了可达性分析回收算法。可达性分析:算法中定义了几个GC Root对象,这几个ro...原创 2019-03-05 16:06:01 · 3972 阅读 · 0 评论