1.HotSpot VM:热点代码探测能力,与JIT技术共同进行编译优化,输出高质量代码

2.运行时数据区域

  

  • 程序计数器:控制程序执行顺序,无OOM
  • Java虚拟机栈:生命周期与线程一致,描述Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储 局部变量表、操作数栈、动态链接、方法接口等信息

  OOM情况:(1)线程深度:线程请求的栈深度>虚拟机所运行的最大深度;(2)线程大小:虚拟机动态扩展时无法申请到足够的内存

  

  • 本地方法栈:本地方法栈则为虚拟机所使用的Native方法服务

  此区域会抛StackOverflowError 和 OutofMemoryError异常

  

  • Java堆区:用于存放对象实例,可能会单独为线程分配私有缓冲区(TLAB)

  OOM:无内存可以扩展

  

  • 方法区:存储已经被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。

  可能被称为永久代,但是这种处理方式已被Native Memory取代

  GC很少,主要是针对常量池的回收和类型的卸载

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

  Class文件除了类的版本、字段、方法、接口等描述信息外,还有一项存储编译器生成的各种字面量和符号引用的常量池

  支持动态性,运行时可以将新的常量放入池中

  OOM:无法申请内存

  

  • 直接内存:

  非虚拟机运行时数据区的一部分,但是可能有OOM异常

  NIO:基于Channel与Buffer,使用Native函数库直接分配内存,提高性能

3.HotSpot VM

  • 对象创建过程

  • 对象的内存布局:三种类型

  对象头:运行时数据(如哈希码、GC分代年龄、线程持有的锁等)与类型指针(执行类元数据,JVM通过这个指针确定对象实际类型)

  实例数据:类所预定义的各种类型的字段内容

  对其填充:字节对齐

  • 对象的访问定位:两种方法

  句柄访问:引用中存放的是稳定的句柄地址,对象移动时,只需要改变句柄中实例数据的指针即可

  

  指针访问:更快,通过引用直接访问对象实例数据,解决了一次指针定位的开销

  

4.实战异常

5.参考

  https://blog.csdn.net/lin74love/article/details/81167761

  https://juejin.im/entry/5ba1a379e51d450e70426a2a

深入理解Java虚拟机1-chap1-2-斗之气8段的更多相关文章

  1. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  2. 《深入理解 java虚拟机》学习笔记

    java内存区域详解 以下内容参考自<深入理解 java虚拟机 JVM高级特性与最佳实践>,其中图片大多取自网络与本书,以供学习和参考.

  3. (1) 深入理解Java虚拟机到底是什么?

    好文转载:http://blog.csdn.net/zhangjg_blog/article/details/20380971 什么是Java虚拟机   作为一个Java程序员,我们每天都在写Java ...

  4. 深入理解java虚拟机(7)---线程安全 & 锁优化

    关于线程安全的话题,足可以使用一本书来讲解这些东西.<Java Concurrency in Practice> 就是讲解这些的,在这里 主要还是分析JVM中关于线程安全这块的内容. 1. ...

  5. 深入理解java虚拟机(6)---内存模型与线程 & Volatile

    其实关于线程的使用,之前已经写过博客讲解过这部分的内容: http://www.cnblogs.com/deman/category/621531.html JVM里面关于多线程的部分,主要是多线程是 ...

  6. 深入理解java虚拟机(5)---字节码执行引擎

    字节码是什么东西? 以下是百度的解释: 字节码(Byte-code)是一种包含执行程序.由一序列 op 代码/数据对组成的二进制文件.字节码是一种中间码,它比机器码更抽象. 它经常被看作是包含一个执行 ...

  7. 深入理解java虚拟机(4)---类加载机制

    类加载的过程包括: 加载class到内存,数据校验,转换和解析,初始化,使用using和卸载unloading过程. 除了解析阶段,其他过程的顺序是固定的.解析可以放在初始化之后,目的就是为了支持动态 ...

  8. 深入理解java虚拟机(1)------内存区域与内存溢出

    在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻. 而Java确把这一工作交给了虚拟机来处理. 我们首先来看看关于内存的问题. 1.问题: 1)java ...

  9. 什么是HotSpot VM & 深入理解Java虚拟机

    参考 http://book.2cto.com/201306/25434.html 另外,这篇文章也是从一个系列中得出的: <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> ...

  10. 【Todo】深入理解Java虚拟机 读书笔记

    有一个在线系列地址 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M ...

随机推荐

  1. redis安装相关下载

    redis-4.0.1.gem下载网址 https://rubygems.org/gems/redis/ rubyinstaller-2.3.3-x64.exe下载网址 http://dl.bintr ...

  2. 【静默】在RHEL 6.5上静默安装Oracle 18c

    [静默]在RHEL 6.5上静默安装Oracle 18c Oracle 18c.18c其实就是12.2.0.2,19c就是12.2.0.3.db_home.zip 安装包大概4.25G,解压后有8.9 ...

  3. 24小时学通Linux内核总结篇(kconfig和Makefile & 讲不出再见)

    非常开心能够和大家一起分享这些,让我受益匪浅,感激之情也溢于言表,,code monkey的话少,没办法煽情了,,,,,,,冬天的风,吹得伤怀,倒叙往事,褪成空白~学校的人越来越少了,就像那年我们小年 ...

  4. 24小时学通Linux内核之构建Linux内核

    今天是腊八节,说好的女票要给我做的腊八粥就这样泡汤了,好伤心,好心酸呀,看来代码写久了真的是惹人烦滴,所以告诫各位技术男敲醒警钟,不要想我看齐,不然就只能和代码为伴了的~~话说没了腊八粥但还是有代码, ...

  5. HTTP Status 404(The requested resource is not available)的几种解决方案

    1. 未部署Web应用 2.URL输入错误       排错方法:首先,查看URL的IP地址和端口号是否书写正确.其次,查看上下文路径是否正确 Project--------Properties--- ...

  6. 并发编程基础之wait以及notify的用法

    一:概念 线程通信中经常用到wait和notify,顾名思义,wait即让当前线程处于等待状态,notify通知锁对象 上的另一个线程被唤醒,这里的唤醒是指可以去争夺锁资源,nofityAll是唤醒该 ...

  7. ubuntu开机后弹出System program problem detected的解决办法

    sudo gedit /etc/default/apport 将enabled=1改为enabled=0保存退出重启后就可以了

  8. 实现Ajax异步的layui分页

    https://www.e-learn.cn/content/java/1084522

  9. ajax 上传文件,监听进度(progress)

    mdn 前端代码 github <body class="m-2"> <label for="a" class="btn btn-p ...

  10. 13 form表单

    form表单中可包括 <input > 类型包括 text(name,value) password(name,value) checkbox(name,value) radio(chec ...