随笔分类 -  JVM

1
摘要:JVM 与 Linux 的内存关系详解 阅读全文
posted @ 2019-12-11 15:59 Rainyn 阅读(273) 评论(0) 推荐(0) 编辑
摘要:1、JVM中OOP-KLASS模型 在JVM中,使用了OOP-KLASS模型来表示java对象,即:1.jvm在加载class时,会创建instanceKlass,表示其元数据,包括常量池、字段、方法等,存放在方法区;instanceKlass是jvm中的数据结构;2.在new一个对象时,jvm创建 阅读全文
posted @ 2018-07-15 20:34 Rainyn 阅读(5596) 评论(2) 推荐(2) 编辑
摘要:我们知道,我们写的java代码称为源码,想要能够被jvm执行首先需要编译成.class文件,那么编译完到使用又都经理的哪些阶段呢?主要分为以下三个阶段: 加载:查找并加载类的二进制数据(.class文件硬盘到内存的一个过程)。 连接 - 验证:确保被加载的类的正确性。 - 准备:为类的 静态变量分配 阅读全文
posted @ 2018-05-21 14:26 Rainyn 阅读(315) 评论(0) 推荐(0) 编辑
摘要:@Slf4j public class SimpleHappenBefore { private static int a = 0; private static boolean flag = false; public static void main(String[] args) throws InterruptedException { for... 阅读全文
posted @ 2018-05-18 11:09 Rainyn 阅读(153) 评论(0) 推荐(0) 编辑
摘要:参考链接:https://blog.csdn.net/huzhigenlaohu/article/details/51595676 阅读全文
posted @ 2018-04-22 20:05 Rainyn 阅读(149) 评论(0) 推荐(0) 编辑
摘要:简要说明的话,Java对象的创建过程分为下面几步: 1、执行相关检查; 2、为对象分配内存,将分配到的内存空间都初始化为零值; 3、进行构造代码块和构造函数的初始化 下面详细介绍这几个步骤: 1、执行相关检查 虚拟机遇到一条new指令时,将会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用 阅读全文
posted @ 2018-04-16 14:29 Rainyn 阅读(248) 评论(0) 推荐(0) 编辑
摘要:很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低:在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收70%~95%的空间,而永久代的垃圾收集效率远低于此 阅读全文
posted @ 2018-04-10 14:27 Rainyn 阅读(266) 评论(0) 推荐(0) 编辑
摘要:Java中的强引用,软引用,弱引用,虚引用有什么用? - 菜鸟窝的回答 - 知乎 https://www.zhihu.com/question/37401125/answer/226100181 Java中的强引用,软引用,弱引用,虚引用等四种引用的存在主要是为了更好的进行内存管理而设置的一套机制, 阅读全文
posted @ 2018-04-10 14:25 Rainyn 阅读(745) 评论(0) 推荐(0) 编辑
摘要:Java中几乎所有的对象实例都存放在堆中,在垃圾收集器对堆内存进行回收前,第一件事情就是要确定哪些对象还“存活”,哪些对象已经“死去”(即不可能再通过任何途径被使用)。 引用计数算法 首先需要声明,至少主流的Java虚拟机里面都没有选用引用计数算法来管理内存。 什么是引用计数算法:给对象中添加一个引 阅读全文
posted @ 2018-04-09 14:02 Rainyn 阅读(424) 评论(0) 推荐(0) 编辑
摘要:概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。 jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此, 阅读全文
posted @ 2018-04-09 13:58 Rainyn 阅读(147) 评论(0) 推荐(0) 编辑
摘要:1.简单介绍 类的生命周期如下图 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意 阅读全文
posted @ 2018-04-08 17:13 Rainyn 阅读(372) 评论(0) 推荐(0) 编辑
摘要:1. 什么是 Java 类加载机制 Java 虚拟机一般使用 Java 类的流程为:首先将开发者编写的 Java 源代码(.java 文件)编译成 Java 字节码(.class 文件),然后类加载器会读取这个 .class 文件,并转换成 java.lang.Class 的实例。有了该 Class 阅读全文
posted @ 2018-04-08 14:58 Rainyn 阅读(166) 评论(0) 推荐(0) 编辑
摘要:作者:贺拔达奚链接:https://www.zhihu.com/question/59725713/answer/168709945来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ###多线程和虚拟机。实际工作中,大部分程序员可能几乎不用,但这两项技能是你面试所谓高级 阅读全文
posted @ 2018-02-27 15:17 Rainyn 阅读(318) 评论(0) 推荐(0) 编辑
摘要:1.i++和++i的问题 反编译结果为 Code: 0: iconst_1 1: istore_1 2: iinc 1, 1 //这个个指令,把局部变量1,也就是i,增加1,这个指令不会导致栈的变化,i此时变成2了 5: iconst_1 6: istore_2 7: iinc 2, 1//这个个指 阅读全文
posted @ 2018-02-24 16:18 Rainyn 阅读(1976) 评论(0) 推荐(1) 编辑
摘要:转载自:http://glutinit.iteye.com/blog/1263446 延伸参考 JVM接收参数和方法调用 void spin() { int i; for (i = 0; i < 100; i++) { ; // Loop body is empty } } 编译后的代码如下 (与《 阅读全文
posted @ 2018-02-24 15:31 Rainyn 阅读(357) 评论(0) 推荐(0) 编辑
摘要:指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 0x04 iconst_1 将int型1推送至栈顶 0x05 iconst_2 将int型2推送至栈顶 ... 阅读全文
posted @ 2018-02-24 13:55 Rainyn 阅读(239) 评论(0) 推荐(0) 编辑
摘要:https://www.cnblogs.com/beautiful-code/p/6424977.html 阅读全文
posted @ 2018-02-24 13:11 Rainyn 阅读(873) 评论(0) 推荐(0) 编辑
摘要:转载:细说虚拟机栈 参考 栈帧、局部变量表、操作数栈 引文 虚拟机栈是线程私有的,每创建一个线程,虚拟机就会为这个线程创建一个虚拟机栈,虚拟机栈表示Java方法执行的内存模型,每调用一个方法就会为每个方法生成一个栈帧(Stack Frame),用来存储局部变量表、操作数栈、动态链接、方法出口等信息。 阅读全文
posted @ 2018-02-23 17:16 Rainyn 阅读(321) 评论(0) 推荐(0) 编辑
摘要:一、先来看看概念 多线程的Java应用程序:为了让每个线程正常工作就提出了程序计数器(Programe Counter Register),每个线程都有自己的程序计数器这样当线程执行切换的时候就可以在上次执行的基础上继续执行,仅仅从一条线程线性执行的角度而言,代码是一条一条的往下执行的,这个时候就是 阅读全文
posted @ 2018-02-20 18:29 Rainyn 阅读(2747) 评论(0) 推荐(2) 编辑
摘要:1.基础 JDK 将java文件编译成class文件 JRE 包含JVM JVM可以进行内存管理 利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字 阅读全文
posted @ 2018-02-19 19:19 Rainyn 阅读(178) 评论(0) 推荐(0) 编辑

1