JVM

手机游戏开发者 2024-9-27 14:24:00 57 0 来自 中国
内存地区

步调计数器、假造机栈、当地方法栈这三个是线程私有的;堆、方法区是线程公有的;
步调计数器:记载线程走到字节码的哪一行;
假造机栈:由栈帧构成,每个栈帧包罗局部变量表、操作数栈、动态链接、方法返回地点,当实行到一个方法的时间,就会把这个方法以栈帧情势压入栈
当地方法栈:与假造机栈差不多,只不外这个栈是给当地方法用的
堆:堆的垃圾采取算法常用的是分代采取法,以是堆被分别出新生代,老年代;
方法区: 1.7之火线法区的实现是永世代,会存储已被假造机加载的 类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据。****1.8之后方法区的实现变成了元空间,字符串常量池和静态变量等移出到堆内存中,其余的(紧张是范例信息)被移到了元空间中。
元空间和永世代的区别就在于永世代会受JVM的总空间大小的限定,而元空间受限定的是内存的总大小。
常量池:常量池中紧张存放两类数据,一是字面量、二是符号引用。
字面量:比如String范例的字符串值大概界说为final范例的常量的值。
符号引用:
1.类或接口的全限定名(包罗他的父类和所实现的接口)
2.变量或方法的名称
3.变量或方法的形貌信息
4.this
当类的字节码被加载到内存中后,他的常量池信息就会会合放入到一块内存,这块内存就称为运行时常量池,并且把里面的符号地点变为真实地点。
垃圾采取

判断对象是否能够采取有两个办法:引用计数法可达性分析
垃圾网络的算法:标记-清除、标记-整理、标记-复制、分代采取法
分代采取法
在内存中,分为新生代,老年代,永世代;这里的永世代也有叫方法区。新生代又分为Eden区,S0区,和S1区。一个对象创建,存储在Eden区,当Eden区满了,就会触发Minor GC,存活的对象将进入S0区,S0区满了之后会触发Minor GC,清空S0区内存,将存活的对象复制到S1区;S1满了也是GC清空到S0。倒来倒去,当次数到达16(可改)次时,会进入老年代;老年代满了会触发Full GC(会stop the world)。再满就会OOM了。
Full GC用的一般是标记整理和标记清除算法,以是不会转移,而Minor GC一般用的是标记-复制算法,以是会转移来转移去,同理,如果对象太大,会直接进老年代。
类加载过程


  • 加载:

  • 通过全类名获取界说此类的二进制字节流
  • 将字节流所代表的静态存储结构转换为方法区的运行时数据结构
  • 在内存中天生一个代表该类的 Class 对象,作为方法区这些数据的访问入口


  • 验证:
验证文件格式、元数据、符号引用、字节码

  • 准备:
准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,会给类变量一个默认值,不对成员变量做内存分配。
从概念上讲,类变量所利用的内存都应当在方法区中举行分配。不外有一点须要注意的是:JDK 7 之前,HotSpot 利用永世代来实现方法区的时间,实现是完全符合这种逻辑概念的。 而在 JDK 7 及之后,HotSpot 已经把本来放在永世代的字符串常量池、静态变量等移动到堆中,这个时间类变量则会随着 Class 对象一起存放在 Java 堆中。


  • 解析:
解析阶段是假造机将常量池内的符号引用替换为直接引用的过程,也就是得到类大概字段、方法在内存中的指针大概偏移量。

  • 初始化:

  • 给静态变量赋值,给成员变量分配内存,赋值
类加载器

JVM 中内置了三个紧张的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继续自java.lang.ClassLoader:

  • BootstrapClassLoader(启动类加载器) :最顶层的加载类,由 C++实现,负责加载 %JAVA_HOME%/lib目次下的 jar 包和类大概被 -Xbootclasspath参数指定的路径中的全部类。
  • ExtensionClassLoader(扩展类加载器) :紧张负责加载 %JRE_HOME%/lib/ext 目次下的 jar 包和类,或被 java.ext.dirs 体系变量所指定的路径下的 jar 包。
  • AppClassLoader(应用步调类加载器) :面向我们用户的加载器,负责加载当前应用 classpath 下的全部 jar 包和类。
双亲委派机制: 自底向上查抄类是否被上层加载器加载,再从最顶向下实行加载类
双亲委派机制的利益:

  • 克制类的重复加载
  • 掩护Java焦点API不被窜改
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 00:49, Processed in 0.163470 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表