java的内存管理 对象的分配与释放

分配:

程序员通过new为每个对象申请内存空间(基本类型除外下面有介绍,注意局部变量和对象的实例变量的区别)所有对象都在堆中分配空间;

释放:

对象的释放是由垃圾回收机制决定和执行的,这样极大的简化CG(垃圾处理装置)的负担,当然同时也为程序员带来便利(例如c语言需要手动的去处理已经不在使用的对象,如果遗忘内存就会被越占越多)。

可以分为2大类:堆内存与栈内存

(1)在函数中定义的基本类型变量(即基本类型的局部变量)和对象的引用变量(即对象的变量名指向该对象的内存地址)都在栈内存中分配;

(2)堆内存用来存储由new创建的对象和数组以及对象的实例变量(即全局变量)

(3)堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是运行时动态分配内存的;缺点是运行时动态分配内存,存取速度慢;

(4)栈的优点是存取速度较快仅仅次于CPU中的寄存器,且栈数据可以共享;但是栈中的数据大小和生存期是必须确定的,缺乏灵活性;

(5)只有一个堆区被所有线程共享,堆区不存放基本类型和对象引用只存放对象本身

(6)每个线程包含一个栈区,保存基础数据类型的对象和自定义对象的引用,每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问
还有一个方法区:存储所有对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量等信息,又叫静态区,是所有线程共享的。

java对象的销毁

Java中垃圾收集器自动地定期扫描Java对象的动态内存,并将所有的引用对象加上标记,在对象运行结束后(无引用变量对该对象进行关联),清除其标记,并将所有无标记的对象作为垃圾进行回收,释放垃圾对象所占的内存空间。

对象运行结束后或生命周期结束时,将成为垃圾对象,但并不意味着就立即会被回收,这时候就要看垃圾回收装置的心情有可能一下子就被回收,也有可能很长时间也不进行回收,仅当垃圾收集器空闲或内存不足时,才会回收他们。

Java中每个对象都拥有一个finalize()方法:gc会调用这个方法对当前对象进行回收.

java是怎么分配内存和释放内存的-详解相关推荐

  1. Java内存模型(JMM)详解-可见性volatile

    这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...

  2. 内存池:申请内存与释放内存

    1.内存池简介 内存池是池化技术中的一种形式.通常我们在编写程序的时候回使用 new delete 这些关键字来向操作系统申请内存,而这样造成的后果就是每次申请内存和释放内存的时候,都需要和操作系统的 ...

  3. 共享内存映射之mmap()函数详解

    转 共享内存映射之mmap()函数详解 /span> 查看全文 http://www.taodudu.cc/news/show-3175071.html 相关文章: 子集生成(二进制法,逐步生成 ...

  4. 内存测试工具memtester使用详解

    memtester的下载地址:http://pyropus.ca/software/memtester/  有源码安装包.deb包.rpm包等. 源码已经编译好,在linux下只要make一下就好了. ...

  5. 阿里云AMD服务器ECS计算型c7a、通用型g7a和内存型r7a性能参数详解

    阿里云第二代AMD服务器ECS计算型c7a.通用型g7a和内存型r7a实例,CPU采用2.55 GHz主频的AMD EPYCTM MILAN处理器,单核睿频最高3.5 GHz,算力更强,云服务器吧详细 ...

  6. Java生产环境下性能监控与调优详解 大纲 学习感悟

    Java生产环境下性能监控与调优详解 生产环境发生了内存溢出如何处理? 生产环境应该给服务器分配多少内存合适? 如何对垃圾收集器的性能进行调优? 4.生产环境CPU负载飙高该如何处理? 5.生产环境应 ...

  7. Java生产环境下性能监控与调优详解 第2章 基于JDK命令行工具的监控

    Java生产环境下性能监控与调优详解 第2章 基于JDK命令行工具的监控 2-1 JVM的参数类型 标准参数 x参数 XX参数 2-2 查看JVM运行时参数 2-3 jstat查看JVM统计信息 2- ...

  8. java的markword_【转帖】Java工具结构与锁实现原理及MarkWord详解

    Java工具结构与锁实现原理及MarkWord详解 https://www.pianshen.com/article/2382167638/ 我们都知道,Java工具存储在堆(Heap)内存.那么一个 ...

  9. java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解

    [Java教程]JavaScript函数的4种调用方法详解 0 2016-08-09 00:00:12 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C# ...

  10. Java中print、printf、println的区别 详解

    Java中print.printf.println的区别详解 printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 print就是一般的标准输出,但是不换行 println和pr ...

最新文章

  1. MPB:中科院城环所苏建强、朱永官等-功能基因高通量定量方法
  2. asa 防火墙基本配置管理
  3. lvds 共模电感_【成功案例】共模电感CM0805C221R-10解决车载LVDS信号的手持天线抗扰问题...
  4. 微信小程序游戏「跳一跳」高分秘籍
  5. 如何查看电脑上是否安装了MySQL
  6. php实现短信找回密码,thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能...
  7. 武汉大学计算机学院博士几年,计算机学院博士生申请答辩资格条件
  8. android地鼠游戏,非常地鼠手游
  9. 软件工程方法论对开发的有多大用?
  10. iOS 中饼状图的自定义绘制
  11. android app 原生 小米手机 TextView 不显示文字
  12. 【檀越剑指大厂—kafka】kafka高阶篇
  13. 起飞!通过无线WIFI下载调试FPGA
  14. 一根RS485线可以并联多少设备
  15. C++程序设计(三)—— 函数和函数模板
  16. MATLAB如何根据两个颜色(RGB值)产生任意多个中间的过渡色?
  17. 【读书笔记】计算广告学 Mooc
  18. 前端HTML+JS实现四级联动
  19. 哈希表(如何打造一个工业级的哈希表)
  20. RabbitMQ教程(四) Java 使用rabbitmq

热门文章

  1. 中国纳米硒行业投资现状分析及发需求前景预测报告2022-2028年
  2. pdf密码忘了怎么解除
  3. Java金额大写转换
  4. c语言解惑 指针 数组 函数和多文件编程,C语言解惑 指针、数组、函数和多文件编程...
  5. Docker API的
  6. DWF低代码开发技术及其在数字化运营和运维平台建设中的应用
  7. 常用的做外链方法总结
  8. python绘制capm模型
  9. 微信开发工具 git代码管理
  10. RK3066开发板的唯一码UUID