zoukankan      html  css  js  c++  java
  • 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存放在堆中。
  • 相关阅读:
    信息收集渠道:文本分享类网站Paste Site
    泛域名Wildcard Domain
    分享Kali Linux 2017年第12周镜像文件
    同源策略Same-origin policy
    Wireshark如何选择多行
    GPP加密破解工具gpp-decrypt
    HTTP基础认证Basic Authentication
    HAXM 6.0.5显示不兼容Windows
    分享Kali Linux 2017年第11周镜像文件
    bitShark对Android版本的支持
  • 原文地址:https://www.cnblogs.com/kqZhu/p/7574326.html
Copyright © 2011-2022 走看看