
[JVM]了断局
文章平均质量分 67
了断了断,当断不断,反受其乱....
张伯毅
某厂技术,Apache DolphinScheduler Committer.
专注于调度&实时&大数据体系~
展开
-
[JVM]了断局: [ 目录 ]
[JVM]了断局: 说什么也没用,背就完了[必背][JVM]了断局: “运行时数据区“理论梳理[JVM]了断局: 类文件结构梳理[JVM]了断局: JDK默认配置.[JVM]了断局: G1 入门[JVM]了断局: 类加载机制原图:https://www.processon.com/view/5cff6c05e4b0a65d8095d130未完,待补充................原创 2020-08-24 21:09:07 · 10038 阅读 · 0 评论 -
JVM 内存管理的不足
JVM 内存管理的不足:Java 对象存储密度低 : Java 的对象在内存中存储包含 3 个主要部分:对象头、实例数据、对齐填充部分。例如, 一个只包含 boolean 属性的对象占 16byte:对象头占 8byte,boolean 属性占 1byte, 为了对齐达到 8 的倍数额外占 7byte。而实际上只需要一个 bit(1/8字节)就够了。Full GC 会极大地影响性能 : 尤其是为了处理更大数据而开了很大内存空间的 JVM来说, GC 会达到秒级甚至分钟级。OOM 问题影响稳定性 :翻译 2021-07-04 15:55:23 · 530 阅读 · 0 评论 -
Java 哪些对象才能作为gc root
.一 .前言二 .总结三 .详情3.1. 所有已加载的类(ClassLoaderDataGraph::roots_cld_do)3.2. 所有Java线程当前栈帧的引用和虚拟机内部线程(Threads::possibly_parallel_oops_do)3.3. JVM内部使用的引用(Universe::oops_do和SystemDictionary::oops_do)3.4. JNI handles(JNIHandles::oops_do)3.5. 所有synchronized锁住的对象引用(Obje原创 2021-06-25 19:58:00 · 1191 阅读 · 0 评论 -
[JVM]了断局: 堆外内存无法 [ -XX:MaxDirectMemorySize ] 限制
一. 前言今天看到一句话 , 有点懵, 所以验证一下.使用sun.misc.Unsafe的allocateMemory方法分配堆外内存。不受-XX:MaxDirectMemorySize这个JVM参数的限制二. 结论上面的结论有点不完善:如果通过反射的方式拿到Unsafe的实例,然后用Unsafe的allocateMemory方法分配堆外内存. 确实不受-XX:MaxDirectMemorySize这个JVM参数的限制 . 所以限制的内存大小为操作系统的内存.如果使用Java自带的原创 2021-05-12 21:42:52 · 5416 阅读 · 0 评论 -
[JVM]了断局: 说什么也没用,背就完了[必背]
一.JVM在什么情况下会加载一个类1.加载 :你的代码中用到这个类的时候2.验证:根据Java虚拟机规范,来校验你加载进来的“.class”文件中的内容,是否符合指定的规范。3.准备:给类分配一定的内存空间然后给他里面的类变量(也就是static修饰的变量)分配内存空间,并且给一个默认的初始值4.解析:把将常量池中的符号引用转为直接引用,可以认为是一些静态绑定的会被解析,动态绑定则只会在运行是进行解析;静态绑定包括一些final方法(不可以重写),static方法(只会属于当...原创 2020-08-24 01:13:37 · 7580 阅读 · 0 评论 -
[JVM]了断局:内存模型与线程
前言Java内存模型的主要目的是定义程序中各种变量的访问规则, 即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节。Java内存模型规定了所有的变量都存储在主内存(Main Memory) 中(此处的主内存与介绍物理硬件时提到的主内存名字一样, 两者也可以类比, 但物理上它仅是虚拟机内存的一部分) 。 每条线程还有自己的工作内存(Working Memory, 可与前面讲的处理器高速缓存类比) , 线程的工作内存中保存了被该线程使用的变量的主内存副本, 线程对变量的所有操...原创 2020-08-25 23:03:49 · 7243 阅读 · 0 评论 -
[JVM]了断局: Class文件结构梳理
一.对象创建当Java虚拟机遇到一条字节码new指令时, 首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用, 并且检查这个符号引用代表的类是否已被加载、 解析和初始化过。 如果没有, 那必须先执行相应的类加载过程...原创 2020-08-20 20:35:51 · 7376 阅读 · 0 评论 -
[JVM]了断局: “运行时数据区“理论梳理
一.前言Java虚拟机是整个Java平台的基石,是Java技术用以实现硬件无关与操作系统无关的关键部分,是Java语言生成出极小体积的编译代码的运行平台,是保障用户机器免于恶意代码损害的屏障。 --------《Java虚拟机规范》图片地址:https://www.processon.com/view/5cff6c05e4b0a65d8095d130二.运行时数据区接下来主要说明Java虚拟机[运行时数据区]的内存划分..Java虚拟机所管理的内存将会包...原创 2020-08-13 09:31:32 · 4804 阅读 · 0 评论 -
[JVM]了断局: 类加载机制
Java虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验、 转换解析和初始化, 最终形成可以被虚拟机直接使用的Java类型, 这个过程被称作虚拟机的类加载机制。在Java语言里面, 类型的加载、 连接和初始化过程都是在程序运行期间完成的.Java天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。类加载的时机一个类型从被加载到虚拟机内存中开始, 到卸载出内存为止, 它的整个生命周期将会经历加载(Loading) 、 验证(Verification) ...原创 2020-08-24 20:57:58 · 7269 阅读 · 0 评论 -
[JVM]了断局: G1 入门
一.概念二.核心设计思路三.如何设定G1对应的内存大小四.新生代还有Eden和Survivor的概念吗?五.G1的新生代垃圾回收六.什么时候触发新生代+老年代的混合垃圾回收?七.G1垃圾回收的过程八.回收失败时的Full GC九.程序假死查验十. G1参数一.概念把Java堆内存拆分为多个大小相等的Region.G1也会有新生代和老年代的概念,但是只不过是逻辑上的概念.G1最大的一个特点,就是可以让我们设置一个垃圾回收的预期停顿时间 ...原创 2020-08-24 10:29:23 · 7531 阅读 · 0 评论 -
[JVM]了断局:字节码执行引擎
一.前言执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念, 这两种机器都有代码执行能力, 其区别是物理机的执行引擎是直接建立在处理器、 缓存、 指令集和操作系统层面上的, 而虚拟机的执行引擎则是由软件自行实现的, 因此可以不受物理条件制约地定制指令集与执行引擎的结构体系, 能够执行那些不被硬件直接支持的指令集格式。二.运行时栈帧结构Java虚拟机以方法作为最基本的执行单元, “栈帧”(Stack Frame) 则是用于支持虚拟机进行方法调用和方法执行背后.原创 2020-08-26 10:20:54 · 7318 阅读 · 0 评论 -
[JVM]了断局:常量池 VS 运行时常量池 VS 字符串常量池
一.前言最近在看JVM, 常量池, 运行时常量池,字符串常量池 这个看的有点懵. 整理一下.class常量池是在编译的时候每个class都有的. 在编译阶段,存放的是常量的符号引用。 [在class文件中.] 字符串常量池在每个VM中只有一份,存放的是字符串常量的引用值。 [在堆中.] 运行时常量池是在类加载完成之后,将每个class常量池中的符号引...原创 2020-08-26 15:07:18 · 7731 阅读 · 1 评论 -
[JVM]了断局: JDK8默认配置.
查看栈内存参数命令: java -XX:+PrintFlagsFinal -version | grep ThreadStackSizebogon:~ sysadmin$ java -XX:+PrintFlagsFinal -version | grep ThreadStackSize intx CompilerThreadStackSize ...原创 2019-08-23 11:49:16 · 2083 阅读 · 0 评论 -
[JVM]了断局: 局部变量表和操作数栈实例分析
一.前言以圆形的周长公式为例进行分析局部变量表和操作数栈是如何工作的.示例一:1.代码package com.classloading;public class Circumference { public static void main(String[] args) { Circumference.circumference(10) ; } public static double circumference(float r) {..原创 2020-08-26 21:50:41 · 6627 阅读 · 0 评论 -
[JVM]了断局: 虚拟机字节码指令表速查
字节码 助记符 指令含义 0x00 nop None 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2...原创 2019-06-11 14:34:20 · 1093 阅读 · 0 评论