
人在江湖之JVM
文章平均质量分 93
当前JVM的内容几乎是大厂或者说面试必问的内容,了解JVM
没事儿写两篇
授之以鱼不如授之以渔
展开
-
JVM 监控命令详解
但并不是所有的选项参数都能修改,需要是标记为 manageable 的才能修改。注意:动态修改职能针对当前的进程,当我们的应用重启之后进程其实就变了,所以这里的动态修改也就是在线排查或在线调优的时候用一用。导出 JVM 内存映射,它可以获取 dump 文件,还可以获取进程的内存相关信息,包括各区域的使用情况等。这里的进程id和操作系统的进程id是一致的。第二列是显示的当前正在执行的 Java 程序的名称。从以上信息我们可以知道,当前进程中,大部分对象都在老年代,说明我们的很多对象生命周期过长了。原创 2023-11-22 11:03:55 · 1452 阅读 · 0 评论 -
JVM GC 垃圾收集器
区域化分代式垃圾收集器,G1 是并行收集器,它把内存分割为很多不想关的区域(Region),每个Region可能是 Eden区,幸存者1区或幸存者0区,老年代等,这样可以避免在整堆中进行垃圾收集,将整个堆化整为零,一次回收其中一个或一些 Region,G1 进行垃圾回收时,会优先收集价值比较大的Region(可以认为当前不可达对象比较多的 Region 为价值比较大)。但实际使用中,由于各种疏忽,导致某些对象的生命周期超长,长时间无法释放,最后导致这种对象越来越多,最后 OOM,目前也称之为内存泄漏。原创 2023-11-09 20:45:00 · 330 阅读 · 0 评论 -
JVM 内存和 GC 算法
垃圾是指在运行程序中没有任何指针指向的对象。如果不及时堆垃圾进行清理,这些垃圾会一直占用内存空间,直到程序运行结束,在这期间这些对象所占用的内存无法使用,造成极大的资源浪费。原创 2023-11-03 12:05:45 · 688 阅读 · 0 评论 -
JVM 运行时数据区
当 Eden 区内存空间不足(满了),没有空间存放新 new 的对象时,JVM 会进行垃圾回收(此时的垃圾回收称为 YGC或 Minor GC),此时会将 Eden 区不再使用的对象(有多种判断方式,这个我们后面再说)进行销毁,还在使用的对象移动到 Survivor 0 区,并为其标记年龄(初次放入幸存者区的对象年龄标记为 1)不同的垃圾回收器,可能有所不同,可根据具体情况而定。本地方法栈用于管理本地方法,由线程私有,可以被设定为固定大小或者动态扩展的内存,本地方法在本地方法栈中记录,由执行引擎调用。原创 2023-10-26 09:20:39 · 259 阅读 · 0 评论 -
JVM 类的加载子系统
一般的 Java 程序中,使用引导类加载器、扩展类加载器、系统类加载器相互作用,即可。几乎不需要自定义类的加载器,我们可以在某些情况下进行自定义加载器。修改类的加载方式还比如我们对编译的源码进行了加密,在类加载时需要解密等继承 ClassLoader 重写 findClass(String name) 方法按照 URLClassLoader.FactoryURLClassLoader 继承 URLClassLoader 的方式继承 URLClassLoader 来实现即可。原创 2023-10-23 14:06:19 · 601 阅读 · 1 评论 -
JVM 入门
JVM (Java Virtual Machine),Java 虚拟机,我们的 Java 代码需编译为 .class 字节码文件,经过 JVM 来执行。如今的 JVM 其实可以不止执行 Java 代码,任何语言,只要编译为 JVM 支持的字节码,就可以使用 JVM 来执行。Java 之所以可以垮平台执行,其实是因为在不同的平台上都有对应版本的 JVM 可以执行 Java 编译之后的字节码。上图为 Java 8 的官方文档中的图片,其清晰的表达了JDK、JRE、JVM 之间的包含关系。原创 2023-10-12 10:33:18 · 440 阅读 · 0 评论