JVM
2021-04-13 14:21:24 3 举报
JVM(Java虚拟机)是Java技术的核心,它是一个虚拟的计算机,负责执行Java字节码。JVM的主要任务是加载、验证和执行Java程序,同时管理内存、垃圾回收和多线程等资源。JVM提供了一个跨平台的运行环境,使得Java程序可以在不同的操作系统和硬件上无缝运行。JVM具有高度的可扩展性和灵活性,可以通过插件和工具进行优化和定制。总之,JVM是Java程序的运行基础,为Java开发者提供了稳定、高效的运行环境。
作者其他创作
大纲/内容
本地方法栈(保存的是native方法的信息)
类装载子系统
程序计数器=10
堆Heap
栈帧-单个方法
Math.class类元信息
HelloWord.class
执行引擎
直接内存
线程A
o(引用地址)
Eden(8/10)
car 1
局部变量表
jdk 1.8
未活下来的
JDK1.6-
当都不为空GC复制算法会将from复制到to此时from为空变为toto变为from
字符串对象实例
math
程序计数器
...
程序计数器确保线程不乱等等实际占比很小
新生区
1002
。。。
Heap
方法区(元空间)常量+静态变量+类元信息
垃圾回收
getClass
成员变量
Java堆
1001
入栈和出栈操作
s1
动态链接
幸存1区
llo
本地方法栈中保存的是native方法的信息,当一个JVM创建的线程调用native方法后,JVM不在为其在虚拟机栈中创建栈帧,JVM只是简单的动态链并直接调用native方法
math2
Java栈Stack
1.虚拟机自带的加载器2.启动类(跟)加载器3.扩展类加载器 4.应用程序加载器 。。。。。。
进入养老区被回收的可能性会变小。
0区和1区一个为from一个为to谁空谁是to
Java运行时数据区
Stack
非堆叫这名目的是为了区分堆和方法区
字符串常量(对象)
s2
在垃圾回收中活了下来
99%Java内存优化在堆上优化
轻量级(轻GC)
满了
he
Math.class
PermMetaspace
本地方法栈Native Method Stack
from
o(对象)
养老区
操作数栈
运行时数据区(内存)
本地方法接口JNI
this
Eden
.java
主要是对堆中的伊甸园和养老区进行回收
实例化 new
方法区
在真实运行 环境中位置 0区和1区位 置是在不停 变换的(每 次回收)
幸存区1区
虚拟机栈
String s3 = new String(\"1\") + new String(\"1\");首先分析一下这句代码的执行,第一个new String(\"1\
类是模板,对象是具体的。作用:加载class类
线程共享(数据 )
线程私有(指令 )
虚拟机栈(当前线程)
hello
Java线程
String Pool
幸存区
方法出口
运行时常量池
老年代(Old)
方法去
方法区实现
2
本地方法栈
类加载器
过程
细化
Car Class
永久代 JDK1.7元空间 JDK1.8JDK1.8去永久代:使用元空间(空间大小只受制于机器内存)替代永久代永久代参数 -XX:PermSize; -XX:MaxPermSize=100M 超过100M OOM元空间参数 -XX:MetaspaceSize; -XX:MaxMetaspaceSize
重量级(重GC 、 Full GC)
线程C
方法区Method Area
在达到一定次数(默认15次GC)后会进入养老区
假设能存储10个现在存满了触发一次轻量级回收
Class File
相当于对伊甸园传来的对象一遍遍筛选
幸存0区
即时编译后的代码
类信息
直接销毁
年轻代(1/3)
实现了ClassLoad就是一个自定义的类加载器
字符串常池(引用)
堆区
交换
JDK1.7+
堆
JVM
线程-main
线程B
To(1/10)
From(1/10)
静态变量static
m-100
运行时数据区(Runtime Data Area)
调用本地方法库,为了扩展Java的使用
1.7:永久代1.8:元空间(方法区)Perm
类装载器Class Loader
加载、初始化
全局字符串常量池
元空间
本地方法库 C/C++
JVM运行时数据区域
getClassLoader
类加载器Class Loader
全局基本类型包装类对象常量池
幸存区0区
永久存储区(1.7:永久代,1.8:元空间)
运行时class文件常量池
老年代(2/3)
to
survivor区
机器码(10101)
Java虚拟机
基本类型包装类对象
Method Area
类加载
伊甸园区(Eden)
Java虚拟机栈
伊甸园Eden Space
1
Car的实例
0 条评论
下一页