
jvm
文章平均质量分 75
Micrle_007
这个作者很懒,什么都没留下…
展开
-
什么样的对象会被直接放入老年代
我们知道,老年代放不下后就会触发Full GC,导致stop the world,那么我们的目标就是尽量不要触Full GC,要做到这个就希望除了线城池,spring bean等这种要一直存存活的对象,其它对象的生命周期再新生代就结束,不要存活到老年代,这样子就可以尽量保证老年代内存充足,很少触发full gc,那么再此之前,我们得知道对象在什么时候会移动到老年代中。1、大对象直接进入老年代大对象就是需要大量连续内存空间的对象(比如:字符串、数组),JVM参数-XX:PretenureSizeThr转载 2021-06-29 10:37:35 · 4597 阅读 · 0 评论 -
jstack分析CPU高的问题
一、jstack 命令参数二、jstack解决问题1、死循环导致cpu飙高死循环的例子:https://blog.youkuaiyun.com/goldenfish1919/article/details/8755378步骤:查找进程-》查找线程-》分析threadDump日志-》找出问题代码a、查看cpu高的java进程top // linux下的命令b、生成进程下所有线程的栈日志jstack 1721 > 1721.txtc、查看进程下哪些线程占用了高的cpu原创 2021-03-29 21:32:40 · 577 阅读 · 0 评论 -
JProfiler分析内存泄漏
在最近的工作中,通过JProfiler解决了一个内存泄漏的问题,现将检测的步骤和一些分析记录下来,已备今后遇到相似问题时可以作为参考。运行环境:Tomcat6,jdk6,JProfiler8内存泄漏的现象:1. 在服务器中执行某些批量操作的时候,发现内存只升不降;就算gc后,内存也不能被完全释放;2. 除非重启tomcat服务器,内存永远不会被释放,反复执行这些操作,会导致无可用内存,tomcat死掉;使用JProfiler检查内存泄漏的步骤:1. 初始化检验环...转载 2021-03-29 20:54:36 · 1983 阅读 · 0 评论 -
jmap命令的使用
https://www.cnblogs.com/kongzhongqijing/articles/3621163.htmljdk安装后会自带一些小工具,jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等。可以使用jmap生成Heap Du转载 2021-01-22 09:29:48 · 531 阅读 · 0 评论 -
JVM垃圾收集算法
Java虚拟机垃圾回收(三) 7种垃圾收集器主要特点 应用场景 设置参数 基本运行原理 在《Java虚拟机垃圾回收(一) 基础》中了解到如何判断对象是存活还是已经死亡?在《Java虚拟机垃圾回收(二) 垃圾回收算法》了解到Java虚拟机垃圾回收的几种常见算法。 下面先来了解HotSpot虚拟机中的7种垃圾收集器:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1,先介绍一些垃圾收集的相关概...转载 2020-11-05 14:50:41 · 210 阅读 · 0 评论 -
jvm系列:Java服务GC参数调优案例
本文介绍了一次生产环境的JVM GC相关参数的调优过程,通过参数的调整避免了GC卡顿对JAVA服务成功率的影响。这段时间在整理jvm系列的文章,无意中发现本文,作者思路清晰通过步步分析最终解决问题。我个人特别喜欢这种实战类的内容,经原作者的授权同意,将文章分享于此。备注部分为本人添加,主要起到说明的作用。原文出处:https://segmentfault.com/a/1190000005174819背景以及遇到的问题我们的Java HTTP服务属于OLTP类型,对成功率和响应时间的要求比转载 2020-10-09 14:40:11 · 238 阅读 · 0 评论 -
JVM 为什么使用元空间替换了永久代
在Java8和以后版本中JVM的内存结构慢慢发生了变化。如果在网络上搜索JVM内存结构,90%的可能会搜到Java7及以前的内存图,本篇文章将会对JVM内存结构再次细化,深入理解Java8之后内部的变化。JVM内存结构的细化 再来看一下JVM内存结构图。为了更细化的讲解,我们将该图进行进一步的优化调整。针对java7及以前版本的细化。看出变化了吗?堆和方法区连在了一起,但这并不能说堆和方法区是一起的,它们在逻辑上依旧是分开的。但在物理上来说,它们又是连续的一块内存。也就是说,方法区和原创 2020-10-09 14:04:24 · 393 阅读 · 0 评论 -
JVM类加载的各阶段过程(加载、验证、准备、解析、初始化)
0 使用类的准备工作任何程序都需要加载到内存才能与CPU进行交流同理, 字节码.class文件同样需要加载到内存中,才可以实例化类ClassLoader的使命就是提前加载.class 类文件到内存中在加载类时,使用的是Parents Delegation Model(溯源委派加载模型)Java的类加载器是一个运行时核心基础设施模块,主要是在启动之初进行类的加载、链接、初始化Load由类加载器执行。读取类文件(通常在 classpath 所指定的路径中查找,但classpath非必须)转载 2020-10-01 04:22:24 · 769 阅读 · 0 评论 -
JVM方法区
方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 使用HotSpot虚拟机的用户,更愿意把方法区称为“永久代”,本质上两者并不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分代收集至方法区,或者说用永久代来实现方法区而已。这样HotSpot的垃圾收集器可以像管理Java堆一样管理这部分内存,能省去专门为方法区编写内存管理代码的工作。 移除永久代的工作从JDK1.7就开始了。JDK1.7中,存储在永久代的部原创 2020-09-28 19:12:56 · 190 阅读 · 0 评论 -
JVM的内存区域划分
学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: ...转载 2019-01-08 15:45:12 · 229 阅读 · 0 评论