
Jvm
文章平均质量分 85
Jvm
面向c v编程
这个作者很懒,什么都没留下…
展开
-
JVM 运行时数据区(程序计数器,java虚拟机栈,本地方法栈)(1)
1 运行时数据区组成概述JVM 的运行时数据区,不同虚拟机实现可能略微有所不同,但都会遵从 Java 虚 拟机规范,Java 8 虚拟机规范规定,Java 虚拟机所管理的内存将会包括以下几 个运行时数据区域:1.1 程序计数器(Program Counter Register):程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。1.2Java 虚拟机栈(Java Virtual Machine Stacks)描述的是原创 2022-01-09 17:09:51 · 412 阅读 · 0 评论 -
JVM运行时数据区(方法区)(3)
6.方法区6.1 方法区的基本理解:方法区,是一个被线程共享的内存区域。其中主要存储加载的类字节码、 class/method/field 等元数据、static final 常量、static 变量、即时编译器编译后的代码等数据。另外,方法区包含了一个特殊的区域“运行时常量池”。Java 虚拟机规范中明确说明:”尽管所有的方法区在逻辑上是属于堆的一部分,但对于 HotSpotJVM 而言,方法区还有一个别名叫做 Non-Heap(非堆),目的就是 要和堆分开.所以,方法区看做是一块独立于 java原创 2022-01-10 15:30:16 · 612 阅读 · 0 评论 -
JVM-本地方法接口
1 什么是本地方法:简单来讲,一个 Native Method 就是一个 java 调用非 java 代码的接口,一个 Native Method 是这样一个 java 方法:该方法的底层实现由非 Java 语言实现, 比如 C。这个特征并非 java 特有,很多其他的编程语言都有这一机制 在定义一个 native method 时,并不提供实现体(有些像定义一个 Java interface),因为其实现体是由非 java 语言在外面实现的。关键字 native 可以与其他所有的 java 标识符连用原创 2022-01-10 15:51:56 · 267 阅读 · 0 评论 -
JVM - 垃圾回收(垃圾回收概述)(1)
1 垃圾回收概述:1.1 概述:1.Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。2.垃圾收集,不是 Java 语言的伴生产物。早在 1960 年,第一门开始使用内存动态分配和垃圾收集技术的 Lisp 语言诞生。3.关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?4.垃圾收集机制是 Java 的招牌能力,极大地提高了开发效率。如今,垃圾收集 几乎成为现代语言的标配,即使经过如此长时间的发展,Java原创 2022-01-10 19:10:14 · 118 阅读 · 0 评论 -
JVM-垃圾回收(垃圾回收的相关概念,垃圾收集器概述)(4)
垃圾回收的相关概念:1.System.gc() 的理解在默认情况下,通过 System.gc()者 Runtime.getRuntime().gc() 的调用,会显式触发 Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而 System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能 确保立即生效)。JVM 实现者可以通过 System.gc() 调用来决定 JVM 的 GC 行为。而一般情况 下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦原创 2022-01-17 19:53:48 · 276 阅读 · 0 评论 -
JVM运行时数据区(堆)(2)
5.Java 堆内存5.1堆内存概述:一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域.Java 堆区在 JVM 启动时的时候即被创建,其空间大小也就确定了,是 JVM 管理 的最大一块内存空间.堆内存的大小是可以调节. 例如: -Xms:10m(堆起始大小) -Xmx:30m(堆最大内存大小) 一般情况可以将起始值和最大值设置为一致,这样会减少垃圾回收之后堆内存重 新分配大小的次数,提高效率.《Java 虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但逻辑原创 2022-01-10 14:50:00 · 409 阅读 · 0 评论 -
JVM-垃圾回收(垃圾回收阶段算法)(3)
垃圾回收阶段算法当成功区分出内存中存活对象和死亡对象后,GC 接下来的任务就是执行垃 圾回收,释放掉无用对象所占用的内存空间,以便有足够的可用内存空间为新对 象分配内存。目前在 JVM 中比较常见的三种垃圾收集算法是:标记-清除算法(Mark-Sweep)复制算法(Copying)标记-压缩算法(Mark-Compact)1.标记-清除算法:当堆中的有效内存空间(available memory)被耗尽的时候,就会停止整个程序(也被称为 stop the world),然后进行两项工作,第一项则原创 2022-01-17 18:54:17 · 323 阅读 · 0 评论 -
JVM 结构-类加载(1)
1 类加载子系统:作用:类加载子系统负责从文件系统或者加载class文件.只负责加载类,由执行引擎执行,存放在方法区(元空间).2 类加载的角色:1.class file 存在于硬盘上,可以理解为设计师画在纸上的模板,而最终这个模板在执行的时候是要加载 JVM 当中来,根据这个模板实例化出 n 个一模一样的实例.2.class file 加载到 JVM 中,被称为 DNA 元数据模板,放在方法区中.3.在.class–>JVM–>最终称为元数据模板,此过程就要有一个运输工具(类加原创 2022-01-08 17:26:43 · 616 阅读 · 0 评论 -
JVM-类加载(2)
4 类加载器分类:站在 JVM 的角度看,类加载器可以分为两种:1.引导类加载器(启动类加载器 Bootstrap ClassLoader). (不是java语言实现)2.其他所有类加载器,这些类加载器由 java 语言实现,独立存在于虚拟机外部,并且全部继承自抽象类 java.lang.ClassLoader.站在 java 开发人员的角度来看,类加载器就应当划分得更细致一些.自 JDK1.2 以 来 java 一直保持者三层类加载器:1.启动类加载器(引导类加载器)2.扩展类加载器3.应用原创 2022-01-09 15:35:39 · 284 阅读 · 0 评论 -
JVM - 垃圾回收(垃圾标记阶段算法,内存泄漏与溢出)(2)
2.垃圾回收相关算法:2.1.垃圾标记阶段算法:2.1.1 标记阶段的目的垃圾标记阶段:主要是为了判断对象是否存活1.在堆里存放着几乎所有的 Java 对象实例,在 GC 执行垃圾回收之前,首先需 要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC 才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个 过程我们可以称为垃圾标记阶段。2.那么在 JVM 中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经 不再被任何的存活对象继续引用时,就可以宣判为已经死亡原创 2022-01-11 17:50:08 · 2775 阅读 · 0 评论 -
JVM概述
虚拟机:所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的 VMware 就属于系统虚拟机,它是完全对物理计算机的仿真,提供了一 个可运行完整操作系统的软件平台。程序虚拟机典型的代表就是 java 虚拟机了,它专门为 执行某个单个计算机程序而设计。在 java 虚拟机中执行的指令我们称为 java 字节码指令。Java 虚拟机是一种执行 java 字节码文件的虚拟计算机,它拥有独原创 2022-01-08 15:49:50 · 545 阅读 · 0 评论 -
JVM - 执行引擎
1.执行引擎概述:1.执行引擎是 Java 虚拟机核心的组成部分之一。2.JVM 的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只 是一些能够被 JVM 所识别的字节码指令、符号表,以及其他辅助信息。3.那么,如果想要让一个 Java 程序运行起来,执行引擎(Execution Engine) 的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。简单来说,JVM 中的执行引擎充当了将高级语言翻译为机器语言原创 2022-01-10 16:36:57 · 449 阅读 · 0 评论