当前位置:首页 > 虚拟机 > 正文

java常量存放在虚拟机哪部分(java虚拟机中常量存储在哪里)

java虚拟机工作原理图解

Java虚拟机1.什么是Java虚拟机Java虚拟机是在真实计算机上通过软件模拟实现的虚拟机器。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,也有相应的指令。1、为什么使用Java虚拟机Java语言的一个非常重要的特性就是它的平台无关性。使用Java虚拟机是实现这一功能的关键。通用高级语言要想在不同的平台上工作,至少必须编译成不同的目标代码。引入Java语言虚拟机后,在不同平台上运行时无需重新编译Java语言。Java语言使用模型Java虚拟机保护了特定平台的信息,使得Java语言编译器只需要生成在Java虚拟机上运行的目标代码(字节码),无需修改就可以在多个平台上运行。Java虚拟机执行字节码时,会将字节码解释为机器指令,以便在特定平台上执行。2.谁需要了解Java虚拟机?Java虚拟机是Java语言底层实现的基础。任何对Java语言感兴趣的人都应该对Java虚拟机有一个大致的了解。这有助于理解Java语言的一些属性,也有助于使用Java语言。想要在特定平台上实现Java虚拟机的软件人员、Java语言编译器的作者以及想要使用硬件芯片实现Java虚拟机的人,都必须对Java虚拟机规范有深入的了解。再者,如果想要扩展Java语言或者将其他语言编译成Java语言字节码,还需要对Java虚拟机有深入的了解。3、Java虚拟机支持的数据类型。Java虚拟机支持的基本数据类型如下:byte://1字节有符号整数的补码Short://2字节有符号整数的补码int://4字节有符号long整数的补码//8字节有符号整数的补码float://4字节IEEE754单精度浮点数double://IEEE7548字节双精度浮点数charnumber://2字节无符号Unicode字符几乎所有Java类型检查都是在编译时完成的。当从Java执行时,上面列出的基本数据类型的数据不需要硬件标签。*处理这些原始数据类型的字节码(指令)已经表明了*作的数据类型。例如,iadd、ladd、fadd、dadd语句都是两个数相加,*运算类型为int、long、float、double。虚拟机没有为布尔类型(Boolean)设置单独的指令。布尔数据由整数指令处理,包括整数返回。布尔数组使用字节数组进行处理。虚拟机使用IEEE754格式的浮点数。不支持IEEE格式的旧计算机在运行Java数值计算程序时可能会非常慢。虚拟机支持的其他数据类型包括:object//4字节对Java对象(对象)的引用returnAddress//4字节,用于jsr/ret/jsr-w/ret-w语句注意:Java涵盖了数组至于对象处理。虚拟机规范对对象的内部结构没有任何特殊要求。在Sun的实现中,对对象的引用是一个句柄,它包含一对指:一个指指向对象的表,另一个指指向对象的数据。用Java虚拟机字节码表示的程序必须遵守类型约定。Java虚拟机实现应该拒绝执行违反类型规范的字节码程序。由于定义字节码的,Java虚拟机似乎只能在具有32位空间的机器上运行。但是您可以创建一个Java虚拟机,自动将字节码转换为64位格式。从Java虚拟机支持的数据类型可以看出,Java对数据类型的内部格式有严格的规定,使得不同Java虚拟机的实现对数据的解释方式相同,从而保证了Java的平台性和便携性。2、Java虚拟机体系结构Java虚拟机由五部分组成:指令集、寄存器集、堆栈、垃圾收集堆、区。这五个部分是Java虚拟机的逻辑组件,不依赖于任何实现技术或组织,但它们的功能必须以某种方式在真机上实现。指令集Java虚拟机支持大约248字节代码。每个字节码执行基本的CPU作,例如将整数添加到寄存器、传输子程序等。Java指令集相当于Java程序的汇编语言。Java指令集中的指令包括一个单字节运算符,用于指定要执行的作,以及零个或多个运算符,提供作所需的参数或数据。许多指令没有*运算符,仅由单字节*运算符组成。执行虚拟机内部循环的过程如下:do{取作符*的一个字节;根据*;}while运算符的值执行作(程序尚未完成)。指令中,虚拟机执行的过程非常简单,这有助于提高执行效率。语句中*运算符的数量和大小由*运算符决定。如果*作数大于1字节,则按照高位字节顺序存储

