随笔分类 - JVM虚拟机
摘要:JVM的架构模型 Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现;缺点是性能下降,实现同样的功能需要
阅读全文
摘要:System.gc() 通过System.gc() 或者 Runtime.getRuntime().gc() 的调用,会显示地触发FGCSystem.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保垃圾收集器的执行时间)System.runFinalization(); //强制调
阅读全文
摘要:String声明为final,不可被继承String实现了Serializable接口:表示字符串支持序列化String实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义private final char[] value 用于存储字符串数据,jdk9改
阅读全文
摘要:执行引擎的任务是将字节码指令解释/编译为对应平台上的本地机器指令。执行引擎执行完一项指令操作后,PC寄存器会更新下一条需要被执行的指令地址方法执行过程中,执行引擎可能会通过存储在局部变量表中的对象引用定位到堆中的对象实例信息,以及通过对象头的元数据指针定位到目标对象的类型信息 解释器(Interpr
阅读全文
摘要:创建对象的方式 new:最常见的方式 变形1:单例模式,静态方法getInstance() 变形2:工厂模式,静态方法xxxBuilder/xxxFactory Class的newInstance():反射的方式,只能调用空参构造器,权限必须是public(jdk9中过期,比较局限) Constru
阅读全文
摘要:方法区 方法区的别名叫做Non-Heap(非堆),目的就是要和堆分开。方法区是线程共享的内存区域方法区在JVM启动的时候被创建,并且它的实际物理内存空间和Java堆区一样都可以是不连续的方法区的大小可以是固定的或可扩展的方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,
阅读全文
摘要:堆 一个JVM实例只存在一个堆内存Java堆区在JVM启动的时候即被创建,其空间大小也确定下来了。是JVM管理的最大一块内存空间(堆内存的大小是可以调节的)堆可以处于物理上不连续的内存空间,但在逻辑上应该被视为连续的所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local
阅读全文
摘要:本地方法 一个Native Method就是一个Java调用非Java代码的接口。 Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java特有,很多其他的编程语言都有这一机制,比如在C++中可以用 extern "C" 告知C++编译器去调用
阅读全文
摘要:每个JVM只有一个Runtime实例 在Hotspot中,每个线程都于操作系统的本地线程直接映射(Java层面的线程,真正运行的时候调用的都是操作系统的本地线程) 当一个Java线程准备好执行后,操作系统的本地线程也同时创建,Java线程执行终止后,本地线程也会回收 线程安全 如果只有一个线程可以操
阅读全文
摘要:程序寄存器(Program Counter Register) JVM中的 PC寄存器是对物理PC寄存器的一种抽象模拟JVM规范中,每个线程都有自己的程序计数器,它是线程私有的,生命周期与线程的生命周期保持一致任何时间一个线程只有一个方法在执行,也就是当前方法。程序计数器会存储当前线程正在执行的Ja
阅读全文
摘要:什么是调优? 根据需求进行JVM规划和预调优 优化JVM运行环境(慢、卡顿) 解决JVM运行过程中出现的各种问题(OOM,Out Of Memory) 了解JVM常用命令行参数 HotSpot参数分类标准:- 开头,所有的HotSpot都支持非标准:-X 开头,特定版本HotSpot支持特定命令不稳
阅读全文