a552298242 2016-11-08 14:28 采纳率: 28.6%
浏览 792
已采纳

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

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

  • 写回答

3条回答 默认 最新

  • Readiay 2016-11-09 01:51
    关注

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样