IDEA翻译插件translate
摘要:1、打开File->Setting 2、plugins->Browse repositories 3、输入“translate”,选择排序“Downloads” 4、在排行榜上部的“Translation”,点击“install”,等安装之后选择重启IDEA即可 5、使用,上部的翻译按钮为使用翻译功
阅读全文
工具-使用org.openjdk.jol查看对象在内存中的布局
摘要:1 添加依赖 <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency> 2 查看对象的内存布局 public class
阅读全文
ThreadLocal
摘要:1 简介 ThreadLocal提供了线程内存储变量的能力。 2 ThreadLocal的应用场景 如下图,方法1调用方法2,方法2调用方法3,方法3调用方法4 如果我们想要在方法4中使用方法1中的一个变量sa,可以怎么做? 1)通过参数传递 在某些情况下可以,但是如果中间某个方法(如method2
阅读全文
JAVA虚拟机24---线程安全
摘要:1 什么叫线程安全 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。 这个定义是严格的,在许多场景中,我们都会将这个定义弱化一些。如果把“
阅读全文
JAVA虚拟机23---JAVA与线程
摘要:1 线程简介 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度 目前线程是Java里面进行处理器资源调度的最基本单位,不过如果日后Loom项目能成功为Java引入纤程(Fiber)的话,可能就
阅读全文
JAVA虚拟机22-原子性、可见性与有序性、先行发生原则
摘要:1 简介 Java内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的,我们逐个来看一下哪些操作实现了这三个特性 2 原子性 2.1 操作指令 由Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个,我们大致可以
阅读全文
JAVA虚拟机21---JAVA内存模型
摘要:1.Amdahl定律和摩尔定律 并发处理的广泛应用是Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有力武器。 Amdahl定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力,摩尔定律则用于描述处理器晶体管数量与运行效率之间的发展关
阅读全文
JAVA虚拟机20-基于栈的解释器执行过程示例
摘要:1.准备代码 public int calc() { int a = 100; int b = 200; int c = 300; return (a + b) * c; } 2.使用javap -verbose查看class文件 该方法主要的指令内容如下 public int calc(); Co
阅读全文
JAVA虚拟机18---方法调用
摘要:1.简介 方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还未涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作之一 Class文件的编译过程中不包含传统程序语言编译的连接步骤,一切方法调用在Class文件里面存
阅读全文
JAVA虚拟机17---栈帧(局部变量表-操作数栈-动态连接-返回地址)
摘要:借鉴:转https://blog.csdn.net/u011069294/article/details/107106755,他的虚拟机专栏:https://blog.csdn.net/u011069294/category_10113093.html 1.栈帧 2.运行时栈帧结构 2.1简介 Ja
阅读全文
JAVA虚拟机15---虚拟机的类加载机制
摘要:1.概述 在Class文件中描述的各类信息,最终都需要加载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些Class文件,Class文件中的信息进入到虚拟机后会发生什么变化,这就涉及到虚拟机的类加载机制。 2.类加载机制 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、
阅读全文
JAVA虚拟机16-方法的动态调用
摘要:更详细:https://www.cnblogs.com/jthr/p/15762527.html 1.子类重写父类方法 1.1父类 public class Father { public int num = 20; public int get() { System.out.println("fa
阅读全文
JAVA虚拟机14 类加载器
摘要:1.简介 Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader) 2.类相等 类加载器虽然只用于实现类的加载动作,但
阅读全文
JAVA虚拟机13-字节码指令简介
摘要:1.简介 Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需的参数(称为操作数,Operand)构成。JVM指令=1字节操作码+0到多个操作数数。 2.特点 由于限制了Java虚拟机操作码的长度为一个字节(即0~255)
阅读全文
JAVA虚拟机12--Class文件结构-属性表
摘要:1 属性表 1.1 简介 属性表(attribute_info)在前面的讲解之中已经出现过数次,Class文件、字段表、方法表都可以携带自己的属性表集合,以描述某些场景专有的信息。 《Java虚拟机规范》允许只要不与已有属性名重复,任何人实现的编译器都可以向属性表中写入自己定义的属性信息,Java虚
阅读全文
JAVA虚拟机11-Class文件结构
摘要:1.平台无关性和语言无关性 Oracle公司以及其他虚拟机发行商发布过许多可以运行在各种不同硬件平台和操作系统上的Java虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的“一次编写,到处运行”。各种不同平台的Java虚拟机,以及所有平台都统一支持的程序存储格式——字节码(B
阅读全文
JAVA虚拟机25---编译器,解释器,JAVA中的即时编译
摘要:https://www.cnblogs.com/somefuture/p/14272221.html 1.简介 编译器:是一种计算机程序,负责把一种编程语言编写的源码转换成另外一种计算机代码,后者往往是以二进制的形式被称为目标代码(object code)。这个转换的过程通常的目的是生成可执行的程序
阅读全文
JAVA虚拟机10---内存分配策略
摘要:1.简介 对象的内存分配,从概念上讲,应该都是在堆上分配(而实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配)。在经典分代的设计下,新生对象通常会分配在新生代中,少数情况下(例如对象大小超过一定阈值)也可能会直接分配在老年代。对象分配的规则并不是固定的,《Java虚拟机规范》并未规定新
阅读全文
JAVA虚拟机09---垃圾回收---经典垃圾回收器
摘要:1.Serial收集器 1.1简介 Serial收集器是最基础、历史最悠久的收集器,曾经(在JDK 1.3.1之前)是HotSpot虚拟机新生代收集器的唯一选择 1.2使用算法 标记-复制算法 1.3线程工作情况 这个收集器是一个单线程工作的收集器,但它的“单线程”的意义并不仅仅是说明它使用一个处理
阅读全文
JAVA虚拟机08--垃圾回收--HotSpot的算法实现细节
摘要:1 stop the world 2 减少stop the world的时间-OopMap 3 OopMap数据结构的维护-安全点-安全区域 3.1安全点 3.2在垃圾回收时如何让所有线程到达最近的安全点(不包括执行JNI调用的线程) 3.3 安全区域 4 记忆集和卡表的细节 4.1简要说明 4.2
阅读全文