JVM
文章平均质量分 87
无法无天过路客
Java程序员一枚,喜欢记录收集技术文章
展开
-
JavaGC 日志介绍
JVM GC 相关的参数-XX:+PrintGC 输出 GC 日志-XX:+PrintGCDetails 输出 GC 的详细日志-XX:+PrintGCTimeStamps 输出 GC 的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出 GC 的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAtGC 在进行 GC 的前后打印出堆的信息-Xloggc:D:/gc.log 日志文件的输出路径示例比如转载 2020-06-30 21:15:21 · 285 阅读 · 1 评论 -
JVM垃圾收集器对比及使用场景
一、常见垃圾收集器现在常见的垃圾收集器有如下几种:新生代收集器:SerialParNewParallel Scavenge老年代收集器:Serial OldCMSParallel Old堆内存垃圾收集器:G1每种垃圾收集器之间有连线,表示他们可以搭配使用。二、新生代垃圾收集器(1)Serial 收集器Serial 是一款用于新生代的单线程收集器,采用复制算法进行垃圾收集。Serial 进行垃圾收集时,不仅只用一条线程执行垃圾收集工作,它在收集的同时,所有的用户线程必须暂转载 2020-06-30 21:11:15 · 507 阅读 · 0 评论 -
垃圾回收基础知识
前言Java 相比 C/C++ 最显著的特点便是引入了自动垃圾回收 (下文统一用 GC 指代自动垃圾回收),它解决了 C/C++ 最令人头疼的内存管理问题,让程序员专注于程序本身,不用关心内存回收这些恼人的问题,这也是 Java 能大行其道的重要原因之一,GC 真正让程序员的生产力得到了释放,但是程序员很难感知到它的存在,这就好比,我们吃完饭后在桌上放下餐盘即走,服务员会替你收拾好这些餐盘,你不会关心服务员什么时候来收,怎么收。有人说既然 GC 已经自动我们完成了清理,不了解 GC 貌似也没啥问题。在大转载 2020-06-30 20:49:52 · 853 阅读 · 0 评论 -
JVM - 堆内存溢出后,其他线程是否可以继续工作
答案是其他线程可以继续运行,其实发生OOM的线程一般情况会死亡,也就是会被终结掉,该线程持有的对象占用的heap都会被GC回收,释放内存。因为发生OOM之前要进行GC,就算其他线程能够正常工作,也会因为频繁的GC产生较大的影响...原创 2019-06-26 15:46:04 · 390 阅读 · 1 评论 -
JVM - 这 17 个 JVM 参数,高级 Java 必须掌握!
前言大家都知道,jvm在启动的时候,会执行默认的一些参数。一般情况下,这些设置的默认参数应对一些平常的项目也够用了。但是如果项目特别大了,需要增加一下堆内存的大小、或者是系统老是莫明的挂掉,想查看下gc日志来排查一下错误的原因,都需要咱们手动设置这些参数。各个参数介绍1.verbose:gc表示,启动jvm的时候,输出jvm里面的gc信息。格式如下:[Full GC 178K->...原创 2019-08-01 11:02:58 · 152 阅读 · 0 评论 -
JVM - 垃圾回收机制
在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。垃圾回收就是释放垃圾占用的空间。虽然JVM会帮助程序员去处理垃圾回收,但是我们还是要了解GC和内存分配,因为当我们需要排查各种内存溢出、内存泄漏问题、当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。一.如何确定某个对象是“垃圾”?既然垃圾收集器的任务是回收垃...原创 2019-07-05 13:14:43 · 117 阅读 · 0 评论 -
JVM - 如何判断一个对象的生死状态
JVM中判断对象的生死状态的算法有以下几个:一、引用计数器算法引用计算器判断对象是否存活的算法是这样的:给每一个对象设置一个引用计数器,每当有一个地方引用这个对象的时候,计数器就加1,与之相反,每当引用失效的时候就减1。优点: 实现简单、性能高。缺点: 增减处理频繁消耗cpu计算、计数器占用很多位浪费空间、最重要的缺点是无法解决循环引用的问题。因为引用计数器算法很难解决循环引用的问题,所...原创 2019-07-04 16:44:08 · 181 阅读 · 0 评论 -
JVM - OOM可能发生在哪些区域上
根据Java doc的描述,OOM是指JVM的内存不够用了,同时垃圾收集器也无法提供更多的内存。从描述中可以看出,在JVM抛出OutOfMemoryError之前,垃圾收集器一般会出马先尝试回收内存。从上面分析的Java数据区来看,除了程序计数器不会发生OOM外,哪些区域会发生OOM的情况呢?堆内存,堆内存不足是最常见的发送OOM的原因之一。如果在堆中没有内存完成对象实例的分配,并且堆无...原创 2019-07-04 16:24:18 · 7395 阅读 · 0 评论 -
JVM - 内存区域详解
对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。Java 虚拟机在执行 Java 程...原创 2019-07-04 15:34:27 · 212 阅读 · 0 评论