深入理解java虚拟机走进java

大数据开发程序猿      2022-04-12     141

关键词:

1.JDK:java程序设计语言、java虚拟机、javaAPI

二、自动内存管理机制

-----------------------------------------------------

  1.运行时数据区域:

    (1)java虚拟机在执行java程序的过程中会把所管理的内存划分为若干个不同的数据区域。这些区域有着各自的用途,以及创建和销毁的时间,有些区域随着虚拟机的启动而存在,有些区域则是依赖用户线程的启动和结束而创建和销毁。

    (2)java虚拟机所管理的内存会包括以下几个运行时数据区域

    

    (3)从上图可以看出堆区方法区是被所有线程共享的。java虚拟机栈、本地方法区以及程序计数器这几个之间是线程隔离的数据区

  2.程序计数器:当前线程所执行的字节码的行号指示器。字节码解释器的工作就是通过改变计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程回复等基础功能都需要依赖这个计数器来完成。为了线程切换之后能够恢复到正确的位置,每个线程需要一个独立的程序计数器

  3.java虚拟机栈。也是线程私有的,生命周期与线程相同。

     (1)虚拟机栈描述的是java方法执行的内存模型:每个方法执行的时候都会创建一个栈帧,用于存储局部变量表、操作栈、动态链接、方法出口等信息。每个方法被调用直至完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出站的过程。

     (2)虚拟机栈一般用来存放局部变量。局部变量表所需的内存空间在编译器间完成分配,当进入一个方法的时候,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法执行期间,不会改变局部变量表的大小

     (3)在java虚拟机中,对于区域规定了两种异常情况:如果请求栈深度大于虚拟机所允许的深度,就会抛出StackOverflowError异常;如果虚拟机可以动态扩展,当扩展时无法申请到足够的内存的时候会抛出OutOfMemoryError异常

  4.本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,只不过虚拟机栈是为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Ntive方法服务

  5.java堆。存放数组和对象的地方。  

    (1)java堆是java虚拟机所管理的内存中最大的一块。java堆是 被所有线程共享的一块区域,在虚拟机启动的时候进行创建。堆内存唯一存储的是实例对象,几乎所有对象实例都在这里进行内存的分配。几乎所有对象实例都要在这里分配内存。

    (2)java堆是垃圾收集器管理的主要区域,因此很多时候也称为GC堆(Garbage Collected Heap)。java堆可以细分为:新生代和老年代;如果再细致一点有Eden空间、From Survivor空间、To Survivor空间等。

    (3)java虚拟机规定,java堆可以处于物理上不连续的内存空间中,只要逻辑上连续即可,就像磁盘空间一样。如果堆中没有完成内存的分配并且无法扩展的时候,就会抛出OutOfMemoryError异常

    (4)java堆。heap:存放对象和数组的地方,堆分为两个区域:young generation(年轻代)+old genneration(年老代)

        young generation(年轻代)又可以分为eden(伊甸区)、survivor1(幸存一区)和survivor2(幸存二区)

    (5)permanent区(永久区)。相当于方法区(存放类和方法的地方)。

  6.方法区(Method Area)。和堆区一样,是各个线程共享的内存区,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等。还有一个别名非堆。这个区域回收的目标主要是主要是常量池的回收和类型的卸载。方法区溢出是因为类太多导致的。静态码块在类加载的时候运行,类加载的时候加载一次,后面就不再进行加载了。

  7.运行时常量池。是方法区的一部分,用于存放编译期生成的各种字面量符号引用。

  8.直接内存。不是虚拟机运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,但是这部分内存因为被频繁使用,可能会导致OutOfMemoryError异常出现。

  9.编写java源码 *.java ------(编译)----->*.class-----ClassLoader(类加载器,加载*.class文件到JVM中)

  10.

深入理解java虚拟机-常用vm参数分析

Java虚拟机深入理解系列全部文章更新中...深入理解Java虚拟机-Java内存区域透彻分析深入理解Java虚拟机-常用vm参数分析深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别JVM内存分配文盲深入理解Java虚拟机-如何利用JDK自带... 查看详情

深入理解java虚拟机-如何利用visualvm对高并发项目进行性能分析

Java虚拟机深入理解系列全部文章更新中...深入理解Java虚拟机-Java内存区域透彻分析深入理解Java虚拟机-常用vm参数分析深入理解Java虚拟机-JVM内存分配与回收策略原理,从此告别JVM内存分配文盲深入理解Java虚拟机-如何利用JDK自带... 查看详情

深入理解java虚拟机类加载机制

本文内容来源于《深入理解Java虚拟机》一书,非常推荐大家去看一下这本书。本系列其他文章:【深入理解Java虚拟机】Java内存区域模型、对象创建过程、常见OOM【深入理解Java虚拟机】垃圾回收机制1、类加载机制概述虚拟机把... 查看详情

深入理解java虚拟机

