![](https://img-blog.csdnimg.cn/20200709100923702.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM
JMM、GC、类加载
qq_45239139
这个作者很懒,什么都没留下…
展开
-
JVM:垃圾回收过程
(1)创建一个新对象,判断该对象是否大于或者等于大对象的阈值(JVM用-XX:PretenureSizeThreshold来定义),如果判断为大对象,则直接进入堆上的老年代区域,此时如果老年代没有足够可用空间大小分配该对象所需的内存,则触发 Full GC(2)如果判断为小对象,则优先在堆上的新生代 Eden 区域分配内存,如果内存足够存放,则对象创建结束,不存在垃圾回收过程(3)如果Eden没有足够的内存空间分配,则JVM会进行一次 Minor GC (新生代垃圾回收)在进行 Minor GC 之前原创 2020-07-03 10:22:48 · 115 阅读 · 1 评论 -
JVM:Java内存模型
Java 内存模型 (Java Memory Model)屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果JMM 定义程序中各种变量的访问规则,也就是关注在虚拟机中把变量储存在内存和从内存中取出变量值这样的底层细节Java内存模型主要是为了解决并发编程过程的原子性、可见性和有序性去建立的,解决了由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序等带来的问题这里所谓的变量和平常书写代码所涉及到的变量有所区别,它主要包原创 2020-06-19 21:13:33 · 111 阅读 · 0 评论 -
JVM:触发Full Gc 的情况
一、System.gc()调用这个方法会增大触发FULL GC 的概率,但不是一定会触发 GC ,这个方法的执行只是建议 JVM 执行 GC,一般不会用到该方法,只是再观察 GC 现象的时候可能会用到二、老年代空间不足当把对象存放入老年代的时候,如果老年代空间不足,就会触发 Major GC四种种情况:a)当在新生代存活时间足够长时,要进入老年代b)当 Survivor 空间不足,存活的对象无法存入 Survivor 区,就需要老年代担保,将对象存入老年代c)大对象直接存入老年代,例如很长的字原创 2020-06-17 11:43:37 · 515 阅读 · 0 评论 -
JVM:对象的创建过程以及对象的内存布局
探索在虚拟机中,创建一个普通 java 对象(也就是 new 一个实例)的过程当 java 虚拟机遇到一条 new 字节码指令的时候,首先会检查该类是否有被加载、解析和初始化(也就是类加载过),如果没有,那么先进行类加载过程当类加载完成后,接下来就要为对象分配内存,所需内存大小在类加载完成之后就可以完全的确定下来,所以只需在 java 堆中划分出足够大小的内存给该对象即可,这其中涉及到 java 堆内存是否规整(也就是说没有被使用的内存和使用的内存是分开存放还是杂乱交错在一起的),两种解决方法如原创 2020-06-15 09:31:21 · 138 阅读 · 0 评论 -
JVM:OutOfMemoryError
OutOfMemory概念:资源用完了,官方文档解释:当JVM 没有足够的内存来为对象分配内存空间并且垃圾回收也没有可以回收的空间时,就会抛出 OutOfMemory Error (已经不是 Exception 了,程序无法解决)出现 OOM 的原因(1)虚拟机分配的内存太少(一般通过VM参数设置)(2)申请的内存无法释放或者内存占用过多,无法申请新的内存,造成内存溢出或者内存泄漏内存溢出:内存可用空间太少,无法为对象分配足够的内存,申请的内存加上已使用的内存大小超过 JVM 提供的内存大小内原创 2020-06-14 13:36:03 · 242 阅读 · 0 评论 -
JVM:Java内存区域
线程私有(独享区域)1.程序计数器:当前字节码指令的指示器,因为线程之间进行切换后,再次回到本线程时,要知道进行到哪一步了,下一步应该执行那个指令,程序计数器的功能就是如此,此区域是唯一一个没有规定任何 OOM 情况的区域程序计数器记录的内容:(1)如果正在执行的是一个 java 方法,那么程序计数器记录的是正在执行的虚拟机字节码指令的地址(2)如果正在执行的是本地(Native)方法,那么程序计数器的值为空2.Java虚拟机栈通常所说的"栈" 就是指的是 虚拟机栈,虚拟机栈的生命周期和线程相原创 2020-06-12 20:35:05 · 76 阅读 · 0 评论 -
GC
Garbage Collection ,Java进行启动后创建垃圾回收线程(垃圾回收线程是一个守护线程)垃圾回收的时机:(1)显示的调用 System.gc(),此处只是建议 JVM 进行 Full GC,并不是一调用就会调用垃圾回收机制,一般是JVM自己来进行垃圾回收(2)JVM 垃圾回收机制:a)创建对象时需要分配内存,如果空间不足,触发 GCb)其他机制java.lang.Obj...原创 2020-04-13 21:27:52 · 157 阅读 · 0 评论