服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Java对象创建内存案例解析

Java对象创建内存案例解析

2021-11-03 11:02小炭在努力 Java教程

这篇文章主要介绍了Java对象创建内存案例解析,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

Java对象创建内存图解析

1. 栈

  • Java栈的区域很小 , 特点是存取的速度特别快,栈存储的特点是, 先进后出,存储速度快的原因: 栈内存, 通过 栈指针"来创建空间与释放空间,指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存。这种方式速度特别快 , 仅次于PC寄存器,但是这种移动的方式, 必须要明确移动的大小与范围 ,明确大小与范围是为了方便指针的移动 , 这是一个对于数据存储的限制, 存储的数据大小是固定的 , 影响了程序的灵活性。 所以我们把更大部分的数据 存储到了堆内存中存储的是:基本数据类型的数据 以及 引用数据类型的引用。

例如:
int a =10;
Person p = new Person();
10存储在栈内存中 , 第二句代码创建的对象的引用§存在栈内存中

2. 堆

  • 堆存放的是类的对象 ,Java是一个纯面向对象语言, 限制了对象的创建方式:所有类的对象都是通过new关键字创建new关键字, 是指告诉JVM, 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间,堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长,堆内存中内存的释放是由GC(垃圾回收器)完成的垃圾回收器 回收堆内存的规则:当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 。

3. 方法区

方法区存放的是:

  • 类信息
  • 静态的变量
  • 常量
  • 成员方法
    方法区中包含了一个特殊的区域 ( 常量池 )(存储的是使用static修饰的成员)

创建内存栈、堆、方法区图析

举个例子如下图:

Java对象创建内存案例解析

对象的引用存放在栈中,new创建Book()对象在堆内存中开辟了一段内存,内存都是有地址的假设为0x123,栈内存中存储了地址,地址指向堆内存,获取了对象Book的属性name、info,并赋值为"计算机",“计算机书籍”,如图示:

Java对象创建内存案例解析

接着BOOK book2 = book1,在栈内存中又创建了一个区域,这个区域就是book2,也拿到book1的地址,通过book2调用将name改为"Java",接着在调用方放say()。整个过程如图示:

Java对象创建内存案例解析

结果如下:

Java对象创建内存案例解析

  • 方法结束整个过程完成后,变量对象使用完毕,因为它的作用域就这么大,将会被释放,book2,book1先后出栈释放,紧接着堆内存的对象没有任何栈内存指向它,最后交给交给GC垃圾回收期处理。

这就是Java对象创建内存到释放内存的一个过程。

到此这篇关于Java对象创建内存案例解析的文章就介绍到这了,更多相关Java对象创建内存内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_45670060/article/details/119299031

延伸 · 阅读

精彩推荐
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04