Java虚拟机

一、1.程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。

      2.处于线程独占区

二、1.虚拟机栈。描述的是Java方法执行的动态内存模型

         栈帧

          局部变量表

          outofMemory,stack

三、堆

      存放对象实例

      垃圾收集器管理的主要区域

       新生代,老年代

       -Xms -Xma

        outofMemory

四、方法区 存储虚拟机加载的类信息,常量,静态变量等数据

       垃圾回收在方法区的行为

       异常的定义

五、其他   运行时常量池(在方法区)、直接内存

六、给对象分配内存,初始化对象,执行构造方法

      (1)指针碰撞

      (2)空闲列表

      线程的安全性问题


对象的结构

  • Header(对象头)    
    • 自身运行时数据   
      •    哈希值,GC分代年龄,线程持有的锁,偏向线程ID 
  • 类型指针
  • InstanceData

对象的访问

    句柄

    直接指针


垃圾回收

如何判定对相关为垃圾对象

1.引用计数法 2.可达性分析(定义GCROOT:虚拟机栈,方法区常量或类属性所引用的对象,本地方法栈)

怎么回收

1.标记清除算法

    效率问题、空间问题

2.复制算法

     解决空间问题

3.标记整理

何时回收

seriral(需要停止)

最基本,历史最悠久

单线程垃圾收集器,桌面应用

ParNew(需要停止)

多线程

Parallel

复制算法(新生代收集器)

多线程收集器

达到可控制的吞吐量

XX:MaxGCPauseMillis 垃圾收集器最大停顿时间

XX:GCTimeRatio   吞吐量大小

吞吐量:CPU用于运行用户代码的时间与CPU消耗的总时间的比值

CMS收集器 Concurrent Mark Sweep

用于老年代

工作过程

   初始标记,并发标记,重新标记,并发清理

优点

   并发收集,低停顿

G1

对象分配原则

1.优先在Eden区域分配

2.大对象直接分配到老年代

3.空间分配担保,向老年代借用内存

4.长期存活对象进入老年代


逃逸分析与栈上分配

:分析对象的作用域:仅在当前方法中有效,就没有发生逃逸

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值