
Java Virtual Machine (JVM)
文章平均质量分 80
Java Virtual Machine (JVM) and the main features of the Java HotSpot technology...
swadian2008
不积跬步,无以至千里;不积小流,无以成江海
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM 工作原理和即时编译(JIT)
虚拟机是一种运行在操作系统之上的软件程序,它模拟了一台计算机的硬件环境和操作系统功能,从而可以在其上运行应用程序。虚拟机的本质是在硬件层面和操作系统层面之上添加了一个抽象层,通过这个抽象层,应用程序可以直接在虚拟机上运行,而不需要关心底层硬件和操作系统的细节。操作系统级虚拟化:通过虚拟化技术将一台物理计算机分割成多个虚拟的计算机,每个虚拟计算机都运行着自己的操作系统和应用程序,互不干扰。原创 2023-04-17 14:15:09 · 1308 阅读 · 0 评论 -
jstat-查看堆内存各部分使用量和GC情况
jstat是用于监视虚拟机各种运行状态信息的命令行工具。jstat -gc 2764 250 20上述命令的解释是,每250毫秒查询一次进程2764的垃圾收集状况,一共查询20次,省略后边两个参数,说明只查询一次,通常和jps命令结合使用。1、垃圾回收统计-jstat -gc pidjstat -gc pid 最常用,可以评估程序内存使用及GC压力整体情况S0C:第一个幸存区的大小,单位KB S1C:第二个幸存区的大小 S0U:第一个幸存区的使用大小 S1U:第二个幸存区的.原创 2022-04-01 10:19:10 · 3209 阅读 · 0 评论 -
jinfo-查看JVM参数和系统参数
jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。查看正在运行的Java应用程序的扩展参数查看jvm的参数,首先使用jps查看进程号jinfo -flags 8660红框中是java启动时手动配置的参数,也可以在内容中打印出来。查看java系统参数jinfo原创 2022-04-01 10:17:51 · 897 阅读 · 0 评论 -
jstack-查找死锁,线程堆栈分析工具
jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 java 应用程序中线程堆栈信息。jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。 如果java程序崩溃生成core文件,jstac原创 2022-04-01 10:16:54 · 6155 阅读 · 0 评论 -
jmap-查看实例个数以及占用内存大小
jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等。可以使用jmap生成Heap Dump。前置启动程序事先启动一个web应用程序,用jps查看其进程id,接着用各种jdk自带命令优化应用C:\Users\swadi>jps19672 Jps12204 MyApplication #本地启动的Java进程...原创 2022-04-01 10:15:59 · 14993 阅读 · 0 评论 -
JVM类加载器和双亲委派机制详解
Java 中的类加载器是由 JVM 运行时动态加载的,程序员通常无需直接操作类加载器。不过在一些特殊的情况下,我们可能需要使用自定义的类加载器来实现一些特殊的需求,比如实现热部署功能,从非标准的文件系统、数据库、网络等地方加载类文件。自定义 JVM 类加载器的一般步骤如下:定义自定义类加载器,一般需要继承 java.lang.ClassLoader 类,并实现 findClass() 方法来加载指定的类。在程序中通过自定义类加载器来加载指定的类。原创 2022-01-07 16:00:49 · 943 阅读 · 1 评论 -
JVM内存组成及分配
java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。 可以看出JVM主要管理两种类型的内存:堆和非堆。 简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的。 所以方法区、JVM内部处理或优化所需的内存(如JI...转载 2021-07-12 16:59:21 · 469 阅读 · 0 评论 -
JDK的命令行工具——修改中
目录一、jps:虚拟机进程状况工具二、jstat:虚拟机统计信息监视工具三、jinfo:java配置信息工具四、jmap:java内存映像工具五、jhat:虚拟机堆转储快照分析工具——仅做了解即可六、jstack:java堆栈跟踪工具使用jstack查看线程死锁——模拟一、jps:虚拟机进程状况工具linux自带查看进程命令:ps -ef | grep ja...原创 2020-01-19 16:33:08 · 460 阅读 · 0 评论 -
JVM堆内存分配策略
目录一、JVM堆内存划分二、GC流程三、JAVA堆内存分配与回收策略1.对象优先在Eden区分配2.大对象直接进入老年代3.长期存活的对象将进入老年代4.动态对象年龄判定5.空间分配担保三、逃逸分析与栈上分配1、相关概念(1)逃逸分析(Escape Analysis)(2)栈上分配(3)同步消除(4)标量替换2、栈上分配深入分析(1)...原创 2020-01-05 13:07:44 · 1448 阅读 · 2 评论 -
JVM垃圾回收器
目录一、Serial 收集器——单线程——新生代二、Serial Old收集器——单线程——老年代三、ParNew收集器——多线程——新生代四、Parallel Scavenge收集器——可控吞吐量五、Parallel Old收集器六、CMS收集器——获取最短停顿时间七、G1垃圾收集器——面向服务端图解HotSpot虚拟机所包含的收集器:图中展示了7种作用于...原创 2020-01-04 16:58:33 · 184 阅读 · 0 评论 -
JVM垃圾回收算法
目录一、JVM判断对象是否存活的方法1、引用计数法2、可达性分析法2.1-引用2.2-判断一个对象生存还是死亡二、垃圾收集算法1、复制算法——适合新生代——MinorGC2、标记清除——适合老年代——Full GC3、标记整理——适合老年代——Full GC4、分代收集算法——商用虚拟机一、JVM判断对象是否存活的方法1、引用计数法在对象中添加一...原创 2020-01-04 13:22:41 · 161 阅读 · 1 评论 -
JVM 运行时数据区详解
动态扩展方法区内存,解决方法区的内存溢出问题Metaspace,也称为元空间,是JDK 8中引入的新的永久代实现方式。它是一块虚拟内存区域,用于存储类元数据,如类名、访问修饰符、字段、方法等信息。在JDK 7及以前的版本中,永久代是方法区的一种实现方式,用于存储JVM加载的类信息,如常量池、字段、方法、构造函数等。但是永久代在运行时容易发生内存溢出等问题。为了解决这些问题,JDK 8中引入了Metaspace,它是在本地内存中实现的,并且没有预定义的内存大小限制。原创 2019-11-17 16:18:57 · 511 阅读 · 1 评论 -
JAVA对象的创建、内存布局和访问
目录一、JAVA对象的创建1、内存分配的并发问题1.1、CAS(compare and swap)乐观锁1.2、本地线程分配缓冲(Thread Local Allocation Buffer,TLAB)2、init()方法和clinit()方法2.1、init()方法2.2、clinit()方法二、Java对象的内存布局三、Java对象的访问(实例数据+类型数据...原创 2019-12-22 17:42:11 · 351 阅读 · 5 评论