gball个人知识库
首页
基础组件
基础知识
算法&设计模式
  • 操作手册
  • 数据库
  • 极客时间
  • 每日随笔
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 画图工具 (opens new window)
关于
  • 网盘 (opens new window)
  • 分类
  • 标签
  • 归档
项目
GitHub (opens new window)

ggball

后端界的小学生
首页
基础组件
基础知识
算法&设计模式
  • 操作手册
  • 数据库
  • 极客时间
  • 每日随笔
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 画图工具 (opens new window)
关于
  • 网盘 (opens new window)
  • 分类
  • 标签
  • 归档
项目
GitHub (opens new window)
  • 面试

  • 数据库

  • linux

  • node

  • tensorFlow

  • 基础组件

  • 基础知识

    • java集合

    • jvm调优

      • JVM大纲
      • 类加载器
      • JVM入门
        • jvm 体系结构
          • jvm内存分布(运行时数据区)
      • java内存模型
      • java运行时数据区
      • 05_GC and Tuning
      • java对象内存布局
      • jvm垃圾收集器和内存分配策略
    • java并发编程

    • java网络编程

    • java8新特性

    • javaAgent

    • java高级

  • 算法与设计模式

  • 分布式

  • 疑难杂症

  • go学习之旅

  • 极客时间

  • 知识库
  • 基础知识
  • jvm调优
ggball
2021-10-08

JVM入门

# jvm 体系结构

jvm 体系结构

# jvm内存分布(运行时数据区)

jvm内存分布

# 程序计数器(线程隔离)

每个线程都有,记录着线程下一刻运行到哪里。如果执行的是方法,这里记录的是虚拟机字节码指令的地址。当执行的是Native方法的时候为空(Undefined)。

# 虚拟机栈(线程隔离)

每一个线程都会有一个栈帧,想像一下就是一个竹桶,调用方法会创建一个栈帧,压入栈里,调用完成会弹出栈。栈帧里面更多指的是对局部变量表的描述,里面包括基础变量,操作数栈,对象引用和returnAddress类型(指向了一条字节码指令的地址)

# 本地方法栈(线程隔离)

本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的本地(Native)方法服务。

# 堆(线程共享)

jvm最大的一块内存区域,存放java对象实例和数组,java堆也是垃圾收集器管理的内存区域,从垃圾收集的角度来说,可以分为新生代,老年代,新生代还可以分Eden(8/10)、From Survivor(1/10) 、To Survivor(1/10)。

# 方法区(线程共享)

它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

# 运行时常量池

运行时常量池(Runtime Constant Pool)是方法区的一部分。用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。

这里说明下jit即时编译, 即时编译会把热点代码直接翻译成机器代码存到代码缓存区,提高程序的执行效率。而方法区会在常量池中创建方法符号引用来链接到机器码,之后使用热点代码时,先从方法区找到方法符号引用,再根据方法符号引用找到真实的机器代码地址,总之,在JIT编译过程中,生成的本地机器代码会被存储在方法区的代码缓存区中

# java从编码到执行

image-20210404000301492

# 什么是编译性语言?

程序在执行之前需要有一个专门的编译过程,把程序编译成机器可以理解的文件,这样运行时机器不需要重新翻译这个程序文件,直接使用编译后的程序文件。

特点:执行效率高,依赖编译器,跨平台性差。

有哪些编译型语言:
C/C++、Pascal/Object Pascal(Delphi)、Golang
1
2

# 什么是解释型语言

程序不需要编译,程序只有在运行的时候才会被翻译成机器语言,每次执行都会被翻译一次,所以执行效率比较低。

特点:执行效率低,依赖解释器,跨平台性高

有哪些解释型语言:Java、C#、PHP、JavaScript、VBScript、  
Perl、Python、Ruby、MATLAB 等等
1
2

# java是编译型语言还是解释型语言?

答:两者都是,Java文件需要被编译成.class文件,字节码解释器负责解释.class文件为机器能理解的语言

上次更新: 2025/06/04, 15:06:15
类加载器
java内存模型

← 类加载器 java内存模型→

最近更新
01
AIIDE
03-07
02
githubActionCICD实战
03-07
03
windows安装Deep-Live-Cam教程
08-11
更多文章>
Theme by Vdoing
总访问量 次 | 总访客数 人
| Copyright © 2021-2025 ggball | 赣ICP备2021008769号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×

评论

  • 评论 ssss
  • 回复
  • 评论 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  • 回复
  • 评论 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  • 回复
×