![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 79
java虚拟机
少负 | 气节
用确定的今天,来换不确定的明天
展开
-
JVM内存溢出(五)之新生代老年代
也叫新生代,顾名思义,主要是用来存放新生的对象。新生代又细分为 Eden区、SurvivorFrom区、SurvivorTo区。新创建的对象都会被分配到Eden区(如果该对象占用内存非常大,则直接分配到老年代区), 当Eden区内存不够的时候就会触发MinorGC(Survivor满不会引发MinorGC,而是将对象移动到老年代中),在Minor GC开始的时候,对象只会存在于Eden区和Survivor from区,Survivor to区是空的。原创 2023-07-20 14:39:53 · 413 阅读 · 0 评论 -
JVM内存溢出(四)之垃圾回收器
jvm拥有自己的垃圾回收机制,可以自动进行垃圾回收,释放内存。原创 2023-07-20 10:54:30 · 135 阅读 · 0 评论 -
JVM内存溢出(二)之双亲委派机制
站在java虚拟机的角度看,JVM支持两种加载器,分别为引导类加载器(BootstrapClassLoader)和自定义类加载器。从概念上来说自定义加载器一般是程序中由开发人员定义的一类加载器,然而java虚拟机规范中并没有这样定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义加载器。一般来说在java8以及以前的版本都会用到如下三种加载器:启动类加载器(Bootstrap Class Loader)扩展类加载器(Extension Class Loader)原创 2023-07-18 09:42:28 · 211 阅读 · 0 评论 -
JVM内存溢出(三)之JVM8内存模型
堆是一个所有线程共享的,存放对象的区域,也是GC的主要区域。Eden中存放的是通过new 或者newInstance方法创建出来的对象,绝大多数都是很短命的,正常情况下经历一次gc之后,存活的对象会转入到其中一个Survivor区,然后再经历默认15次的gc,就转入到老年代,这是常规状态下。其中堆和元空间是线程共享的,而Java虚拟机栈、本地方法栈、程序计数器是线程隔离的。本地方法栈与Java虚拟机栈的区别是,虚拟机栈执行的是Java方法,本地方法栈执行的是本地方法(Native Method)原创 2023-07-17 14:58:52 · 288 阅读 · 0 评论 -
JVM内存溢出(一)之排查初体验
本人推荐jvisualvm.exe 和 jprofiler 两款分析工具,其中jvisualvm在jdk中bin目录中可以找到。可知是数组扩容是出现的出现堆溢出Arrays.copyOf(Arrays.java:3332)发生的业务方法 Test类20行处: at Test.main(Test.java:20)业务行Test类20行:Test.main(Test.java:20)日志分析为三部分:控制台日志、dump文件和GC日志。2.1控制台日志(如1.3中出现的日志)dump文件内容如下。原创 2023-07-17 09:59:23 · 204 阅读 · 0 评论