zoukankan      html  css  js  c++  java
  • 堆,栈,常量池

    java 中保存new 出来的对象(每个对象都包含一个与之对应的class的信息,【class信息存放在方法区】),堆中分配的内存,有虚拟机的自动垃圾回收器管理,栈内存只对其所属线程可见。

    java 中保存一些基本数据类型 (int,long,byte,double,float,char,boolean,short)和引用变量,堆内存对所有线程可见。

    异常错误

    如果栈内存没有可用的空间存储方法调用和局部变量,JVM会抛出java.lang.StackOverFlowError。
    而如果是堆内存没有可用的空间存储生成的对象,JVM会抛出java.lang.OutOfMemoryError。

    空间大小

    栈的内存要远远小于堆内存,如果你使用递归的话,那么你的栈很快就会充满。如果递归没有及时跳出,很可能发生StackOverFlowError问题。
    你可以通过-Xss选项设置栈内存的大小。-Xms选项可以设置堆的开始时的大小,-Xmx选项可以设置堆的最大值。

    方法区:

    又叫静态区,跟堆一样,被所有的线程共享。它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    String a = new String("abc"); 产生一个或者两个对象。会先去常量池看有没有"abc"对象,若果没有则创建一个,然后堆中再创建一个常量池中此 ”abc” 对象的拷贝对象。

  • 相关阅读:
    前端二维码生成方式
    svn 本地仓库使用
    layer.open实现图片预览
    基于FreethEarh框架开发的3D综合态势系统
    Cesium原理篇:6 Render模块(5: VAO&RenderState&Command)【转】
    Cesium中DrawCommand使用【转】
    Cesium案例解析(三)——Camera相机[转]
    Cesium.knockout【转】
    Java堆和栈的区别
    Kafka Eagle安装详情及问题解答
  • 原文地址:https://www.cnblogs.com/cws-kf/p/8528937.html
Copyright © 2011-2022 走看看