首页 > 其他分享 >JVM

JVM

时间:2024-03-28 15:15:19浏览次数:21  
标签:Java 常量 对象 JVM 方法 加载

JVM

.class文件

平台无关性

类加载器

  1. 启动类加载器(Bootstrap ClassLoader):负责加载JDK中的核心类库

  2. 扩展类加载器(Extension ClassLoader):负责加载Java的扩展类库

  3. 系统类加载器(App ClassLoader):负责加载应用程序classpath目录下所有jar和class文件。

方法区

方法区用于存储JVM加载完成的类型信息、常量、静态变量、即时编译器编译后的代码缓存,方法区和 Java 堆区一样,都是线程共享的内存区域。

Java堆(JVM堆、Java heap)

  • 堆区负责存放对象实例,当Java创建一个类的实例对象或者数组时,都会在堆中为新的对象分配内存。

  • 虚拟机中只有一个堆,程序中所有的线程都共享它。

  • 通常情况下,堆占用的内存空间是最多的。

  • 堆的存取方式为管道类型,先进先出。

  • 在程序运行中,可以动态的分配堆的内存大小。

  • 堆的内存资源回收是交给JVM GC进行管理的,

虚拟机栈(JVM栈、VM Stack)

  • 在Java栈中只保存基础数据类型和对象的引用,注意只是对象的引用而不是对象本身哦,对象是保存在堆区中的。

  • 每个线程都会建立一个栈,每个栈又包含了若干个栈帧,每个栈帧对应着每个方法的每次调用,栈帧包含了三个部分:[1]局部变量区(方法内基本类型变量、对象实例的引用);[2]操作数栈区(存放方法执行过程中产生的中间结果);[3]运行环境区(动态连接、正确的方法返回相关信息、异常捕捉);

本地方法栈(Native Method Stack)

  • 本地方法栈的功能和JVM栈非常类似,区别在于虚拟机栈执行的是Java方法,本地方法栈执行的是本地(Native)方法服务,存储的也是本地方法的局部变量表,本地方法的操作数栈等信息。

  • 栈内的数据在超出其作用域后,会被自动释放掉,它不由JVM GC管理。

程序计数器

每条线程都会有一个独立的程序计数器。

JVM执行引擎

主要职责,就是把这些自行制定的指令集翻译成硬件所支持的指令集格式,然后执行。

本地方法接口(JNI)

JNI是Java Native interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C和C++)。

JVM GC(垃圾回收机制)

常量池

Class常量池

在JVM把Class文件加载完成后,Class 常量池里的数据会存放到运行时常量池中。

运行时常量池(Runtime Constant Pool)

运行时常量池是方法区(Method Area)的一部分,运行时常量池中存储的,是基本类型的数据和对象的引用

字符串常量池(String Constant Pool) & 其他包装类型里实现的常量池

 

标签:Java,常量,对象,JVM,方法,加载
From: https://www.cnblogs.com/Si-wuxie/p/18101711

相关文章

  • jvm内存模型
    1栈局部变量表存放局部变量局部变量表中的对象是指向堆中对象的地址操作数栈方法内的数据计算程序计数器程序一行代码运行后存放下一行代码的地址本地方法栈方法用native修饰动态链接符号引用转化为直接引用直接引用为方法区的具体地址方法出口2堆新生代伊甸......
  • SAP BTP云上一个JVM与DB Connection纠缠的案例
    前言最近在CF(CloudFoundry)云平台上遇到一个比较经典的案例。因为牵扯到JVM(app进程)与数据库连接两大块,稍有不慎,很容易引起不快。在云环境下,有时候相互扯皮的事蛮多。如果是DB的问题,就会找DB相关部门。关键是如何自证。涉及到职场生存法则,大家都不愿意去背锅,谁背锅,意......
  • JVM(六)——内存模型与高效并发
    内存模型与高效并发一、java内存模型【java内存模型】是JavaMemoryModel(JMM)简单的说,JMM定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、和原子性的规则和保障1)原子性原子性在学习线程时讲过,下面来个例子简单回顾一下:问题提出,两个线......
  • JVM学习
    1.1 JVM种类重用HOTSPOT。还有些列入IBM开发的灯。 1.4JVM和操作系统的关系 1.5JVMJREJDKJDK->JRE->JVM开发需要JDK,运行需要JRE 1.6JVM虚拟机规范JVM是栈结构。JVM翻译字节码有两种方式,解释执行,还有一种是JIT。 1.7JVM整体架构程序计数器......
  • [转帖]SPECjbb MultiJVM - Java Performance
     MovingonfromSPECCPU,weshiftovertoSPECjbb2015.SPECjbbisafromground-updevelopedbenchmarkthataimstocoverbothJavaperformanceandserver-likeworkloads,fromtheSPECwebsite:“TheSPECjbb2015benchmarkisbasedontheusagemodelofa......
  • jvm指针压缩和内存对齐的学习
    jvm指针压缩和内存对齐的学习背景最近要搞一个测试工作.想着能够提高一下在国产服务器上面的性能.想到一个办法是,提高JVM的内存配置.减少GC数量来提高性能.但是同时觉得jvm开启指针压缩的大小其实是32G内存.这里其实一直有一个疑惑.一般的网上说法都是需要低于......
  • [转帖]JVM之指针压缩&内存如何设置
    https://www.cnblogs.com/liang1101/p/12727754.html 在32位到64位的转变中,人们最大的获益是内存容量。在一个32位的系统中,内存地址的宽度就是32位,这就意味着,我们最大能获取的内存空间是2^32(也就是4G)字节。这个容量明显不够用!在一个64位的机器中,理论上,我们能获取到的内......
  • JVM的一些小记
    把最近的一些从jvm原理书中的一些摘要记一下JVM1.对象的内存布局是什么样子?对象在堆内存中的存储布局可以划分3个部分,对象头,实例数据,对齐填充。对象头包括两个部分,第一是对象的运行时数据,如对象哈希码,GC分代年龄,锁状态等,这部分称作MarkWord。第二是类型指针,java通过......
  • 面试类-JVM原理(四)
    说说解释执行和编译执行的区别(补充)先说解释和编译的区别:解释:将源代码逐行转换为机器码。编译:将源代码一次性转换为机器码。一个是逐行,一个是一次性,再来说说解释执行和编译执行的区别:解释执行:程序运行时,将源代码逐行转换为机器码,然后执行。编译执行:程序运行前,将源代码一次......
  • JVM高频面试题---垃圾回收(3)
    JVM(3)垃圾回收对象什么时候可以被垃圾器回收?JVM垃圾回收算法有哪些?说一下JVM的分代回收说一下JVM有哪些垃圾回收器详细说一下G1垃圾回收器强引用、软引用、弱引用、虚对象......