JVM
文章平均质量分 89
small_engineer
把学习比作游戏是再合适不过了,学习到了一点新技术,就相当于学到了新的必杀技;刷LeetCode就像打怪,一个个打过去;写项目就像搭建城堡,先从地基打起,逐渐到高楼大厦
展开
-
垃圾回收概述和相关算法
垃圾回收概述 Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收? 垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特原创 2022-03-23 15:15:55 · 122 阅读 · 0 评论 -
垃圾回收相关概念
System.gc()的理解 在默认情况下,通过System.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保立即生效) JVM实现者可以通过System.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个性能基准,我原创 2022-03-24 15:24:35 · 255 阅读 · 0 评论 -
面试中的高频知识点--String
String的基本特性 String s1 = "atguigu" ; // 字面量的定义方式 String s2 = new String("hello"); // new 对象的方式 String被声明为final的,不可被继承 String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小 String在jdk8及以前内部定义了final char value[]用于存储字符串数据。JDK9时改为byte原创 2022-03-22 17:45:16 · 818 阅读 · 0 评论 -
运行数据区--方法区(元空间)
栈、堆、方法区的交互关系 Person 类的 .class 信息存放在方法区中 person 变量存放在 Java 栈的局部变量表中 真正的 person 对象存放在 Java 堆中 在 person 对象中,有个指针指向方法区中的 person 类型数据,表明这个 person 对象是用方法区中的 Person 类 new 出来的 方法区的理解 方法区在哪里? 《Java虚拟机规范》中明确说明:尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩原创 2022-03-22 09:06:03 · 843 阅读 · 0 评论 -
JVM运行数据区--堆
堆的核心概述 堆与进程 堆针对一个JVM进程来说是唯一的。也就是一个进程只有一个JVM实例,一个JVM实例中就有一个运行时数据区,一个运行时数据区只有一个堆和一个方法区。 但是进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为原创 2022-03-20 17:18:07 · 101 阅读 · 0 评论 -
本地方法接口
什么是本地方法? 简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “c” 告知c编译器去调用一个c的函数。 为什么使用Native Method? Java使用起来非常方便,然而有些层次的任务用Java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。 与Java环境原创 2022-03-19 14:46:06 · 115 阅读 · 0 评论 -
运行时数据区
从这里开始,我们开始了解 内存 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。 我们通过磁盘或者网络IO得到的数据,都需要先加载到内存中,然后CPU从内存中获取数据进行读取,也就是说内存充当了CPU和磁盘之间的桥梁 运行时数据区具体结构 Ja原创 2022-03-19 13:15:41 · 228 阅读 · 0 评论 -
类加载子系统
整体架构 注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有 类加载子系统 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(链接阶段进行验证)。 ClassLoader只负责class文件的加载,至于他是否可以运行,则有ExecutionEngline执行引擎决定的 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量原创 2022-03-17 18:58:24 · 581 阅读 · 0 评论 -
JVM初识
Java-跨平台的语言 JVM-跨语言的平台 JVM的位置 JVM是运行在操作系统之上的,它与硬件没有直接的交互 JVM的整体结构 Java代码执行流程 JVM的架构模型 Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。具体来说:这两种架构之间的区别: 基于栈的指令集架构 设计和实现更简单,适用于资源受限的系统; 避开了寄存器的分配难题:使用零地址指令方式分配 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译原创 2022-03-17 12:10:18 · 92 阅读 · 0 评论