![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM基础
JVM基础知识总结
诗织_王大大
4年工作经验
展开
-
强引用、弱引用、软引用和虚引用
Java执行GC判断对象是否存活有两种方式其中一种是引用计数。 引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。 从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵...原创 2020-04-30 16:00:40 · 116 阅读 · 0 评论 -
堆的内存划分以及GC回收
堆的内存划分 Java堆的内存划分如图所示,分别为年轻代、Old Memory(老年代)、Perm(永久代)。在jdk1.8中,永久代被移除,使用MetaSpace代替。 新生代 使用复制清除算法(Copying算法),原因是年轻代每次GC都要回收大部分对象。新生代里面分成一份较大的Eden空间和两份较小的Survivor空间。每次只使用Eden和其中一块Survicor空间,然后垃圾回收的时...原创 2020-04-30 11:49:51 · 586 阅读 · 0 评论 -
JMM Java内存模型
JMM Java内存模型 Java的并发采用“共享内存"模型,线程之间通过读写内存的公共状态进行通讯,多个线程之间是不能通过直接传递数据交互的,它们之间的交互只能通过共享变量实现。 主要目的是定义程序中各个变量的访问规则。 Java内存模型规定所有变量都存储在主内存中,每个线程还有自己的工作内存。 线程的工作内存中保存了该线程使用到的变量的拷贝(从主内存中拷贝过来),线程对变量的所有操作都必须...原创 2020-04-29 14:03:23 · 160 阅读 · 0 评论 -
jvm运行时数据区
Java虚拟机在执行Java程序的过程中,会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,如图: 程序计数器:指向当前线程正在执行的字节码指定。线程私有的。 虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压入栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈; 栈帧:栈帧存储方法的相关信息,包含局部变量数...原创 2020-04-29 13:21:54 · 103 阅读 · 0 评论 -
jvm类加载机制
11原创 2020-04-28 11:54:55 · 96 阅读 · 0 评论