
JVM
文章平均质量分 93
Mrkang1314
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入理解JVM——字节码
字节码意义字节码存在的意义就是解决Java跨平台问题,一次编写,到处执行。在不同的操作系统、不同硬件平台上,均可以不同修改代码即可顺畅地执行。作为Java与操作系统的中间码,成功解耦了语言对平台的依赖性。什么是字节码Java所有的指令有200个左右,一个字节(8位)可以存储256中不同的指令信息,一个这样的字节称为字节码。在执行过程中,JVM将字节码解释执行,屏蔽对底层操作系统的依赖,JVM也可以将字节码编译执行,如果是热点代码。会通过JIT动态地编译为机器码,提高执行效率。字节码主要指令1、加原创 2020-08-12 15:49:39 · 528 阅读 · 0 评论 -
对Java中volatile修饰符的理解
由于CPU的执行速度要高于内存读取数据的速度,所以将需要运算的数据复制一份到CPU的高速缓存中,也就是给当前运行线程的运行内存中放入副本。运算结束后再将高速缓冲中的数据刷新到主存中。引出问题在并发环境下,数据运算之后刷新到主存的时间是不确定的,所以会导致其他线程运行时候可能操作的还是旧值。处理器为了保证程序运行的效率,处理指令的顺序可能不会按代码的先后顺序执行,但是它还是会依靠计算结果的依...原创 2018-12-03 09:47:33 · 339 阅读 · 0 评论 -
JVM G1(Garbage First)垃圾收集器
G1收集器概述:即可以收集新生代,也可以收集老年代;G1最大的特点是引入分区的思路,弱化了分代的概念。之前的几个垃圾收集器组合都有几个共同的特点:年轻代、老年代是独立且连续的内存块;年轻代收集使用单eden、双survivor进行复制算法;老年代收集必须扫描整个老年代区域;都是以尽可能少而快地执行GC为设计原则。G1的不同G1的设计原则是首先收集尽可能多的垃圾,因此G1并...原创 2019-08-14 09:13:51 · 1678 阅读 · 1 评论 -
360面经总结
一面:java的八种数据类型;重写和重载的区别;jvm内存模型;本地方法栈和虚拟机栈的区别;接口和抽象类的区别;spring的IOC和AOP说一下;NIO;类加载的过程;说一个你熟悉的设计模式;mysql的索引;redis中的五种数据结构;Java中的四种线程池;数据库事务的四种特性;面向对象的三个特征,你是怎么理解多态的;二面:说一下对面向对象的理解;JD...原创 2019-04-22 15:34:59 · 317 阅读 · 0 评论 -
深入理解Java虚拟机(八)自旋锁、偏向锁、轻量级锁和Synchronized锁实现原理
线程安全定义当多线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为逗了已获得正确的结果,那这个对象就是线程安全的。线程安全排序不可变不可变的对象一定是线程安全的,无论是对象的方法实现耗时方法的调用者,都不需要再进行任何的线程安全保障措施。就像Java中的String类。绝对线程安全不管...原创 2019-03-23 21:44:27 · 537 阅读 · 0 评论 -
深入理解Java虚拟机(七)Java内存模型与线程
前言在多处理系统中,每个处理器都有自己的高速缓存,而他们又共享统一主存。为了使处理器内部的运算单元能够尽量被充分利用,处理器可能会对输入的代码进行乱序优化,称为指令重排顺序优化Java内存模型JMM主要目标:定义程序中各个变量的访问规则,主存与工作内存主存所有变量(共享的)都存储在主内存,这里的变量是指实例字段、静态字段和构成数组对象的元素,不同于Java编程时所说的变量(线程私有的...原创 2019-03-22 19:09:42 · 310 阅读 · 0 评论 -
从硬件内存架构理解Volatile(内存屏障)
概述在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序,为了实现某些功能有时会禁止某些重排序,由此引入了内存屏障。重排序as-if-serial语义不管怎么重排序,程序的执行结果不能被改变,编译器、runtime和处理器都必须遵守as-if-serial语义。编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变执行结果,但是,如果操作之间不存在数据依赖关系,...原创 2019-03-25 19:57:14 · 1423 阅读 · 0 评论 -
Java面试题总结——JVM问题、网络基础
1. JVM运行时内存区域划分JVM内存管理2. 内存溢出OOM和堆栈溢出SOE的示例及原因、如何排查与解决OOM 和SOE原创 2019-03-13 11:11:39 · 358 阅读 · 0 评论 -
深入理解Java虚拟机(六) 类加载机制
概述:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可已被虚拟机直接使用的Java类型,这就是类加载机制。阶段:加载、验证、准备、解析、初始化、使用、卸载。类加载的时机加载可以交给虚拟机的具体实现来自有把握;初始化的情况遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,使用new实例化对象的时...原创 2019-03-21 10:45:42 · 272 阅读 · 0 评论 -
深入理解Java虚拟机(四)垃圾收集器和内存分配策略
如何判断对象已死?引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1,;当引用失效时,计数器值减1,任何时刻计数器都为0的对象就是不可能再被使用的;缺点:很难解决对象之间的相互循环引用的问题;如:objA.instance=objB;objB.instance=objA;两个对象互相引用者对方,导致他们的计数都不为0,于是引用计数算法无法通知GC收集器回收...原创 2019-03-12 18:31:34 · 366 阅读 · 1 评论 -
深入了解Java虚拟机(五) 虚拟机工具
JpsJVM Process Status Tool功能:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类的名称,以及这些进程的本地虚拟机的唯一ID(lvmId local virtual machine id)。jps命令格式:jsp [options] [hostid]-q:只输出lvmid,省略主类名;-m:输出虚拟机进程启动时传递给主类的参数-l:输出主类的全名,如果进程执...原创 2019-03-20 20:31:52 · 132 阅读 · 0 评论 -
深入理解Java虚拟机(三) Java虚拟机内存管理
简介java虚拟机在执行java程序过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途;程序计数器作用:程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令、分支、循环、跳转、异常处理、线程恢复等基础功能;特点:线程私有:在多线程中,为了线程切换后能恢复到正...原创 2019-03-11 15:28:49 · 449 阅读 · 0 评论 -
深入理解Java虚拟机(二) Java虚拟机发展
Java虚拟机产品Sun Classic VM第一款商用的java虚拟机;只能使用纯解释器的方式来执行java代码;Exact VMExact Memory Management准确式内存管理,可以准确的直到内存中的数据是什么类型的;编译器和解释器混合工作以及两级即时编译器;只在Solaris平台发布;使用时间短;HotSpot VMKVMKilobyte 简单、轻...原创 2019-02-05 20:48:21 · 150 阅读 · 0 评论 -
深入理解Java虚拟机(一) 基础
JDK、JRE和JVMJDK包含JRE、JRE包含JVMjava8JDK(Java Development Kit):Java开发工具集;JRE( Java Runtime Environment ):Java运行时环境;JVM( Java Virture Machine):Java虚拟机...原创 2019-02-03 15:54:25 · 213 阅读 · 0 评论