学习笔记—JVM】的更多相关文章

Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们仍需要了解JVM垃圾回收机制,以便在Java程序运行时发生错误的时候可以快速定位,并解决. 内存模型图 线程共享区: 方法区(Method Area):线程共享,存储被JVM加载的类信息.常量.静态变量.编译器编译后的代码等数据. Java堆(Java Heap):线程共享,用于存储对象实例,是垃圾…
JVM学习笔记 == 标签(空格分隔): jvm 学习笔记全部来自于<深入理解java虚拟机>总结 jvm内存示意图 虚拟机栈(Java Virtual Machine Stacks): 为虚拟机执行java方法(字节码)服务 局部变量表 操作数栈 动态链表 方法出口 虚拟机栈主要储存各种基本数据类型,对象引用等(由局部变量表实现) 每个方法创建时都会创建一个栈帧(Stack Frame) 每个方法从调用到执行完成 <>栈帧的入栈到出栈 异常 如果线程请求的栈深度大于虚拟机所允许的…
第四章 并行程序优化 1.非阻塞同步避免了基于锁的同步的缺陷,无锁算法没有锁竞争带来的系统开销,也没有线程间频繁调度带来的开销.CAS算法:包含3个参数CAS(v,e,n).V表示要更新的变量,E表示预期值,N表示新值2.JDK的java.util.concurrent.atomic包下,有一组使用无锁算法实现的原子操作类,如AtomicInteger/AtomicIntegerArray/AtomicLongArray等, 分别包装了对整数.整数数组.长整形数组等的多线程安全操作. 如: pu…
JVM结构 JVM总体结构图 类加载子系统与方法区: 类加载子系统负责从文件系统和网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间. 除了类信息外,方法区中还可能会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) Java堆: java堆在虚拟机启动时建立,它是java程序最主要的内存工作区域. 几乎所有的java对象实例都存放在java堆中.堆空间是所有线程共享的. 直接内存: java的NIO库允许使用直接内存. 直…
jmap jmap(JVM Memory Map)命令可生成head dump文件,还可查询finalize执行队列.Java堆和永久代的详细信息. 通过配置启动参数:-XX:+HeapDumpOnOutOfMemoryError参数可以让JVM出现OOM时自动生成dump文件. 官方文档链接地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html 命令格式: jstat [ option ] pid jsta…
按照线程私有和共享区域来划分 线程私有 程序计数器 指向当前线程正在执行的字节码行号地址,如果是本地方法,值为undefined 虚拟机中唯一不会oom的区域 为什么会有程序计数器 - java天生多线程 本地方法栈 非java方法.native 虚拟机栈 由栈帧组成 - 每个方法对应一个栈帧 局部变量表 操作数栈 动态链接 返回地址 栈帧会存在重叠区域-实现数据共享 字节码的执行过程 https://blog.csdn.net/a15089415104/article/details/8324…
JVM类加载机制分两部分来总结: (1)类加载过程 (2)类加载器 一.JVM类加载过程 类的加载过程:加载 →连接(验证 → 准备 → 解析)→ 初始化. 类的生命周期:加载 →连接(验证 → 准备 → 解析)→ 初始化 → 使用 →  卸载. 1 加载 1.1 加载阶段要做的3件事情 通过一个类的全限定名来获取该类对应的二进制字节流. 将这个字节流所代表的静态存储结构转化为方法区的数据结构. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口…
JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667  …
转自:http://blog.csdn.net/cutesource/article/details/5907418 版权声明:本文为博主原创文章,未经博主允许不得转载. 首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM. 对JVM内存的系统级的调优主要的目的是减少GC的频率和Fu…
首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM. 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(主要是CPU),影响系统的吞吐量.特别要关注Full GC,因为它会对整个堆进行整理,导致Full GC…