随笔分类 -  Java虚拟机

摘要:什么是Java内存模型: Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此 阅读全文
posted @ 2017-11-22 11:21 __Meng 阅读(237) 评论(1) 推荐(0) 编辑
摘要:概述: 部分商用虚拟机中,Java程序最初是通过解释器对.class文件进行解释执行的,当虚拟机发现某个方法或代码块运行地特别频繁的时候,就会把这些代码认定为热点代码Hot Spot Code(这也是我们使用的虚拟机HotSpot名称的由来)。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代 阅读全文
posted @ 2017-11-20 19:46 __Meng 阅读(286) 评论(0) 推荐(0) 编辑
摘要:前言 定位系统问题的时候,知识、经验是基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。经常使用适当的虚拟机监控和分析的工具可以加快分析数据、定位解决问题的速度。 常用命令: 这里主要介绍如下几个工具: 1、jps:查看本机jav 阅读全文
posted @ 2017-11-20 15:26 __Meng 阅读(471) 评论(0) 推荐(0) 编辑
摘要:静态类型,即是变量声明时的类型 实际类型,变量实例化时采用的类型 静态分派 输出: hello,guy! hello,guy! Human man=new Man(); 我们把“Human”称为变量的静态类型,后面的“Man”称为变量的实际类型 编译器在编译期并不知道一个对象的实际类型是什么 编译器 阅读全文
posted @ 2017-11-19 17:17 __Meng 阅读(2250) 评论(0) 推荐(0) 编辑
摘要:对象创建方法: JVM遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、连接和初始化过。 如果没有,那必须先执行相应的类的加载过程。 对象的内存分配: 对象所需内存的大小在类加载完成后便完全确定(对象内存布局),为对象分配空 阅读全文
posted @ 2017-11-19 14:09 __Meng 阅读(2831) 评论(0) 推荐(0) 编辑
摘要:一个功能健全的Web服务器,要解决如下几个问题: 部署在同一个服务器上的两个Web应用程序使用的Java 类库可以实现相互隔离。不能要求一个类库在一个服务器中只有一份,服务器应当保证两个应用程序的类库可以互相独立使用。 部署在同一个服务器上的两个Web应用程序所使用的Java类库可以互相共享,如果J 阅读全文
posted @ 2017-11-16 17:46 __Meng 阅读(1842) 评论(0) 推荐(0) 编辑
摘要:Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。 这些 SPI 的接口由 Java 核心库来提供,而这些 SPI 的实现代码则是作为 Java 阅读全文
posted @ 2017-11-16 16:53 __Meng 阅读(3132) 评论(1) 推荐(0) 编辑
摘要:Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。 类装载方式,有两种 : 1.隐式装载 阅读全文
posted @ 2017-11-16 16:51 __Meng 阅读(8923) 评论(0) 推荐(0) 编辑
摘要:概括: (串行)Serial收集器:用于新生代,采用复制算法,单线程收集器,它在垃圾收集时,必须暂停其他所有的工作线程。 是虚拟机运行在Client模式下的默认新生代收集器。优点:简单高效。 (并行)ParNew收集器:用于新生代,采用复制算法,Serial的多线程版本,是在Server模式下的虚拟 阅读全文
posted @ 2017-11-13 11:29 __Meng 阅读(523) 评论(0) 推荐(0) 编辑
摘要:在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引 阅读全文
posted @ 2017-11-11 21:44 __Meng 阅读(902) 评论(0) 推荐(0) 编辑
摘要:垃圾回收的意义: Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄漏,有 阅读全文
posted @ 2017-11-11 20:41 __Meng 阅读(242) 评论(0) 推荐(0) 编辑
摘要:撤销永久代,引入元空间: 在 JDK 1.8 中,HotSpot 已经没有 “PermGen space”这个空间了,取而代之是一个叫做 Metaspace(元空间) 的东西。 Java7中已经将字符串常量池从永久代移除,在Java 堆(Heap)中开辟了一块区域存放字符串常量池。而在Java8中, 阅读全文
posted @ 2017-11-11 18:28 __Meng 阅读(3297) 评论(0) 推荐(0) 编辑
摘要:运行时数据区域: 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 程序计数器(线程私有): 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有”的内存。 正在执行java方法的话,计数器记录的是虚拟机字节码 阅读全文
posted @ 2017-11-11 16:36 __Meng 阅读(7871) 评论(0) 推荐(0) 编辑
摘要:JVM内存区域的划分(内存结构或者内存模型) Java 8中撤销永久代,引入元空间 JVM的分代思想 对象创建方法,对象的内存分配,对象的访问定位 Java中的四种引用 垃圾回收算法 垃圾收集器 JVM调优工具 描述一下JVM加载class文件的原理机制 线程上下文类加载器 Tomcat的类加载机制 阅读全文
posted @ 2017-11-11 14:55 __Meng 阅读(361) 评论(0) 推荐(0) 编辑
摘要:Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代、老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略。 永久代是HotSpot虚拟机特有的概念,它采用永久代的方式来实现方法区,其他的虚拟机实现没有这一概念,而且HotSpot也有取消永久代的趋势,在JDK 阅读全文
posted @ 2017-11-11 12:25 __Meng 阅读(685) 评论(0) 推荐(0) 编辑
摘要:《深入理解Java虚拟机》学习笔记 一、走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程序开发的最小环境。 JRE(Java Runtime Environment):包含Java SE API 子集 阅读全文
posted @ 2017-10-22 21:13 __Meng 阅读(481) 评论(0) 推荐(0) 编辑