首页 > 系统相关 >Java对象内存管理

Java对象内存管理

时间:2023-03-28 19:13:09浏览次数:32  
标签:Java 常量 对象 局部变量 回收 内存 方法 变量

对象内存管理介绍

  • 编译好的java程序需要运行在JVM中;JVM为java程序提供并管理所需要的内存空间:“栈”、“堆”、“方法区”三个区域,分别用于存储不同的数据。

    image

  • 存储new关键字所创建的对象。存储成员变量。

  • 访问对象需要一个引用变量,当一个对象没有任何的引用时,即视为被废的对象,属于被回收的范围,该对象中所有的成员变量也随之被垃圾回收机制回收。

  • 所以成员变量的生命周期:从对象在堆中创建开始到被垃圾回收机制回收结束。

  • 当你创建一个对象的时候,对象放在堆中,栈中存放了一个地址,地址指向对象,

  • 当创建基本数据类型时,直接在栈中存放。

  • 存储局部变量(在方法中声明的变量)
  • 一个java程序从开始到结束会有多次方法的调用;JVM会为每一个方法的调用在栈中分配一个对应的内存空间--栈帧;一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据,当某个方法调用完成后,其对应的栈帧被清除,局部变量失效

方法区

  • 存放类的相关信息,java程序运行时,首先会通过类加载器载入类文件的字节码文件信息,经过解析后将其装入方法区中,类的各种信息(包括方法、类的静态成员变量)都在方法区存储。
  • 类在实例化对象时,多个对象会拥有各自在堆中的空间,但所有实例对象是共用在方法区中一份方法定义的
  • 每个对象所共享的东西。

常量池

常量池分为两种:静态常量池和运行时常量池。
静态常量池

  • 静态常量池指的是在编译期确定,保存在class文件中的一些数据。
  • 常量池主要用于存放两大类常量:字面量(Literal)和符号引用量。
    • 字面量相当于Java语言层面常量的概念,如文本字符串、声明为final的常量值等。
    • 符号引用则属于编译原理方面的概念,包括了如下三种类型的常量:
      1、类和接口的全限定名;
      2、字段的名称和描述符;
      3、方法的名称和描述符。

运行时常量池

  • 在运行时常量池是方法区的一部分,在JDK1.7之后运行时常量池从方法区中移出,放在堆中。
  • 常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。

成员变量和局部变量的区别

  1. 普通成员变量是属于对象的,声明在类中,而局部变量是属于方法的。
  2. 成员变量有默认值(基本数据类型为...,引用数据类型默认值为null),局部变量没有默认值,在第一次使用时必须初始化。
  3. 生命周期不同。成员变量的生命周期:从对象在堆中创建开始到被垃圾回收机制回收结束;局部变量的生命周期:方法被调用开始到调用完成结束。

标签:Java,常量,对象,局部变量,回收,内存,方法,变量
From: https://www.cnblogs.com/CenCen/p/17266320.html

相关文章

  • 瑞萨G2UL工业核心板内存测试,您想了解的内容全都有
    1. 测试对象HD-G2UL-EVM基于HD-G2UL-CORE工业级核心板设计,一路千兆网口、一路CAN-bus、3路TTL UART、LCD、WiFi、CSI 摄像头接口等,接口丰富,适用于工业现场应用需求,亦方便......
  • 自定义对象
    Vue官方文档:自定义指令—Vue.js(1)注册全局指令:Vue.directive(“自定义指令名称”,{Inserted(el,binding){//el表示使用此指令的DOM元素,binding可......
  • JSON 数组对象获取 其中某个属性的值
    importcn.hutool.json.JSONArray;importcn.hutool.json.JSONObject;importcn.hutool.json.JSONUtil;publicstaticvoidmain(String[]args){Strings......
  • 转载:JavaScript文字转语音_SpeechSynthesisUtterance语音合成的使用
    原文链接:https://mp.weixin.qq.com/s?__biz=MjM5MDA2MTI1MA==&mid=2649118413&idx=3&sn=3385dee75bcffa307baa79c3cde4095b&chksm=be587160892ff87605cf347eddad2ad7a55a95......
  • 服务器处理能力估算(CPU、内存、存储)之二
    1  引题  但凡写过技术方案的都知道,在技术方案最终落实到工程实施部署时,必须编制出当前解决方案需要部署的IT设备及环境,包括:需要的网络环境、端口、带宽、组网......
  • C#面向对象核心-继承
    继承继承主要实现重用代码,来节省开发时间。1继承基本概念一个类B继承一个类A,被继承的类A称为父类、基类、超类,继承的类B称为子类、派生类。子类会继承父类的所有成......
  • Javascript 加密解密方法
    本文链接Javascript和我之前发的python加密以及go加密解密不一样不需要导那么多的库只需要安装几个库其中需要了解最多的crypto-js具体就不多介绍了直接上官......
  • Prometheus+Grafana监控服务器CPU、磁盘、内存等信息
    转载:https://huaweicloud.csdn.net/6356655dd3efff3090b5d1cc.html?spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCo......
  • Java官方笔记3Java语言基础
    变量InstanceVariables(Non-StaticFields)实例变量(非静态变量)一个类可以创造多个实例,实例中的变量叫做实例变量,相互独立。ClassVariables(StaticFields)类变量(......
  • 微信小程序 正则字符串转为正则对象
    场景:服务器返回的一个正则表达式是一个字符串类型的,直接拿去配置正则是不可以的,需要转为正则对象,然后去验证,网页可以使用evel()对象,但是微信小程序就不行,方......