![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
nanfeiliulanghan
为it梦想而奋斗!
展开
-
JVM-常用的参数
(1)-Xms256m 堆初始化值 (2)-Xmx256m 堆最大值 (3)-XX:NewRatio=2 年轻代和老年代比例为1:2 (4)-XX:SurvivorRatio=8 年轻代中的Eden区和两个survivor区比例是8:1:1 (5)-XX:PrintGC 打印GC日志 (6)-XX:PrintGCDetails 打印GC日志详情 (7)-XX:+UseParNewGC 使用ParNew 和 Serial Old垃圾回收器组合 (8)-XX:+UseParllelOldGC 使用原创 2021-01-31 11:23:28 · 468 阅读 · 0 评论 -
JVM-GC下
1.垃圾收集器有Serial(串行)收集器,ParNew收集器,Parallel收集器,CMS收集器,G1收集器 (1)Serial收集器:该收集器是最古老的,单线程的,发生GC的时候,用户的应用程序会被暂停,然后单线程执行GC,执行完了再继续执行应用程序,所以会出现卡顿现象(STW) (2)ParNew收集器:是Serial多线程版,发生GC的时候多线程来完成 (3)Parallel收集器:国内用的最多的,也是默认的使用收集器,它充分利用的CPU资源,并发进行GC回收。它年轻代用复制算法,老年代用标原创 2020-07-01 01:56:51 · 98 阅读 · 0 评论 -
JVM-GC中
1.垃圾回收方法: (1).标志清除法:比较古老的方法,在内存中标志所有需要回收的对象,然后在内存中找出已标志的对象进行一一回收,该方法效率不高,同时会产生大量内存碎片。 (2)复制算法:开一片大小一样的内存空间,把存活对象转移到新的片区即(to),对原来的内存片区(from)全部清除。 (3)标志-整理算法:标志存活对象,把存活对象往内存某区聚集移动,然后对边界外的内存进行回收。 (4)分代收集算法:根据不同年代对象存活率不一样应用上面3种不同算法,如年轻代一般可回收的对象比较多,回收原创 2020-07-01 00:45:49 · 128 阅读 · 0 评论 -
JVM-GC上
1.垃圾回收中主要同个引用计数法和可达性分析法来判断对象是否可以回收。 (1)引用计数法:当对象被其他对象引用计数+1,当其他对象解除引用当前对象则-1,最终进行GC的时候会对计数为0的对象进行回收。 (2)可达性分析法:会根据当前对象是否有roots跟引用,如果没有则会对其进行回收,可以作为跟引用的主要有:Thread、类加载器、static静态成员、本地方法栈、栈帧中的局部变量等。 2.如何判断一个常量是否可以被回收,主要通过判断其是否被其他对象引用,如常量池中的"hg"字符串,没有被Stri原创 2020-07-01 00:28:24 · 100 阅读 · 0 评论 -
jvm-类加载机制上
类的生命周期: 类的生命周期包括: 1.加载.class文件,即加载阶段 2.验证有没有编译错误,即验证阶段 3.给类静态变量分配内存,并赋默认值,即准备阶段 4.解析类依赖了哪些其他类,类加载器载入其他类,即解析阶段 5.给静态变量赋值(上面那个是默认值,跟这个不一样),即初始化阶段 6.使用 7.卸载 ...原创 2020-06-25 13:55:19 · 121 阅读 · 0 评论 -
JVM-对JVM的理解-下
1.jvm中方法区和堆是内存共享区,其中方法区主要是用来存放类中的静态变量、常量、类信息以及运行时常量池;堆主要是用户存放实例对象,堆的内部结构如下: 由上面图,堆内包括年轻代(占1/3)和老年代(2/3)组成,Eden是对象最初存放位置,当Eden中的对象存放满了,就会触发YGC,而幸存的对象会存到From区,当From区满了也会进行YGC,而From中幸存的实例会被存到To区,此时原来的to就变成了From区,原来的to变成From区,某些对象在From和To转循环超过15次(默认值...原创 2020-06-19 22:11:41 · 93 阅读 · 0 评论 -
JVM-对JVM的理解-上
1.JVM由类加载子系统、运行时数据区、执行引擎构成 2.内存区有共享区(堆和方法区)和线程私有区(java虚拟机栈、程序计算器、本地方法栈),java虚拟机栈里面还有栈帧,我们类里面每个方法会与每个栈帧会对应,当我们类main方法运行时,程序计算器会辅助操作数栈记录下一条执行指定,而我们方法的执行过程由操作数栈来完成,栈帧里面有局部变量、操作数栈、动态链接、方法出口。 3.下面是class文件反编译得到的执行命令文件,java原方法内容是定义1和2两个变量,相加并乘10,把结果发回,栈中执行过程如下:首先原创 2020-06-19 21:40:56 · 104 阅读 · 0 评论