![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM
JVM
HandKnock
读书-手敲-思考-总结-细节-深入-查漏补缺
展开
-
题目-JVM
JVM 和Dalvik虚拟机的区别 JVM:.java -> javac -> .class -> jar -> .jar 架构: 堆和栈的架构. DVM:.java -> javac -> .class -> dx.bat -> .dex 架构: 寄存器(cpu上的一块高速缓存) Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭 AR原创 2020-10-26 11:25:04 · 95 阅读 · 0 评论 -
垃圾回收
Java对象分配的过程 编译器通过逃逸分析,确定对象是在栈上分配还是在堆上分配。如果是在堆上分配,则进入2. 如果tlab_top + size <= tlab_end,则在TLAB上直接分配对象并增加tlab_top 的值,如果现有的TLAB不足以存放当前对象则3. 重新申请一个TLAB,并再次尝试存放当前对象。如果放不下,则4。 在Eden区加锁(这个区是多线程共享的),如果eden_top + size <= eden_end则将对象存放在Eden区,增加eden_top 的值,如果Ed原创 2020-10-26 10:07:11 · 104 阅读 · 0 评论 -
Java内存模型
Java内存模型 规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝, 线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。 不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。 原子性 在Java中,为了保证原子性,提供了两个高级的字节码指令monitorenter和monitorexit。 这两个字节码,在Java中对应的关键字就是synchronized。因原创 2020-10-26 09:56:01 · 53 阅读 · 0 评论 -
Java内存区域-运行时数据区
运行时数据区域 程序计数器:当前线程所执行的字节码的行号指示器。线程私有。 Java虚拟机栈:描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧 ,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。线程私有 本地方法栈:与虚拟机栈所发挥的作用是非常相似的,本地方法栈是描述的Native方法。 Java堆:此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。对于大原创 2020-10-26 09:42:58 · 51 阅读 · 0 评论 -
类加载机制
总结 类加载机制 把class文件加载到内存,并对数据进行校验,准备,解析,初始化,形成可以被虚拟机直接使用的字节码 类加载的时机(触发类的初始化) 使用new关键字实例化对象 读取一个类的静态代码块 使用java.lang.reflect包的方式对类进行反射调用 类加载过程 整个生命周期包括:加载、校验、准备、解析、初始化、使用和卸载7个阶段。 加载:通过一个类的全限定名来获取定义此类的二进制字节流,将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构,在内存中生成一个代表这个类的Class原创 2020-10-26 09:27:49 · 242 阅读 · 0 评论 -
JVM基本构成
JVM基本构成 图:F:\Android\博客图片素材\JVM基本构成 1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中 2.执行引擎:负责执行class文件中包含的字节码指令; 3.内存区(也叫运行时数据区):是在JVM运行的时候操作所分配的内存区 方法区(Method Area):用于存储类结构信息的地方,包括常量池、静态变量、构造函数等。虽然JVM规范把方法区描述为堆的一个逻辑部分, 但它却有个别名non-heap(非堆),所以大家不要搞混淆了。方法原创 2020-10-26 09:17:00 · 315 阅读 · 0 评论