千家信息网

JVM基础知识都有什么

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,JVM基础知识都有什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、什么是JVM?JVM是可运行Java代码的假想计
千家信息网最后更新 2024年11月28日JVM基础知识都有什么

JVM基础知识都有什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、什么是JVM?

JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆和一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。

二、运行过程

① Java 源文件-->编译器-->字节码文件

② 字节码文件-->JVM-->机器码

三、JVM 内存区域

主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区

域【JAVA 堆、方法区】、直接内存。



四、jvm内加载机制

Java源代码被编译成class字节码,JVM把描述类数据的字节码.Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称链接。

五、JVM 运行时内存

新生代:gc回收主要用复制算法

老年代:gc回收主要用标记清除算法

永久代:jdk8移除,被元数据区取代

堆内存结构

栈和堆的区别?

栈的优势:存取速度比堆要快,仅次于直接位于 CPU 中的寄存器。但缺点是,栈中的数据大小与生存周期必须是确定的。

堆的优势:可以动态地分配内存大小,生存周期也不必事先告诉编译器,Java 的垃圾回收器会自动收走那些不再使用的数据。但由于要在运行时动态分配内存,存取速度较慢。

六、GC垃圾回收

(1)如何确定垃圾

引用计数法

可达性分析

(2)回收对象

超出作用域的对象/引用计数为空的对象。

从gc root开始搜索,搜索不到的对象。

回收新生代区。

(3)回收算法

引用计数法

标记清除法

标记压缩法

复制算法

分代算法

七、JAVA 引用类型

强引用:把一个对象赋给一个引用变量,这个引用变量就是一个强引

用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到 JVM 也不会回收。因此强引用是造成 Java 内存泄漏的主要原因之一。

软引用:需要用 SoftReference 类来实现,对于只有软引用的对象来说,当系统内存足够时它不会被回收,当系统内存空间不足时它会被回收。软引用通常用在对内存敏感的程序中

引用:需要用 WeakReference 类来实现,它比软引用的生存期更短,对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管 JVM 的内存空间是否足够,总会回收该对象占用的内存。

引用:需要 PhantomReference 类来实现,它不能单独使用,必须和引用队列联合使用。虚引用的主要作用是跟踪对象被垃圾回收的状态。

八、常用JVM参数调优

Xss:每个线程的Stack大小

-verbose:gc 现实垃圾收集信息

-Xloggc:gc.log 指定垃圾收集日志文件

-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一

-XX:+UseParNewGC :缩短minor收集的时间

-XX:+UseConcMarkSweepGC :缩短major收集的时间

重要参数:

-Xms 堆初始值

-Xmx 堆最大可用值

-Xmn 新生代堆最大可用值

-Xmn 新生代大小,一般设为整个堆的1/3到1/4左右

注意:堆初始值=堆最大值,减少垃圾回收次数,提升效率。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0