![](https://img-blog.csdnimg.cn/direct/99b063f8abaf472ca5a0ea7c6545dbfa.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java JVM
文章平均质量分 87
Java JVM
lcn29
lcn29.github.io
展开
-
【Java JVM】常用参数
设置为 4,则两个 Survivor 区与一个 Eden 区的比值为 1:1:4,一个 Survivor 区占整个年轻代的 1/6, -XX:SurvivorRatio=4。-XX:NewRatio: 设置年轻代和年老代的比值 (除去持久代), 设置为 4,则年轻代与年老代所占比值为 1:4,年轻代占整个堆栈的 1/5, -XX:NewRatio=4。-XX:MaxPermSize: 设置持久代大小, JDK8 后废弃了, 通过元空间进行配置, -XX:MaxPermSize=16m。原创 2024-03-07 10:03:47 · 370 阅读 · 0 评论 -
【Java JVM】方法调用
方法调用并不等同于方法中的代码被执行, 方法调用阶段唯一的任务就是确定被调用方法的版本 (即调用哪一个方法), 暂时还未涉及方法内部的具体运行过程。Class 文件的编译过程中不包含传统程序语言编译的连接步骤, 一切方法调用在 Class 文件里面存储的都只是符号引用, 而不是方法在实际运行时内存布局中的入口地址 (也就是之前说的直接引用), 这个特性给 Java 带来了更强大的动态扩展能力, 但也使得 Java 方法调用过程变得相对复杂, 某些调用需要在类加。原创 2024-03-07 10:03:20 · 945 阅读 · 0 评论 -
【Java JVM】Class 文件的加载
Java 虚拟机把描述类的数据从 Class 文件加载到内存, 并对数据进行校验, 转换解析和初始化, 最终形成可以被虚拟机直接使用的 Java 类型,这个过程被称作虚拟机的。与那些在编译时需要进行连接的语言不同, 在 Java 语言里面, 类的加载, 连接和初始化过程都是在程序运行期间完成的, 这种策略让 Java 语言进行提前编译会面临额外的困难,原创 2024-03-06 16:37:05 · 1359 阅读 · 0 评论 -
【Java JVM】Class 文件
类或接口的符号引用表 CONSTANT_Class_info 的内容如下。原创 2024-03-06 16:36:25 · 1066 阅读 · 0 评论 -
【Java JVM】垃圾回收
在 64 位系统中, 理论可以访问的内存搞定 16EB (2 的 64 次幂)。为了实现 “Brooks Pointer”, Shennandoah 在原有的写屏障内加入了额外的转发处理, 还使用了读屏障, 代码里面对象的读取斌率的对对象的写入频率高很多的操作, 大量的读屏障开销会是一个性能问题。(2) 转发指针的作用, 当对象拥有一份新的副本时, 只需要修改一处指针的值, 即旧对象上转发指针的引用位置, 使其执行新的对象, 就可以将所有对该对象的访问转发到新的副本上。原创 2024-03-05 20:55:46 · 4373 阅读 · 0 评论 -
【Java JVM】对象回收判断
Java 对象回收判断是程序设计中至关重要的一环。在面向对象的编程中, 合理的对象回收策略直接影响着程序的性能和内存利用效率。因此, 深入了解和准确判断 Java 对象的回收时机, 不仅可以优化程序的运行性能, 还能有效避免内存泄漏和资源浪费。本文将简单的分析一下 JVM 中对象回收的判断机制, 了解一下整体的对象回收过程。原创 2024-03-05 20:55:02 · 1680 阅读 · 0 评论 -
【Java JVM】栈帧
执行引擎是 Java 虚拟机核心的组成部分之一。在《Java虚拟机规范》中制定了 Java 虚拟机字节码执行引擎的概念模型,这个概念模型成为各大发行商的 Java 虚拟机执行引擎的统一外观 (Facade)。不同的虚拟机的实现中, 通常会有而这一个的过程, 落实到 HotSpot 的实现就是。下面会对做一个简单的介绍。原创 2024-01-14 20:12:58 · 1627 阅读 · 0 评论 -
【Java JVM】Java 实例对象的访问定位
Java 程序会通过栈上的 reference 数据来操作堆上的具体对象。但是 reference 类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用, 并没有定义这个引用应该通过什么方式去定位, 访问到堆中对象的具体位置,所以对象访问方式也是由虚拟机实现而定的,主流的访问方式主要有使用和两种。原创 2023-12-24 23:56:20 · 671 阅读 · 0 评论 -
【Java JMM】编译和优化
语法分析, 根据标记序列构造抽象语法树, 主要由 com.sun.tools.javac.parser.Parser, 产生的抽象树为 com.sun.tools.javac.tree.JCTree。字节码生成, 由 com.sun.tools.javac.jvm.Gen 完成, 把前面各个步骤生成的信息 (语法树, 符号表) 转为字节码, 还会进行少了代码的添加和转换,当然最简单的方式就是打开一包编译器, 顺便建立一个 Java 项目, 搜索 com.sun.tools.javac.Main 就可以了。原创 2023-12-22 22:09:56 · 961 阅读 · 0 评论 -
【Java JVM】JVM 分析工具
在 $JAVA_HOME/bin 的目录下, 存在着许多小工具, 除了编译和运行 Java 程序外, 打包, 部署, 签名, 调试, 监控, 运维等各种场景都可能会用到它们。原创 2023-12-20 15:08:29 · 1584 阅读 · 0 评论 -
【Java JVM】运行时数据区
JVM 在执行 Java 程序的过程中会把它管理的内存分为若干个不同的数据区域, 这些区域有着各自的用途。根据《Java虚拟机规范》中规定, JVM 所管理的内存大致包括以下几个运行时数据区域, 如图所示:这个运行时数据区被分为了 5 大块其中: 绿色部分是各个线程之间独享的部分, 而蓝色部分是所有线程共享的区域。原创 2023-12-16 00:18:38 · 1094 阅读 · 0 评论 -
【Java JVM】实例对象的创建
当我们涉及 Java 编程时,对象的创建是一个基础而关键的概念。在 Java 中,一切皆为对象,而对象的创建方式直接影响代码的结构和性能。本博客将探讨一下 Java 实例对象的创建过程。原创 2023-12-17 13:16:32 · 800 阅读 · 0 评论 -
【Java JVM】实例对象内存布局
当 Java 应用启动后, 基本就是在不断的创建对象, 回收对象的过程中。而这些创建的对象基本都是存放在应用的堆 (heap) 中, 但是这些对象在堆中又是什么样子的呢?在这篇文章中, 我们分析一下 Java JVM 中实例对象的内存布局。在 HotSpot 虚拟机里, 对象在堆内存中的存储布局可以划分为三个部分: 对象头 (Object Header), 实例数据 (Instance Data) 和对齐填充 (Padding)。原创 2023-12-16 14:01:27 · 1006 阅读 · 0 评论