JVM
文章平均质量分 92
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
CodingAnHour
明日复明日,明日何其多。我生待明日,万事成蹉跎。
展开
-
JVM调优工具jps、jstat、jinfo、jmap、jstack、jvisualvm、top、vmstat、pidstat
1、jpsjps(全称:Java Virtual Machine Process Status Tool)是 java 提供的一个用来显示当前所有 java 进程的 pid 的命令。jps:查看java 进程idjps -v:查看虚拟机启动时的参数列表2、jstatJVM 统计监测工具垃圾回收统计:jstat -gc pid 可以评估程序内存使用及GC压力整体情况,常用jstat -gc pid 1000 10:每间隔1000毫秒执行一次,一共执行10次jstat -gc pid原创 2022-05-03 15:31:22 · 2284 阅读 · 0 评论 -
JVM 垃圾收集器Serial、Parallel Scavenge、ParNew、CMS、G1
左侧6种垃圾收集器之间存在连线,就说明他们可以搭配使用,上半部分为年轻代使用,下半部分为老年代使用,右侧G1开始逐步抛离分代年龄的概念虽然垃圾收集器的技术在不断的进步,但直到现在还没有最好的收集器出现,更加不存在“万能”的收集器,所以我们选择的只是对具体应用最合适的收集器JDK8时将 Serial+CMS、ParNew+Serial Old这两个组合声明为废弃,并且在JDK9中完全取消了这两个组合的支持1.1、Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOld.原创 2022-04-22 00:31:40 · 975 阅读 · 0 评论 -
JVM 判断对象是否存活、垃圾收集算法、HotSpot的算法细节
垃圾收集器(Garbage Collection,简称GC)Java内存运行时区域中程序计数器、虚拟机栈、本地方法栈3个区域随着线程而生,岁线程而灭,栈中的栈帧随着方法的进去与退出而有条不絮地执行着出栈和入栈每个栈帧中分配多少内存基本上在编译期可知的;Java堆和方法区这两个域有着显著的不确定性:一个接口的多个实现类需要的内存可能会不一样,一个方法所执行的不同条件分支所需的内存可能不一样,只有处于运行期间,才知道程序究竟会创建那些对象,创建多少个对象,这部分的内存分配与创建是动态的,垃圾收集器所关注的就原创 2022-04-21 01:05:41 · 650 阅读 · 0 评论 -
JVM对象的创建、对象的访问定位、内存分配与回收策略
Java语言中创建对象通常(复制,反序列化)仅仅是一个new关键字而已。当Java虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。1.2、对象分配内存类加载检查通过后虚拟机将为新生对象分配内存(对象所需的内存大小在类加载完成后便可完全确定),为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。划分内存方原创 2022-04-09 19:02:07 · 257 阅读 · 0 评论 -
JVM指令含义
栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入操作数栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0压入栈lconst_1 将long类型常量1压入栈fconst_原创 2022-03-27 12:41:07 · 159 阅读 · 0 评论 -
JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制
1、类加载器站在Java虚拟机的角度看,只有两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现(HotSpot虚拟机、JDK8中),是虚拟机自身的一部分;另外一种是其他所有类加载器,这些类加载器都由Java语言实现,独立存在于虚拟机外部,并且全部继承自抽象类 java.lang.ClassLoaderJDK8及以前版本中绝大多数程序都会使用到以下3个系统提供的类加载器来进行加载启动类(引导类)加载器:负责加载支撑JVM运行的位于&l原创 2022-03-19 02:01:06 · 1549 阅读 · 0 评论 -
Java虚拟机类加载机制
概念:Java虚拟机把描述累的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制类的加载、链接、初始化都是在程序运行期间完成的。类在加载时会有额外的开销,但是为Java应用提供了极高的扩展性和灵活性(动态加载和动态链接)。例如:通过Java自定义加载器,让本地程序运行时,从网络或其他地方加载一个二进制流作为其程序的一部分代码原创 2022-03-17 11:21:37 · 833 阅读 · 0 评论 -
Java运行时数据区域
1、Java运行时数据区域Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区域。程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存1.1、程序计数器程序计数器(Program Counter Register)是一块较小的内存区域,字节码解释器工作时,就是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等都是依托程序计数器完成的。也就是说处理器在时间片切换时原创 2022-03-01 23:26:56 · 1502 阅读 · 0 评论