zoukankan      html  css  js  c++  java
  • jvm

    对象的创建

    虚拟机遇到new的时候,1 检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已被加载,解析,初始化,

    2类加载检查通过后,虚拟机将为新生对象分配内存,这里可以了解一下指针碰撞,空闲列表,同步处理分配,本地线程分配缓冲分配空间。

    3 内存分配完成后,虚拟机要将分配到的内存空间都初始化为零值。

    4 虚拟机对对象进行信息设置:对象是哪个类的实例,如何找到类的元数据信息,对象的哈希码,对象的gc分代年龄等信息。这些信息存放在对象的对象头中。

    5 init方法还没执行,把对象按照程序员的意愿进行初始化。 这样一个真正可以用的对象才算完全产生出来。

    对象内存布局

    3快:对象头,实例数据,对齐填充。

    对象头两部分,1 存储对象自身的运行时数据,如哈希码,gc分代年龄,锁状态标志等,官方称为mark word。

          2 类型指针,即对象指向它的元数据的指针。jvm通过这个指针来确定这个对象 是哪个类的实例。注意:查找查找对象元数据信息并不一定要通过对象本身。

    实例数据:  对象真正存储的有效信息,无论从父类继承下来的还是子类中定义的,都会记录下来。

    对齐填充: 对象实例数据部分没有对齐的时候,需要通过对齐填充来补全,必须是8字节的整数倍。

    对象的访问定位   ,对象的访问方式是由jvm实现,决定的。流行的两种:句柄访问,直接指针。一个句柄池一个没有,句柄池中会存放对象实例数据与类型数据各自的具    体地址信息 。

    使用句柄访问的好处是reference中存储的是稳定的句柄地址,对象被移动回收的时候,不会影响reference。不实用的好处就是速度更快,节省了一次定位时间。

    OOM

    java堆溢出,程序+设置参数

    -Xms60m
    -Xmx60m
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:HeapDumpPath=/Users/shenshaonian/Desktop/dumptest

    /Users/admin/Downloads/mat.app/Contents/MacOS/MemoryAnalyzer -data ./workspace

    启动mat /Applications/mat.app/Contents/MacOS/MemoryAnalyzer -data ./workspace

    mat分析dump文件

  • 相关阅读:
    VoltDB公布4.0版本号,大步提高内存实时分析速度,进军操作数据库市场
    [AngularJS] angular-formly: Default Options
    [AngularJS] angular-formly: expressionProperties
    [Whole Web, Nods.js, PM2] Passing environment variables to node.js using pm2
    [ES6] 23. Rest Parameters & Spread Parameters
    [Whole Web, Node.js, PM2] Restarting your node.js app on code change using pm2
    [Whole Web, Node.js PM2] Loggin with PM2
    [Whole Web, Node.js, PM2] Configuring PM2 for Node applications
    [ES6] 22. Const
    [ES6] 21. ESNext, ES6-Shim & Node
  • 原文地址:https://www.cnblogs.com/woainixxx/p/12983615.html
Copyright © 2011-2022 走看看