java中的String常量是存放在栈中还是堆中?

内存一般分为四部分
再次出现的是栈堆对象
栈存储局部变量
静态段的静态区域用于存储变量static和常量strings
数据段代码区用于代码
如果一个字符串是Strings="abc";放在栈上
如果使用对象创建Strings=newString("abc");创建了一个字符串
则放在堆上,如果输入字符串常量“abc”是只需静态段

Java内存划分到底是4个部分还是5个部分?

Java将内存分为两种:栈内存和堆内存。函数中定义的一些基本类型的变量和对象引用变量分配在函数的堆栈内存中。当代码块中定义了变量时,Java会在栈上为该变量分配内存空间,当超出该变量的作用域时,Java会自动释放分配给该变量的内存空间,并且该内存空间可以立即释放。请将其用于其他目的。堆内存用于存储用new创建的对象和数组。堆上分配的内存由Java虚拟机的自动垃圾收集器管理。在堆上创建数组或对象后,还可以在堆栈上定义特殊变量,使堆栈上变量的值等于数组或对象在堆内存中的首。堆栈成为数组或对象的引用变量。引用变量相当于给数组或者对象起个名字,以后可以使用栈上的引用变量来访问程序堆上的数组或者对象。具体来说,栈和堆都是Java中用来在Ram中存储数据的地方。与C++不同,Java自动管理堆栈和堆,因此程序员无法自己设置堆栈或堆。Java中的堆是类对象分配空间的运行时数据区域。这些对象是通过new、newaray、anewarray和multianewarray等指令创建的,不需要程序代码显式释放它们。堆负责垃圾收集。是的,堆的优点是可以动态分配内存大小。它在运行时动态分配内存,Java的垃圾收集器会自动收集不再使用的内存,因此无需提前通知编译器其生存期。但缺点是由于运行时动态分配内存,访问速度较慢,栈的优点是访问速度比堆后面的寄存器快,缺点是栈数据决定了数据的大小和生存期栈上,必须要做,缺乏灵活性。栈主要存储几种基本类型的变量:int、short、long、byte、float、double、boolean、char。栈有一个非常重要的特性:一个特殊的功能是堆栈中的数据可以共享。假设您同时定义它们:inta=3;整数=3;编译器首先处理inta=3。在堆栈上创建对变量a的引用,然后搜索堆栈。b表示值3是否直接指向3。这样就出现了a和b都指向3的情况。此时,如果再次设置a=4,编译器会再次搜索堆栈,看是否有4的值,如果没有,则存储4。进来指4。如果已经存在,则a直接指向该。因此,改变a的值不会影响b的值。重要的是要记住,这种数据共享和对两个对象的引用同时指向一个对象。对象共享有不同类型。在这种情况下,编译器对a进行修改,而不会影响b,这有助于节省空间。而对象引用变量通过修改对象的内部状态来影响其他对象。参考变量。

java工作原理

Java的工作原理
由四个方面组成:
(1)Java编程语言
(2)Java类文件格式
(3)Java虚拟机
(4)Java应用程序编程接口
编辑和运行Java程序时,必须同时涉及这四个方面。使用文本编辑软件(如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类,并通过调用类中的来访问它们(这些类实现了JavaAPI)资源对源文件进行编译生成二进制中间代码,存放在class文件中,然后通过运行与作平台环境对应的Java虚拟机来执行class文件,执行编译生成的字节码,并呼叫全班同学。文件中实现的满足程序的JavaAPI调用。