
JVM
文章平均质量分 96
温柔的皮卡丘
这个作者很懒,什么都没留下…
展开
-
05-JVM调优实战
这个因为之前已经大概知道Young GC的频率,假设是每5分钟一次,那么可以执行命令 jstat -gc pid 300000 10 ,观察每次结果eden,survivor和老年代使用的变化情况,在每次gc后eden区使用一般会大幅减少,survivor和老年代都有可能增长,这些增长的对象就是每次Young GC后存活的对象,同时还可以看出每次Young GC后进去老年代大概多少对象,从而可以推算出老年代对象增长速率。在编译期其字符串常量的值就确定下来,故上面程序最终的结果都为true。原创 2022-10-19 23:58:21 · 214 阅读 · 0 评论 -
04-垃圾收集器
而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。算法分为“标记”和“清除”阶段:标记存活的对象, 统一回收所有未被标记的对象(一般选择这种);当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。根据老年代的特点特出的一种标记算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存。原创 2022-10-04 20:08:46 · 855 阅读 · 0 评论 -
02-JVM整体结构深度解析
显然,本机直接内存的分配不会受到Java堆大小的限制,但是,既然是内存,则肯定还是会受到本机总内存(包括物理内存、SWAP分区或者分页文件)大小以及处理器寻址空间的限制,一般服务器管理员配置虚拟机参数时,会根据实际内存去设置-Xmx等参数信息,但经常忽略掉直接内存,使得各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),从而导致动态扩展时出现。Java堆既可以被实现成固定大小的,也可以是可扩展的,不过当前主流的Java虚拟机都是按照可扩展来实现的(通过参数-Xmx和-Xms设定)。原创 2022-09-30 22:07:53 · 475 阅读 · 0 评论 -
01-JVM类加载机制
Tomcat打破双亲委派机制Tomcat是个WEB容器,主要解决一下几个问题:1、一个WEB容器可能会部署多个应用程序,不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求同一个类库在同一个服务器只有一份,因此要保证每个程序都是独立的,保证相互隔离。2、部署在同一个web容器中的相同类库的相同版本可以共享。否则若部署多个程序,那么会有多个相同的类库加载进虚拟机。3、web容器也有自己的类库,不能与应用程序类库混淆。基于安全考虑,应该让容器的类库和应用程序的类库隔离开。4、JSP文件最终也原创 2022-10-01 12:12:15 · 134 阅读 · 0 评论 -
03-JVM内存分配机制详解
大量对象创建在Eden区,等Eden区满了后,会触发Minor GC,其中99%的对象会被回收掉,剩余存活的对象会进入到一块有空间的Survivor区。一般来说Java对象都是在堆上分配的,当对象没有引用时,需要GC进行回收,如果对象数量较多,回收会有一定的压力,也间接影响性能。给对象添加一个计数器,每当有一个对象引用它时,计数器就加1,当引用失效,计数器减1,当计数器归0时,就表示这个对象没有任何引用,可以回收。堆中存放着几乎所有对象的实例,对堆进行垃圾回收,首先就要判断哪些对象已死亡。原创 2022-09-28 23:09:04 · 944 阅读 · 1 评论