• JVM运行时存储区分为4个


    JVM(Java Virtual Machine)运行时存储区分为4个:
    1、程序计数器:线程私有。是一块较小的内存,是当前线程所执行的字节码的行号指示器。通过改变计数器的值来确定下一条指令,比如循环,分支,跳转,异常处理,线程恢复等都是依赖计数器来完成。是JVM中唯一没有规定OOM(OutofMemory)的区域。
     
    2、栈区:线程私有,生命周期和线程相同。
         用于存储(1)基础数据类型 byte short int long float double char boolean (2)对象的引用变量(引用变量就相当于是为堆中的数组或对象起的一个别名,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。)
     
    3、堆:所有线程共享 ,JVM只有一个堆区,虚拟机启动时创建。
         用于存储:(1)new出来的的对象  (2)数组
     
    4、方法区(永久区、静态区):所有线程共享,用于存储已被JVM加载的类信息、常量、静态变量等数据。
         方法区的垃圾收集主要是回收废弃常量无用的类(卸载类)但是垃圾回收其实很少光顾这个区域。
     
     
    提问:String 和 stringbuffer创建的对象放在栈还是堆呢?
         String既可以在堆中存放,也可以在栈中存放。String对象有两种方式来创建,一种是new,比如String str = new String("abc"),这样的会存放在堆中,且每调用一次就会创建一个新的对象;另一种是直接用等号赋值String str = "abc",这一种是先在栈中创建一个对String类的对象引用变量str ,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str 指向"abc",如果已经有"abc",则直接令str 指向"abc"。
         stringbuffer存放在堆中。
  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/kqZhu/p/7574326.html
Copyright © 2020-2023  润新知