java虚拟机-----堆、栈等内存结构

        虚拟机都是线程私有的,只要局部变量不逃逸出方法的作用范围---通过变量传入或者是到返回值就是逃逸出了方法的作用范围---就是线程安全的,但是虚拟机中堆都是线程共享的,因此是线程不安全的,而且堆中有垃圾回收机制。

       对内存溢出是正在使用的太多,且没有被垃圾回收机制回收。

outofmemoryerror 这个报错是堆内存溢出;

方法区使用的是堆内存的一部分;

String s1 = "a";
String s2 = "b";
String s3 = s1+s2 ;  执行的过程是 new StringBuild().append(s1).append(s2).toString();
String s4 ="ab";  // s3==s4  是错误的,因为s3 是一个新的new对象,存储的地址变了 
String s5 = "a"+"b";   s4==s5是true,因为s4存在于字符串常量池中,s5的结果ab在常量池中已经有了,不会在重新创建; 这是因为javac在编译的时候会优化
     s3和s5的主要区别是s3是不确定的它是在运行期间使用stringbuild动态拼接,而s5是已经确定的,它在运行之前就已经拼接完成。 
     intern方法可以将字符串放入字符串常量池中 (s.intern());

    直接内存:是操作系统的内存,不属于jvm,常用于NIO操作时,用于数据缓冲区,分配和回收成本高,但是读写性能高,不受jvm内存回收管理

unsafe类,是一个分配直接内存和释放直接内存的类;

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zero _s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值