
JAVA虚拟机
文章平均质量分 91
发财猪猪
做个小笔记呀~
展开
-
调优
目录参数设置堆大小设置辅助信息调优经验如何将新对象预留在年轻代如何让大对象进入年老代如何设置对象进入年老代的年龄稳定的 Java 堆 VS 动荡的 Java 堆选择正确的垃圾回收器 参数设置 堆大小设置 - -Xmx3550m:设置JVM最大可用内存为3550M - -Xms3550m:设置JVM初始内存为3550m,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存 - -Xmn2g:设置年轻代大小为2G - -Xss128k:设置每个线程的堆栈大小 -XX:NewRatio=4:设原创 2021-02-25 09:45:29 · 77 阅读 · 0 评论 -
故障排除
目录CPU通过jstack分析频繁gc内存堆内内存OOMStack Overflow分析内存问题gc问题和线程 CPU 通过jstack分析 我们先用ps命令找到对应进程的pid(如果你有好几个目标进程,可以先用top看一下哪个占用比较高) 接着用top -H -p pid来找到cpu使用率比较高的一些线程 然后将占用最高的pid转换为16进制printf '%x\n' pid得到nid 接着直接在jstack中找到相应的堆栈信息jstack pid |grep '0xnid' -C5 –color 可以原创 2021-02-25 09:44:43 · 257 阅读 · 0 评论 -
对象回收
目录如何判断对象是否死亡引用计数法可达性分析算法GCROOT对象可回收,就一定会被回收吗强引用,软引用,弱引用,虚引用强引用(StrongReference)软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomReference)垃圾收集算法标记-清除算法过程优缺点复制算法过程优缺点标记-整理算法过程优缺点分代收集算法垃圾收集器Serial收集器工作原理参数ParNew收集器工作原理参数Parallel Scavenge收集器工作原理参数Serial Old收集器P原创 2021-02-25 09:43:57 · 671 阅读 · 1 评论 -
对象创建
目录对象的创建过程类加载加载过程连接验证准备解析初始化执行类构造器 `()`初始化顺序触发初始化的情况分配内存栈上分配逃逸分析的作用参数配置TLAB分配为什么需要TLABrefill_waste参数配置堆上分配新生代的分配对象何时晋升老年代空间分配担保Stop The WorldSafe Point内存分配的两种方式初始化零值设置对象头执行 init 方法类加载器启动类加载器(引导类加载器,Bootstrap ClassLoader)扩展类加载器(Extension ClassLoader)应用程序类加载器原创 2021-02-25 09:39:54 · 91 阅读 · 0 评论 -
内存区域
目录内存区域(运行时数据区)线程私有虚拟机栈虚拟机栈会出现两种异常程序计数器本地方法栈线程共享的堆方法区运行时常量池方法区和永久代的关系为什么要将永久代(PermGen)替换为元空间(MetaSpace)呢?直接内存堆外内存的对象回收如果JVM一直没有执行FGC的话,无效的Cleaner对象就无法放入到ReferenceQueue中,从而堆外内存也一直得不到释放,内存岂不是会爆 内存区域(运行时数据区) JDK 1.8之前: JDK 1.8 : 线程私有 虚拟机栈 生命周期与线程相同 每个方法被执行的原创 2021-02-25 09:33:14 · 190 阅读 · 0 评论