Java虚拟机中的内存模型

Java虚拟机中的内存模型

1.题目分析

  • java虚拟机有那几块内存空间

    • 栈内存

    • 堆内存

    • 方法区


    • 本地方法区:这块内存空间主要调用的是操作系统相关资源

      • public static native long currentTimeMillis();
        
    • 寄存器:交给CPU进行使用的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-beI6sZXC-1618151252408)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\image-20210410111728165.png)]

2.问题扩展

  • 带有线程的内存图

3.应用场景

  • 多线程消费同一个商品,可以将该商品定义为共享资源,存放于堆内存中。

String s = new String(“xyz”);创建了几个StringObject?是否可以继承String类?

1.题目分析

  1. String属于什么数据类型?
    • 数据类型:
      • 基本数据类型:byte,short,int,long,float,double,char,boolean (8种)
      • 引用数据类型:类,数组,接口等
    • String是一个类,所以是引用数据类型,因为String被final修饰,所以不能被继承
  2. String常用的方法
    • public boolean equals(Object obj):比较字符串的内容是否相等
    • public intlength():获取字符串的长度,其实也就是字符个数
    • public boolean contains(String s):判断是否包含传入的字符串,包含true,不包含返回false
    • public String substring(int start):从start开始截取字符串//方法的返回值是截取后的字符串
    • public String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end,如果end值传入的是字符串最大索引+1的话则不会报出索引越界异常
    • public String toLowerCase():把字符串转换为小写字符串
    • public String toUpperCase():把字符串转换为大写字符串
    • public String[] split(String str):根据传入的字符串切割原字符串,返回的是字符串数组。//注意:如果切割的是.的话,传入的字符串应该是\\.
  3. java中的内存分配?
    • 栈内存:存储的是局部变量,局部变量指的是定义在方法中的变量。在变量使用完毕,编译器会自动施法内存,操作方式类似于数据结构的栈,也就是先进后出。
    • 堆内存:存储的是new出来的对象,也可以叫实体,由程序员释放内存,若程序员不释放,程序结束时可能由Os回收。
    • 静态区:全局变量和静态变量的存储是方在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(BSS)。程序结束后由系统释放。
    • 常量池:字符串存储的区域。程序结束后由系统释放。
    • 程序代码区:存放函数体的二进制代码
  4. String创建对象有什么特点?
    • String s = new String(“xyz”),创建StringObject分为两种情况
      • 如果String常量池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象new String(“xyz”)。
      • 如果String常量池中没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String(“xyz”。)
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3wTou67-1618151252411)(C:\Users\HP\Desktop\无标题.png)]

2.应用场景

String用于裁剪,拼接,搜索字符串,比较字符串,截取字符串,转换大小写等。在项目中不经常发送变化的业务场景中,优先使用String。

举例:

  1. ​ 如果用户进行登录,需要验证用户名和密码,那么就可以使用equals方法进行判断
  2. 如果用户登录中需要填写验证码,那就可以使用equalsIgnoreCase方法,因为验证码大小写都是可以的,equalsIgnoreCase是忽略大小写比较。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值