JAVA程序如何从内存中获取数据

JAVA程序如何从内存中获取数据,第1张

这个问题太不好回答了。

但是又很好回答。

比如:

String str1=new String("我爱我家");

这个时候已经在内存中分配一个内存块用来存储这个字符串数据了。

所以呢你取的时候也是很简单的。

直接读取str1就ok了。

你所说的取内存数据是想问什么呢?

不完全对,不只是堆内存,栈中也同样保存着临时数据

其中每个线程的栈中存储的内容都是独立的,而堆内存是共享的,所以在多线程编程时由于堆内存共享,会导致一些多线程安全问题,如:多线程的i++问题

栈中包含栈帧,每一个方法都是一个栈帧,当一个线程中有多个方法的时候,会进行压栈和d栈的 *** 作,如:一个线程先访问A方法,然后访问B方法,这时候就会先把栈帧A压栈,然后栈帧B再压栈,而d栈的时候是先入后出的,也就是B先d出,然后是A。

每一个栈帧又分别包含:局部变量表, *** 作数栈,动态链接和方法返回地址

局部变量表:存储方法中定义的各个局部变量

*** 作数栈:存储方法中的一些临时的计算结果

动态链接:把符号引用转为直接引用,因为在程序启动的过程中,其实我们并没有真的引用到Java的工具方法,而是使用一个符号做标记,当真正使用的时候再将标记直接指向具体方法

方法返回地址:记录方法执行结束后的指针,也就是我当前方法执行结束后需要干什么

两者是完全不同的两个概念

内存池:

在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配效率得到提升。

一个程序会随着长时间的运行和内存的申请释放而变得越来越慢,内存也会随着时间逐渐碎片化。特别是高频率的进行小内存申请释放,此问题变得尤其严重。

内存池最大的优势在于:

1、极少的(甚至没有)堆碎片整理

2、较之普通内存分配(如malloc,new),有着更快的速度

额外的,你还将获得如下好处:

1、检测任意的指针是否指向内存池内

2、生成"heap-dump"

3、各种 内存泄漏 检测:当你没有释放之前申请的内存,内存池将抛出断言

堆内存:

是一块内存区域,区别于栈区、全局数据区和代码区的另一个内存区域。堆内存允许程序在运行时动态地申请某个大小的内存空间。堆内存是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便

以上就是关于JAVA程序如何从内存中获取数据全部的内容,包括:JAVA程序如何从内存中获取数据、在计算机中运行Java程序时,堆内存中存放着临时数据。+(+)、java 内存池和堆内存什么关系啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9796822.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存