zoukankan      html  css  js  c++  java
  • Java 内存区域与内存溢出

    Java 内存区域可以分为两大类:

    1、线程共享的:
    方法区:线程共享;用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译的代码等数据。它被虚拟机规范描述为堆的一部分。也被视为“永久代”。

    运行时常量:方法区的一部分;

    堆(heap):所以线程共用;几乎所有的对象实例、数组都是在堆上分配内存(JIT技术可以不在堆上分配内存、比如栈);可以物理不连续;可能存在给各线程分配的,线程私有的线程缓冲区(Thread Local
    Allocation Buffer, TLAB);堆通车也被分为初生代,年老代;

    执行引擎:

    本地接口库:

    直接内存:非虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域,也可能导致内存异常;里面的内存为堆外内存。
    2、线程独享的:
    虚拟机栈:生命周期和线程相同;其中的局部变量表保存基础类型数据或者对象的引用;如果线程请求的栈深度超过了虚拟机运行的深度,就会抛出StackOverMemoryError;

    本地方法栈:和虚拟机栈类似,甚至有些虚拟机上面并没有区分这两者。

    程序计算器:当前线程执行字节码的行号指示器,被字节码解释器用于选择下一条执行指令。占用内存小,只用于java代码。

    对象内存布局:

    1、对象:由三部分组成,对象头(Header)、实例数据(Instance data)、对齐填充(padding)

    2、对象头部:
    a、一部分用于存储自身运行时数据,包括哈希码(25bit)、GC分代年龄(4bit)、锁状态标记(2bit)、线程持有的锁、偏向线程ID、偏向时间戳;
    b、一部分为类型指针,指向它的类元数据
  • 相关阅读:
    从操作系统拖拽图片到指定区域进行预览
    原生拖拽,拖放事件(drag and drop)
    H5原生拖拽事件
    css3滚动提示
    通过模糊来弱化背景
    js获取url的各项参数
    垂直居中 解决方法
    紧贴底部的页脚
    实现html元素跟随touchmove事件的event.touches[0].clientX移动
    前端方面值得尊敬的大神们
  • 原文地址:https://www.cnblogs.com/lipeil/p/5838944.html
Copyright © 2011-2022 走看看