![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java虚拟机
文章平均质量分 75
java虚拟机
Chris_Chris_
梦想架构师
展开
-
java常用指令
jpsjps用来查看java进程及其相关的信息jps [options] [hostid]options:-l : 显示进程id,显示主类全名或jar路径-q : 显示进程id-m : 显示进程id, 显示JVM启动时传递给main()的参数-v : 显示进程id,显示JVM启动时显示指定的JVM参数jinfojinfo是用来查看JVM参数和动态修改部分JVM参数的命令jinfo [option] <pid>options:不加[option] 输出所有的系统属性和原创 2021-12-24 18:28:25 · 1172 阅读 · 0 评论 -
垃圾收集器
垃圾收集器可以分为串行收集器(新生代串行收集器Serial,老年代串行收集器 Serial Old),并行收集器(新生代ParNew收集器,新生代ParallelGC收集器,老年代ParallelGC收集器),CMS收集器,G1收集器串行收集器(Serial):串行垃圾回收是为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程。并行收集器:多个垃圾收集器线程并行工作,同样会暂停用户线程。CMS收集器:用户线程和垃圾回收线程同时执行,不一定是并行的,可能是交替执行,可能一边垃圾回收,一边运原创 2021-12-14 16:20:12 · 482 阅读 · 0 评论 -
垃圾收集算法
垃圾收集可以分为部分收集和整堆收集部分收集包括新生代收集(Minor GC/Young GC),老年代收集(Major GC/Old GC)如CMS收集器,混合收集(Mixed GC)如有G1收集器整堆收集(Full GC)即 收集整个Java堆和方法区的垃圾收集标记-清除算法标记-清除算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。标记-清除算法有两个不足之处:第一个是执行原创 2021-11-30 20:42:10 · 83 阅读 · 0 评论 -
引用计数法和可达性分析算法
垃圾回收的区域:方法区,堆引用计数法栈中有对堆中的对象有引用,如果失去了这个引用关系,那么这个对象就需要被回收在引用计数法中当一个对象被引用时,这个对象的的计数值+1,失去引用时,计数值-1,当计数值为0时表示对象需要被回收,但是引用计数法无法检测循环引用。循环引用:有AB对象,这两个对象互相引用,除了这个互相引用没有地方在使用这两个对象,所以这两个对象时应该是要被回收,但是因为它们的引用计数都是1,无法被回收可达性分析算法可达性分析算法:从GC root 出发,向下开始搜索引用的对象,搜索经原创 2021-11-29 16:00:28 · 319 阅读 · 0 评论 -
类加载器的类型
类的加载阶段将类的.class文件中的二进制数据读入到内存中,将其常量池、属性表、方法表、异常表放在运行时数据区的方法区内,然后在创建一个对应的java.lang.Class对象,用来封装类在方法区内的数据结构JVM主要在程序第一次主动使用类的时候,才会去加载该类,而且只加载一次jvm支持两种类型的加载器,分别是引导类加载器()和自定义加载器,引导类加载器是由c/c++实现的,自定义加载器是由java实现的。自定义加载器相当于ClassLoader的子类,它包括扩展类加载器(Extension Clas原创 2021-11-22 20:20:45 · 533 阅读 · 0 评论 -
类加载的执行过程
代码经过编译后成为了.class文件,类加载子系统负责从文件系统中或是网络中加载.class文件,加载后的class类信息放在方法区,类加载器只负责加载,是否运行由执行引擎决定加载预加载虚拟机启动的时候会加载JAVA_HOME/lib/rt.jar中的.class文件例如java.lang.*,java.util*,java.io.*等...原创 2021-11-10 22:10:06 · 2113 阅读 · 0 评论 -
栈溢出的原因
栈的大小用-Xss来设置当线程请求的栈深度大于虚拟机所允许的最大深度, 将抛出StackOverflowError异常public class StackOverflowErrorTest { static int times = 1; public static void main(String[] args) { try { self(); //捕获error而非Exception } catch (原创 2021-11-04 22:15:59 · 300 阅读 · 0 评论 -
jvm堆溢出
不停的创建对象,并且这些对象不会被垃圾回收的话,当对象所占空间超过了堆的最大空间的话会抛出OutOfMemoryError异常public class HeapOOMTest { public static void main(String[] args) { List<Object> oomObjectList = new ArrayList<>(); while (true) { oomObjectList.add原创 2021-11-02 17:46:22 · 147 阅读 · 0 评论 -
jvm运行时内存
jdk7中的内存结构jdk8中的内存结构线程私有的:程序计数器,虚拟机栈,本地方法栈线程共享的:堆,方法区,元空间,直接内存java8之后方法区的变化:元空间替换永久代,永久代中的类原信息转移到了本地内存,字符串常量池和静态变量转移到了堆程序计数器程序计数器是当前线程字节码的行号提示器,在字节码解释器工作的时候改变程序计数器的值来选取下一条将要执行的字节码指令。分支、循环、跳转、异常、线程恢复等都靠这个程序计数器完成。一个cpu同一时间只能执行一个cpu中的命令,线程未执行完的命令,会保原创 2021-10-29 22:37:44 · 521 阅读 · 5 评论