
深入理解JVM相关知识
JVM相关知识总结
另一花生
竹杖芒鞋轻胜马,一蓑烟雨任平生
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
64位操作系统JAVA对象头
原创 2021-03-12 10:09:13 · 596 阅读 · 0 评论 -
G1垃圾收集器详解以及调优参数设置
(1)G1垃圾回收器,将堆内存进行了更细致的划分和管理,分为一个个Region。每个Region大小是2的整数倍。可以理解,将堆内存划分成一个Region池子。这里的每个Region,可能属于新生代,也可能属于老年代使用。(2)G1回收器对新生代和老年代都会进行工作,使用复制回收算法,可以高效,并且避免内存碎片的产生。(3)G1还规划了一个大对象Region区域。这是G1特有的一个专门用来存放大对象的地方。默认超过1/2 Region大小的对象就是大对象。(4)G1中,新生代和老年代的大小是不固原创 2021-03-10 20:46:42 · 6633 阅读 · 0 评论 -
如何进行线上系统的JVM调优
1.分析系统的背景和核心业务流程2.预估高峰时长及当时的活跃用户3.预估产生多少请求及每个请求处理时长4.预估需要部署多少台机器及每台机器每秒抗多少请求5.预估一个对象的内存大小及每秒产生对象总大小6.然后对JVM参数进行调优;7.要使用系统压测工具,进行分组压测8.使用分布式链路追踪监控系统查看效果,记录tp99,tp999,接口可用率,耗时以及JVM内存回收情况,内存对象生命周期等信息;...原创 2020-11-15 17:20:11 · 499 阅读 · 0 评论 -
G1垃圾收集器使用注意事项
对于新生代,主要目标是避免短期存活的对象进入老年代。1. 预估系统每次GC后存活对象,确保Survivor能放得下。2. 避免高峰期间,新生代对象满足动态年龄判断条件,导致短期存活对象进入老年代。3. 大对象有大对象Region,不占用老年代空间,基本不用考虑。对于老年代;1. 对于可预测停顿时间,需要合理设置,并不是越小越好,如果过小,有可能多次回收效果不大,最终导致回收失败FullGC,停顿系统线程。2. G1HeapWastePercent 这个参数,我觉得应该可以适当提高,避免万一原创 2020-11-15 17:01:08 · 1633 阅读 · 1 评论 -
FutureTask.get(timeOut)执行原理浅析
使用java多线程解决问题的时候,为了提高效率,我们常常会异步处理一些计算任务并在最后异步的获取计算结果,这个过程的实现离不开Future接口及其实现类FutureTask。FutureTask类实现了Runnable, Future接口,接下来我会通过源码对该类的实现进行详解。我们先看下FutureTask中的主要方法如下,可以看出FutureTask实现了任务及异步结果的集合功能。看到这块的方法,大家肯定会有疑问,Runnable任务的run方法返回空,FutureTask如何依靠该方法获取线程异步原创 2020-08-23 17:54:48 · 8276 阅读 · 0 评论 -
整个GC过程中应该考虑的问题
到底什么时候会尝试Minor GC?新生代填满到90%的时候:同时,说出为什么新生代是 8:1:1比例;最大化的利用新生代空间;触发MinorGC之前会如何检查老年代大小,涉及哪几个步骤和条件?MinorGC之前,发现老年代的可用内存已经小于新生代的全部对象大小,则会看一个参数: -XX:-HandlePromotionFailure是否配置了;如果有则进行下一步尝试,看看老年代的内存大小,是否大于之前每一次MinorGC后进入老年代的对象平均大小;什么时候在Mino...原创 2020-08-23 17:15:28 · 521 阅读 · 0 评论 -
垃圾回收器的选择
JVM给了三种选择:串行收集器、并行收集器、并发收集器,但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等。吞吐量优先的并行收集器java -Xmx3800m -Xms3800m -Xmn2g -Xss128k-XX:+UsePara...原创 2020-08-17 16:05:16 · 355 阅读 · 0 评论 -
方法区内会不会进行垃圾回收
满足以下三个条件:1.该类的所有实例对象都已经从Java堆内存里被回收;2.加载这个类的ClassLoader已经被回收;3.对该类的Class对象没有任何引用;原创 2020-08-16 00:59:21 · 749 阅读 · 0 评论 -
Tomcat按照委派模型的加载流程和实际实现的流程以及破坏双亲委派模型的原因
实际流程原创 2020-08-15 20:01:54 · 291 阅读 · 0 评论 -
创建的那些对象,到底在Java堆内存会占用多少内存空间
大致分为两块:一个是对象自己本身的一些信息;一个是对象的实例变量作为数据占用的空间例如,对象头在64位Linux操作系统上,会占用16字节,然后如果你的实例对象内部有个int类型的实例变量,然后如果你的实例对象内部有个int类型的实例变量,则会占用四个字节,如果是龙类型实例变量,则会占用8个字节。如果是数组,Map之类的,那么会占用更多的内存.JVM本身对这块也有优化,比如对齐填充机制,指针压缩机制;...原创 2020-08-15 18:44:44 · 511 阅读 · 0 评论 -
Tomcat这种Web容器中的类加载器应该如何设计实现
首先给出Tomcat类加载器体系如下图所示:Tomcat自定义了CommonCatalina Shared等类类加载器,其实就是用来加载Tomcat自己的一些核心基础类库的.然后Tomcat为每个部署在里面的Web应用都有一个对应的WebApp类加载器,负责加载我们部署的这个Web应用的类JSP类加载器,则是给每个JSP都准备了一个JSP类加载器.Tomcat打破了双亲委派模型机制每个WebApp负责加载自己对应的那个应用的class文件,也就是我们写好的摸个系统打包好的war...原创 2020-08-15 18:16:38 · 301 阅读 · 0 评论 -
类装载条件
class只有在必须要使用的时候才会被装载.JVM不会无缘无故的装载Class类型,Java虚拟机规定,一个类或接口在初次使用前,必须要进行初始化.主动加载的条件:1.当创建一个类的实例时,比如使用new关键字,或者通过反射,克隆,反序列化;2.当调用类的静态方法时,即当使用了字节码invokestatic指令;3.当使用类或接口的静态字段时(final常量除外),比如,使用getstatic putstatic指令;4.当时候用java.lang.reflect包中的方法反射类的...原创 2020-08-10 12:17:07 · 277 阅读 · 0 评论 -
面试题之JDK8默认垃圾回收器是什么
java -XX:+PrintCommandLineFlags -version-XX:InitialHeapSize=266390080 -XX:MaxHeapSize=4262241280 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGCjava version ".原创 2020-06-08 12:27:59 · 13387 阅读 · 3 评论