新人求加java中关于内存的几个问题

1、我听说栈内存用来存放一些基本类型的变量和数组及对象的引用变量,而堆内存主要是来放置对象的。那这个基本数据类型包括不包括String呢,我试了下用new String()和
用=赋值并不一样,是不是此处说的变量应该排除String呢,如果不是在栈中,是在常量池里吗,用=赋值的
2、关于类和方法加载的问题,我在一个包内写了三个类,分别是static A.class
非staticB.class,非static main.class,运行时首先回家再带有main方法的类mian,
那么在加载时,static A.class是否一开始就要在内存中加载
3、局部变量是在什么地方存储的呢,整型或布尔也是在栈中吗,String存储在常量池
里。另外就是在方法中生成的字符串是存储在哪的,比如说读取自txt文档的字符串
感觉这块好难,有几个问题都不会,请专家指点下

3个回答

1:String是引用类型。
java的数据类型分为两种类型,基本类型,引用类型。基本类型就是常见的int,byte,short,long而类似于Long等是引用类型。
基本类型与引用类型的区别呢可以简单理解为:基本类型存储在栈中的,引用类型对象存储在堆中,但是有一个东西引用他,栈中就是存储的他的地址信息,告诉代码你想用的这个对象在哪个位置,所以说是引用类型。
2:类加载问题
java是使用懒加载策略,就是什么时候用到,什么时候加载,如果这个类有父类,则先加载父类,如果这个类有静态变量,则先加载静态变量,然后加载静态代码块。
3:局部变量存储在哪里
java虚拟机对内存的划分分为:堆,栈,方法区(永久代)
堆:就是存储java大对象的,例如String啊之类的。
栈:每一个线程都有自己的栈区,调用一个方法的时候就会有一个栈帧与之对应。这个方法结束,栈帧也就回收了。基本类型就直接存在栈帧的局部变量表中,String这种引用类型,对象存在堆中,而栈帧的局部变量表中放的就是对这个对象的引用。所以栈相对于堆来说很小。
方法生成的字符串自然放在堆中。

另外:在jdk1.7及之前,还是有永久区的,1.8就换成了metasapce

你需要一本jvm相关的书,例如深入理解java虚拟机。
如果你的基础很差,但是有很强的上进心,对技术有很高的追求,可以淘宝买视频看,大概几块钱就可以搜到相关视频。

1、String是引用类型,所以new出来的都是引用数据类型,存储在堆内存中;基本数据类型包括:整型,浮点型,boolean

2、这个有点复杂,类加载顺序是一样的,static好像只是指明累的存储位置,这个我也忘记了,之前特意看了类的加载,没有完全记住...这记性,我也是想回答下,回忆回忆,望相互学习,望多指教。其实你这问题网上有很多,百度一下,基本就有,只是有可能有地方不理解。把不理解的地方发出来问,这样好些,还有,像是基本数据类型,和引用数据类型,这是java入门的入门,搞不清有点不应该

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问