JVM基础知识都有什么

发布时间:2021-10-23 16:13:16 作者:柒染
来源:亿速云 阅读:155

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

一、什么是JVM?

        

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

二、运行过程

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

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

JVM基础知识都有什么

三、JVM 内存区域

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

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


JVM基础知识都有什么

四、jvm内加载机制

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

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

JVM基础知识都有什么

五、JVM 运行时内存

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

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

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

堆内存结构

JVM基础知识都有什么

栈和堆的区别?

栈的优势:存取速度比堆要快,仅次于直接位于 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左右

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

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

推荐阅读:
  1. 软件测试中都有哪些Bug基础知识
  2. SparkSQL基础知识都有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jvm

上一篇:写代码的好习惯有哪些

下一篇:如何使用Linux命令

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》