首页 > 其他分享 >JVM

JVM

时间:2024-07-07 10:57:36浏览次数:9  
标签:Survivor Space 对象 内存 JVM 加载

JVM

  1. JVM的位置

    操作系统的堆中,不能与硬件直接交互,需通过操作系统交互

  1. JVM体系结构

  2. 类加载器

    用于加载class文件

    三种类加载器

    ​ 1.启动类加载器Bootstarp ClassLoader

    ​ 2.拓展类加载器Extension ClassLoader

    ​ 3.应用程序类加载器Application ClassLoader

  3. 双亲委派机制

    1.类加载器收到类加载请求

    2.将这个请求委托个父类加载器,一直向上委托,直到启动类(根类)加载器

    (Application ==> Extension ==> Bootstrap)

    3.类加载器检查是否能加载当前类,能加载就结束,使用当前加载器,否则抛出异常通知子类加载器

    4.重复操作3

    (Bootstrap ==> Extension ==> Application ==> ClassNotFound)

  4. 沙箱安全机制

    主要限制系统资源的访问,引入域的概念,不同的域管理不同的系统资源权限

    沙箱主要组成部件:

    ​ 1.字节码校验器:确保java语言规范

    ​ 2.类装载器:双亲委派机制,保护善意代码

    ​ 3.存取控制器:控制核心API对操作系统的存取权限

    ​ 4.安全管理器

    ​ 5.安全软件包:用户自主增加安全特性,包括:

    ·安全提供者

    ·消息摘要

    ·数字签名

    ·加密

    ·鉴别

  5. Native关键字

    ·java无法执行,要调用底层的C语言库

    ·进入本地方法栈,调用JNI(本地方法接口)

    ·内存区域中专门开辟了标记区域Native Method Stack,记录native方法。

    ·JNI的作用:拓展java的使用,融合不同编程语言!

  6. PC寄存器

    相当于一个指针,存储指令指向下一个指令的地址

    每个线程都有自己的程序计数器pc,线程私有的,生命周期和线程一致

  7. 方法区 Method Area

    被所有线程共享,是所有定义的方法的信息都保存在这个区域

    静态变量static、常量final、类信息(接口定义和构造方法)Class、常量池存在方法区,实例变量存在堆中

  8. 栈 Stack

    主管程序运行,生命周期和线程一致,不存在垃圾回收问题

    每个方法运行时都会创建一个栈帧

    存储八大基本类型、引用对象和实例方法

    先进后出

  9. 三种JVM

    HotSpot-----sun公司

    JRockit-------BEA

    J9 VM--------IBM

  10. 堆 Heap

    一个JVM只有一个堆,堆内存大小是可调节的

    类加载器读取完类文件后,堆中存放所有应用类型的真实对象,类,方法,常量,变量

    堆内存可分为三个区域:

    ​ 新生区(伊甸园Eden Space、幸存区Survivor Space):

    ​ 伊甸园Eden Space:对象被创建首先被放置的区域,进行轻量级的垃圾回收后未被清理的对象会进入幸存区Survivor Space。

    ​ 幸存区Survivor Space:有两个,To Survivor Space和From Survivor Space,大小一致,用于保存在eden space内存区域中经过垃圾回收后没有被回收的对象。

    执行垃圾回收的时候Eden区域不能被回收的对象被放入到空的survivor(也就是To Survivor,同时Eden区域的内存会在垃圾回收的过程中全部释放),另一个survivor(即From Survivor)里不能被回收的对象也会被放入这个survivor(即To Survivor),然后To Survivor 和 From Survivor的标记会互换,始终保证一个survivor是空的。 Mintor GC/Young GC

    ​ 老年区

    ​ 用于于存放新生区中经过多次垃圾回收仍然存活的对象,也有可能是新生区分配不了内存的大对象会直接进入老年区。Major GC/Full GC

    ​ 永久区

    ​ 存放JDK自带的Class对象,Interface元数据,关闭JVM就会释放内存

  11. 堆内存调优

    OOM: java.lang.OutOfMemoryError: Java heap space

    尝试扩大堆内存,通过JProffiler工具分析OOM原因

    -Xms:设置jvm初始化大小

    -Xmx:设置jvm最大内存大小

    -Xmn:设置新生区大小

    -Xss:设置每个线程堆栈大小

    -XX:+PrintGCDetails //打印GC垃圾回收信息

    -XX:+HeapDumpOnOutOfMemoryError //OOM Dump

  12. GC

    作用区域:方法区和堆

    ​ 常用算法

    ​ 引用计数法:给每个对象分配一个计数器,记录使用次数

    ​ 复制算法:年轻代中的幸存区

    ​ 好处:没有内存碎片

    ​ 坏处:浪费了内存空间

    ​ 最佳使用环境:对象存活度低

    ​ 标记清除:对活着的对象进行标记,再对未标记的对象进行删除

    ​ 优点:不需要额外空间

    ​ 缺点:浪费时间,会参数内存碎片

    ​ 标记压缩::标记清除后,向一段移动存活的对象

    GC分代收集算法:新生代用复制算法,老年代用标记清除压缩

  13. JMM (Java Memory Modal------java内存模型)