title:深入理解Java虚拟机date:2020-05-1410:58:24tags:JVM,虚拟机目录title:深入理解Java虚拟机date:2020-05-1410:58:24tags:JVM,虚拟机1.运行时数据区域2.GC垃圾回收3.内存分配与回收策略4.类加载机制1.加载2.验证3.准备4.解析5.初始化5.类与类加载器1.... 查看详情

深入理解java虚拟机垃圾回收机制

本文内容来源于《深入理解Java虚拟机》一书,非常推荐大家去看一下这本书。本系列其他文章:【深入理解Java虚拟机】Java内存区域模型、对象创建过程、常见OOM1、垃圾回收要解决的问题垃圾收集(GarbageCollection,GC),要设计... 查看详情

深入理解java虚拟机

1:java的体系结构  java程序设计语言  javaclass文件格式  java应用编程接口  java虚拟机2:java虚拟机的主要任务是装载class文件并且执行其中的代码。3:java有两种方法,Java方法和本地方法。4:通过本地方法,java程序可... 查看详情

深入理解java虚拟机

 让我们开启java虚拟机的愉快之旅。一、java虚拟机的特点1、支持跨平台。2、支持多种语言,不止只有java语言,只有语言支持的相应的规范,即可java虚拟机中运行。二、java的发展版本说明java在不断更新和优化,其中有很多... 查看详情

深入理解java虚拟机

java内存区域Java虚拟机执行java程序时会将管理的内存划分为若干个区域:   1. 程序计数器    程序计数器是一个”线程私有“的内存区域,用于获取下一条需要执行的字节码指令,如分支、循环、跳转等。  2.Ja... 查看详情

深入理解java虚拟机(类文件结构)

深入理解Java虚拟机(类文件结构)欢迎关注微信公众号:BaronTalk,获取更多精彩好文!之前在阅读ASM文档时,对于已编译类的结构、方法描述符、访问标志、ACC_PUBLIC、ACC_PRIVATE、各种字节码指令等等许多概念听起来都是云山雾... 查看详情

深入理解java虚拟机到底是什么?

好文转载:http://blog.csdn.net/zhangjg_blog/article/details/20380971什么是Java虚拟机 作为一个Java程序员,我们每天都在写Java代码,我们写的代码都是在一个叫做Java虚拟机的东西上执行的。但是如果要问什么是虚拟机,恐怕很多人就会模... 查看详情

深入理解java虚拟机

 java历史1996.01.23发布Jdk1.01998.12.04发布jdk1.2(里程碑的版本)注意:集合容器Collection和Map都是从1.2开始1999.04.27HotSpot虚拟机发布,成为1.3后SunJDK的默认虚拟机,这本书主要讲这个虚拟机2004.09.30发布jdk1.5这个版本也很重要,出... 查看详情

书籍摘要-深入理解java虚拟机

java内存区域和内存溢出异常划分内存: java虚拟机在执行java程序时将内存划分为5个部分。线程私有的有成员计数器、虚拟机栈、本地方法栈,线程共享的有方法区、堆。 程序计数器储存字节码行号,此区域未规定任何内存溢... 查看详情

《深入理解java虚拟机:jvm高级特性与最佳实践》pdf下载

《深入理解Java虚拟机:JVM高级特性与最佳实践》【PDF】下载链接:https://u253469.pipipan.com/fs/253469-230062566   内容简介作为一位java程序员,你是否也曾经想深入理解java虚拟机,但是却被它的复杂和深奥拒之门外?没关系,... 查看详情

深入理解java虚拟机---虚拟机工具jps与jstat(十四)

 jps-javaprocessstatusjps类似于linux的ps命令,用于查看进程.JPS名称: jps-JavaVirtualMachineProcessStatusTool命令用法: jps[options][hostid]       options:命令选项,用来对输出格式进行控制& 查看详情

深入理解java虚拟机04--类结构文件

一.程序存储格式统一的程序存储格式:不同平台的虚拟机于所有平台都统一使用程序存储格式——字节码(ByteCode);Java虚拟机不关心Class文件的来源,而只和“Class文件"这种二进制文件格式关联,也就是说Java虚拟机只认识“Class"... 查看详情

深入理解java虚拟机:运行时数据区域

  Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建... 查看详情

《深入理解java虚拟机-第3版》学习笔记,一文涵盖全书精髓

前言大家好~之前做好书推荐时,给大家分享过《深入理解Java虚拟机》这本书。我们先来看一下《深入理解Java虚拟机》(第3版)的豆瓣评分。《深入理解Java虚拟机》这本书相信大家都看过吧,说是每位Javaer必看... 查看详情

《深入理解java虚拟机》读后笔记-垃圾收集算法

文章目录《深入理解Java虚拟机》读后笔记-垃圾收集算法1.概述2.如何判断对象已死?2.1引用计数算法2.2可达性分析算法2.3Java中的引用2.4回收方法区3.垃圾收集算法3.1分代收集理论3.2标记-清除算法3.3标记-复制算法3.4标记-整理... 查看详情