一、JVM和Java体系结构(12)


java -Xss2m MyClass
需要注意的是,虚拟机栈的大小受到操作系统的限制,如果设置的虚拟机栈大小超过了操作系统的限制,将会导致程序无法正常运行 。因此,在设置虚拟机栈大小时,需要根据实际情况进行调整 。
虚拟机内存
Java 虚拟机在启动时会根据系统的物理内存自动分配一定大小的内存空间,这个大小通常称为初始堆大小( Heap Size) 。

一、JVM和Java体系结构

文章插图
默认情况下,Java 虚拟机的初始堆大小为物理内存的 1/64,最小值为 1MB,最大值为物理内存的 1/4 。例如,如果你的电脑物理内存为 8GB,那么 Java 虚拟机的初始堆大小为 128MB,最小值为 1MB,最大值为 2GB 。
需要注意的是,初始堆大小只是 Java 虚拟机的一个默认值,实际应用中需要根据具体情况进行调整,以满足应用程序的内存需求 。可以使用启动参数 -Xms 和 -Xmx 分别设置 Java 虚拟机的初始堆大小和最大堆大小 。例如,使用以下命令设置初始堆大小为 256MB,最大堆大小为 512MB:
java -Xms256m -Xmx512m MyClass
永久代和元空间和方法区有区别吗
永久代和元空间都是Java虚拟机用于存储类信息的区域,但是它们是在不同的Java虚拟机版本中使用的 。在Java 7及之前的版本中,Java虚拟机使用永久代来存储类信息,而在Java 8及之后的版本中,Java虚拟机使用元空间来存储类信息 。因此,永久代和元空间是Java虚拟机的两种不同的实现方式 。
方法区是Java虚拟机规范中定义的一个概念,它是Java虚拟机用于存储类信息的区域,包括类的代码、静态变量、常量池等 。在Java 7及之前的版本中,永久代就是方法区的一种实现方式 。而在Java 8及之后的版本中,元空间也是方法区的一种实现方式 。因此,方法区可以使用永久代或元空间来实现,但它们都属于Java虚拟机中用于存储类信息的区域 。
2、栈的存储单位
本地方法栈和虚拟机栈是Java虚拟机(JVM)中的两个重要的栈结构 。
虚拟机栈是用于执行Java方法的栈,每个线程都有自己的虚拟机栈,用于存储局部变量、方法参数、方法返回值和操作数栈等信息 。虚拟机栈的大小可以通过-Xss参数进行设置,如果线程请求的栈深度超过了虚拟机栈的最大深度,就会抛出异常 。
本地方法栈是用于执行方法的栈,与虚拟机栈类似,每个线程都有自己的本地方法栈 。本地方法栈中存储的是方法的信息,包括参数、返回值和局部变量等 。如果本地方法请求的栈深度超过了本地方法栈的最大深度,就会抛出异常 。
虚拟机栈和本地方法栈的区别在于,虚拟机栈是用于执行Java方法的栈,而本地方法栈是用于执行方法的栈 。虚拟机栈和本地方法栈的大小都可以通过JVM参数进行设置,但是两者的最大深度是独立的,互相不受影响 。
2.1、栈中存储什么?
每个线程都有自己的栈,栈中的数据都是以栈帧(Stack Frame)的格式存在 。
在这个线程上正在执行的每个方法都各自对应一个栈帧(Stack Frame) 。
栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息 。
复习:
OOP:
OOP(- ,面向对象编程)是一种编程范式,它将程序中的数据和操作数据的方法组合成一个对象,以此来描述现实世界中的事物及其关系 。
理解OOP可以从以下几个方面入手:
对象:OOP将程序中的实体看作是对象,这些对象具有属性和方法 。对象是现实世界中的实体在程序中的抽象,可以是人、车、动物、商品等 。