一种跨平台开发规范

三大特效:原子性、可见性、有序性

标签:Survivor,Space,对象,内存,JVM,加载
From: https://www.cnblogs.com/JasHu/p/18287266

相关文章

  • “只讲干货!!”{java入门篇} 勇闯java的勇士们 别问我java行不行 不行也是你不行,不努力
    面向对象编程(Object    Oriented    Programing)神速熟悉面向对象        学完本节,如果还有点糊涂,很正常,本节仅是你的“初恋对象”。本节仅仅是为了方便大家入门,更快的了解面向对象。后面,才是真正开始“面向对象”,真正为了“结婚”、为了“开......
  • JVM垃圾回收性能调优实战指南
    JVM垃圾回收性能调优实战指南一、引言在Java应用程序中,垃圾回收(GarbageCollection,GC)是自动管理内存的重要机制。然而,不恰当的垃圾回收配置可能导致性能瓶颈,如频繁的GC暂停、内存碎片过多等。因此,对JVM垃圾回收性能进行调优是提升Java应用性能的关键环节。本文将介绍JVM......
  • 从jvm层面搞懂java的i++
    >本博客将从java字节码的层面解剖为什么i=0;i=i++;仍然会等于0字节码解析:iconst_x:代表将常量x放到操作数栈中istore_x:其中x必须是局部变量表中的一个合法下标,然后我们会从操作数栈中弹出对应的栈尾的元素(需要是int)以之来进行设置iload_x:则是加载对应的局部变量表的x......
  • JVM 堆内存结构 年轻代 老年代
    堆内存内存划分对于大多数应用,Java堆是Java虚拟机管理的内存中最大的一块,被所有线程共享。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数据都在这里分配内存。为了进行高效的垃圾回收,虚拟机把堆内存逻辑上划分成三块区域(分代的唯一理由就是优化GC性......
  • JVM专题之G1垃圾收集器上
    JDK8为什么不用CMS做为默认垃圾收集器呢1.CMS单线程或者双线程情况下效率很低2.CMS会并发失败3.CMS可中止的预处理会导致极限5S停顿4.并发失败进入foregroud还会导致进入FullGC,全局MSC整理5.CMS吞吐的设计并不是很优秀G1的目的:GarbageFirst,也就是垃圾优先原则,也就......
  • JVM专题之G1垃圾收集器下
    索引(记录)的源码的工作流程图如下:CSet(CollectionSet回收集合)收集集合(CSet)代表每次GC暂停时回收的一系列目标分区。在任意一次收集暂停中,CSet所有分区都会被释放,内部存活的对象都会被转移到分配的空闲分区中。因此无论是年轻代收集,还是混合收集,工作的机制都是一致的。年轻......
  • 学习JVM需要掌握这些技能
    最近,一直有小伙伴让我整理下关于JVM的知识,经过十几天努力算是整理出来了。希望对大家有所帮助。JDK是什么?JDK是用于支持Java程序开发的最小环境。Java程序设计语言Java虚拟机JavaAPI类库JRE是什么?JRE是支持Java程序运行的标准环境。JavaSEAPI子集Java虚拟......
  • 面试官:JVM调优,主要针对是哪一个区域?JVM内存结构是怎样的?
    作为一个Java程序员,在日常的开发中,不必像C/C++程序员那样,为每一个内存的分配而操心,JVM会替我们进行自动的内存分配和回收,方便我们开发。但是一旦发生内存泄漏或者内存溢出,如果对Java内存结构不清楚,那将会是一件非常麻烦的事情!本文笔者将为大家详解Java内存结构。面试tips聊聊......
  • JVM8为什么要增加元空间 ?
    持久代持久代的大小为什么移除持久代?元空间元空间的特点:持久代持久代中包含了虚拟机中所有可通过反射获取到的数据,比如Class和Method对象。不同的Java虚拟机之间可能会进行类共享,因此持久代又分为只读区和读写区。JVM用于描述应用程序中用到的类和方法的元数据也存......
  • Java JVM——11. 执行引擎
    1.概述执行引擎属于JVM的下层,里面包括:解释器、即时编译器、垃圾回收器。执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而......