深入分析Java内存区域的使用详解

时间:2023-09-25 23:21:29 

Java 内存划分:

    在Java内存分配中,java将内存分为:方法区,堆,虚拟机栈,本地方法栈,程序计数器。其中方法区和堆对于所有线程共享,而虚拟机栈和本地方法栈还有程序计数器对于线程隔离的。每个区域都有各自的创建和销毁时间。

程序计数器:

    作用是当前线程所执行的字节吗的行号指示器。Java的多线程是通过线程轮流切换并分配处理器执行时间方式来实现的。因此,每个线程为了能在切换后能恢复到正确的位置,每个线程需要独立的程序计数器。

Java 虚拟机栈:

    每个放在被执行的时候都会同时创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。虚拟内存栈就是我们经常讲的“栈”。其中局部变量表所需内存是在编译期完成分配。

本地方法栈:

    与虚拟机栈类似,区别在于虚拟机栈为虚拟机执行Java方法服务,而本地方法栈为虚拟机使用Native方法服务。

Java 堆:

    被所有程序共享,并且在虚拟机启动时创建。此内存区域作用是存放对象实例。根据Java虚拟机规定,Java堆可以处于物理上不连续的内存空间,只要逻辑上连续即可。

方法区:

    与堆相同,在各个线程间共享。作用是存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。

运行时常量池:

    是方法区的一部分。作用是存储编译期生成的各种字面量和符号引用。

标签:Java,内存区域
0
投稿

猜你喜欢

  • Android nativePollOnce函数解析

    2022-05-29 01:51:26
  • spring中向一个单例bean中注入非单例bean的方法详解

    2022-07-19 13:14:18
  • 关于SpringSecurity配置403权限访问页面的完整代码

    2023-11-13 02:03:59
  • C语言 OutputDebugString与格式化输出函数OutputDebugPrintf案例详解

    2023-11-02 16:21:47
  • 详解C#读写Excel的几种方法

    2022-10-23 14:23:28
  • C#处理猜拳问题的简单实例(非窗体)

    2021-08-01 18:58:22
  • Android Intent实现页面跳转的两种方法

    2022-03-13 22:27:10
  • C# 生成随机数的代码

    2021-06-16 06:05:43
  • SpringBoot集成Beetl后统一处理页面异常的方法

    2023-11-10 19:57:55
  • C#中应用程序集的装载过程详解

    2023-03-30 19:06:05
  • 详解Android自定义控件属性

    2023-09-27 18:00:34
  • Qt QTableWidget基本操作及使用

    2022-05-22 23:15:55
  • Android开发中ImageLoder加载网络图片时将图片设置为ImageView背景的方法

    2021-12-14 14:58:38
  • 探讨Android 的屏幕滚动操作不如 iPhone 流畅顺滑的原因

    2023-04-05 09:05:33
  • Java中List遍历删除元素remove()的方法

    2022-07-12 12:27:10
  • Java定时任务的三种实现方法

    2022-01-13 06:59:01
  • Java项目导入IDEA的流程配置以及常见问题解决方法

    2021-11-21 10:02:24
  • C# 类的声明详解

    2022-10-15 14:08:38
  • 详解Java中的实例初始化块(IIB)

    2023-06-08 08:35:46
  • Spring IOC创建对象的两种方式

    2023-09-10 15:58:27
  • asp之家 软件编程 m.aspxhome.com