首页 > 系统相关 >Java(6)-Java内存区域和作用

Java(6)-Java内存区域和作用

时间:2024-05-17 14:18:52浏览次数:23  
标签:Java 游乐场 区域 线程 内存 本地 方法

本文在终于搞懂了java8的内存结构,再也不纠结方法区和常量池了!_java8堆中存放静态变量和字符串常量池吗-CSDN博客基础上加入了一些个人思考,原文写得就很通俗易懂,推荐

Java内存

Java程序在运行过程中使用的内存可以分成虚拟内存本地内存两大类。

虚拟内存

虚拟内存,就是指JVM自己管理的内存区域,包含运行java程序所需要的各种数据结构和运行环境。
主要包括:方法区、堆、栈、程序计数器、本地方法栈
我们可以用个例子简单理解这五大区域的含义:
如果把JVM内存比作一个巨大的游乐场,在这个游乐场中有五大区域,每个区域有自己特定的功能:
1.程序计数器:游乐场里的指南针,指示玩家(线程)正在玩什么(当前执行的字节码指令)。
2.虚拟机栈:游乐场里的桌台,比如给娃娃涂色,每个玩家(线程)都有自己的桌台,每当玩家要做某个动作时(方法调用),就会在桌台上放一些需要的工具(方法的局部变量、操作数栈等)。
3.本地方法栈:有时候玩家可能需要用到一些特别的工具(本地方法),这些工具并不是在游乐场中提供的(非java语言),本地方法栈就是存放这些特别工具的地方。
4.:这是游乐场最大的区域,有各种各样的玩具(对象),所有的玩家(线程)都会在这里创建和使用这些玩具。
5.方法区:类似于游乐场里的信息板,存放类的信息、常量、静态变量等,每当玩家(线程)玩一个新游戏()时,信息板上就会记录这个新游戏的信息(类的信息)。

本地内存

本地内存,就是JVM之外的内存,由操作系统直接管理,java程序可以通过特定的机制和接口访问和使用本地内存。

线程的角度看Java内存

通过上面的例子,可以发现使用Java内存的都线程,那么就有线程私有和线程共享两种分类。

  1. 线程私有
    1. 程序计数器:每个线程都有自己的程序计数器。程序计数器相对于一个标志,用来告诉线程执行到哪里了,从而实现多线程轮换切换。
    2. 虚拟机栈:每执行一个Java方法,就会在虚拟机栈中创建一个栈帧,执行完后出栈。
    3. 本地方法栈:类似于虚拟机栈,不过是每执行一个非Java方法就会在本地方法栈中创建栈帧,执行完后出栈。
  2. 线程共享:
    1. 堆:这里主要存放对象实例、字符串常量池、静态变量、线程分配缓冲区,所有的线程都可以使用。
    2. 方法区:这里主要存放类元信息(类的基本信息等)、运行时常量池。

标签:Java,游乐场,区域,线程,内存,本地,方法
From: https://www.cnblogs.com/marigo/p/18197716

相关文章

  • 多线程下使用List中的subList和remove方法产生的 java.util.ConcurrentModificationEx
    在说多线程操作List之前,我们先看下单线程下产生的问题:单线程List<Integer>listA=newArrayList<>();listA.add(1);listA.add(2);listA.add(3);listA.add(4);listA.add(5);listA.add(6);for(Integera:listA){......
  • java netty 实现 websocket 服务端和客户端双向通信 实现心跳和断线重连 完整示例
    javanetty实现websocket服务端和客户端双向通信实现心跳和断线重连完整示例maven依赖<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.97.Final</version></dependency>服务端一个接口IGet......
  • java PDF转换图片(多张pdf转换成一整张图片)
    引入pdf操作相关pom <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.21</version></dependency>具体代码@RequestMappin......
  • Java枚举类
    一、使用场景:什么情况下使用枚举类?有的时候一个类的对象的个数是固定的,这种情况下我们就应该用枚举类来表示这个类。比如表示星期,就可以将Week定义为一个枚举类,同时为Week枚举类创建七个对象。再比如表示季节,就可以将Season定义为一个枚举类,同时为Season枚举类创建四个对象。......
  • java01基础入门
    java01基础入门准备javac-versionjava-versioncd..//回到上一级勾选文件扩展名设置Path环境变量IDEA创建工程开发步骤project->module->package->class设置主题、字体快捷键注释关键字基本组成:由数字、字母、下划线(_)和美元符($)等组......
  • 谈谈垃圾回收机制方式及内存管理。
    回收机制方式1、定义和用法:垃圾回收机制(GC:GarbageCollection),执行环境负责管理代码执行过程中使用的内存。2、原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执......
  • 一个Java基于codePoint的emoji判断方法
    该方法参考自一篇博客java判断是否是emoji字符(史上最全)_Mr.QingBin的博客-CSDN博客_java判断emoji经过简单封装如下:publicclassEmojiFilter{privateEmojiFilter(){}/***过滤emoji或者其他非文字类型的字符*如果只需要判断是否含有emoji,使用hasEmoji......
  • 一个Java基于阻塞的定时消费内存队列
     @Getter@AllArgsConstructorpublicenumInsertQueueEnum{A(30000,10,TimeUnit.SECONDS,2,1000),;privatefinalintcapacity;//队列长度privatefinalinttime;//最长阻塞时间privatefinalTimeUnittimeUnit;//最长阻塞时间单位privatefi......
  • Java 网络编程(socket)
    概念:1.什么是网络编程?  计算机跟计算机之间通过网络进行数据传输。2.通信的软件架构C/S与B/S的区别?  C/S:客户端/服务端模式(需要开发客户端)  B/S:浏览器/服务端模式(不需要开发客户端)  网络编程三要素:1.IP     设备在网络中的地址,是唯一的标识2.......
  • hdu1176免费馅饼java
    一个数塔问题,以时间为纵坐标、位置为横坐标创建一个二维数组,然后从下往上相加。状态转移方程:9>=j>=1时dp[i][j]+=max(max(dp[i+1][j],dp[i+1][j+1]),dp[i+1][j-1])  j=0时 dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]) j=10时dp[i][j]+=......