![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 79
伏加特遇上西柚
犹如烈焰般的伏特加和温柔酸甜的西柚碰撞在一起,将是一种美好的相遇。
展开
-
JVM监控及诊断工具-命令行篇--jcmd命令介绍
在JDK 1.7以后,新增了一个命令行工具jcmd。它是一个多功能的工具,可以用来实现前面除了jstat之外所有命令的功能。jcmd拥有jmap的大部分功能,并且在Oracle的官方网站上也推荐使用jcmd命令代jmap命令。原创 2024-07-20 21:00:44 · 259 阅读 · 0 评论 -
JVM监控及诊断工具-命令行篇-jstack命令介绍
这些都是导致线程长时间停顿的常见原因。当线程出现停顿时,就可以用jstack显示各个线程调用的堆栈情况。在thread dump中,要留意下面几种状态。原创 2024-07-20 20:44:53 · 518 阅读 · 0 评论 -
JVM监控及诊断工具-命令行篇-jmap命令介绍
举个例子,假设在编译生成的机器码中,某些对象的生命周期在两个安全点之间,那么:live选项将无法探知到这些对象。jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。由于jmap将访问堆中的所有对象,为了保证在此过程中不被应用线程干扰,jmap需要借助安全点机制,让所有线程停留在不改变堆中数据的状态。生成Java堆转储快照:dump文件。原创 2024-07-20 09:59:36 · 586 阅读 · 0 评论 -
JVM监控及诊断工具-命令行篇--jinfo命令介绍
在很多情况下,Java应用程序不会指定所有的Java虚拟机参数。而此时,开发人员可能不知道某一个具体的Java虚拟机参数的默认值。在这种情况下,可能需要通过查找文档获取某个参数的默认值。但有了jinfo工具,开发人员可以很方便地找到Java虚拟机参数的当前值。jinfo不仅可以查看运行时某一个Java虚拟机参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。但是,并非所有参数都支持动态修改。可以查看由System.getProperties()取得的参数。其实,这个修改能力是极其有限的。原创 2024-07-15 20:22:35 · 905 阅读 · 0 评论 -
JVM监控及诊断工具-命令行篇-jstat命令介绍
gcnew。原创 2024-07-11 22:07:52 · 710 阅读 · 0 评论 -
jvm面试题
java中都有哪些类加载器启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库;扩展类加载器(Extension ClassLoader):负责加载\lib\ext目录或Java. ext. dirs系统变量指定的路径中的所有类库;应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类原创 2020-12-13 23:00:53 · 199 阅读 · 0 评论 -
JVM 运行时数据区?详细介绍下每个区域的作用?
程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成;Java 虚拟机栈(Java Virtual Machine Stacks):用于存储局部变量表、操作数栈、动态链接、方法出口等信息;本地方法栈(Native Method Stack):与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java 方法的,原创 2020-12-13 22:59:40 · 824 阅读 · 0 评论 -
JVM 的主要组成部分及其作用
类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface)组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码原创 2020-12-13 22:58:49 · 344 阅读 · 0 评论 -
垃圾回收算法
1、确定垃圾引用计数法:在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用, 即他们的引用计数都不为 0, 则说明对象不太可能再被用到,那么这个对象就是可回收对象可达性分析:为了解决引用计数法的循环引用问题, Java 使用了可达性分析的方法。通过一系列的“GC roots”对象作为起点搜索。如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。原创 2020-11-22 17:16:32 · 120 阅读 · 0 评论 -
JVM 运行时内存之新生代和老年代。
Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、 From Survivor 区和 To Survivor 区)和老年代。1. 新生代是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、 ServivorFrom、 ServivorTo 三个区。1.1. Eden 区Java 新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当 Eden 区内存不够的时候就会触发原创 2020-11-22 16:59:33 · 1178 阅读 · 0 评论 -
java中强引用、软引用、弱引用、虚引用详细介绍
在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。1、强引用特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。当一个对象被强引用变量引用时,它处于可达状态,不可能被垃圾回收机制回收。2、软引用特点:软引用通过SoftReference类实现。软引用的生命周期比强引用短一些。只有当 JVM 认为内存不足时,才会去试图回收软引用指向的对象:即原创 2020-11-22 15:12:40 · 180 阅读 · 0 评论