JVM调优【一】

48 篇文章 0 订阅
30 篇文章 0 订阅

Java的发展

  • Java之父:詹姆斯·高斯林
  • 最早语言为Oak,用于嵌入式系统,没有成功;
  • 1995年互联网发展,改名为Java,开始火爆,提出Write once run any where的原则;
  • 1996年1月 发布JDK1.0,jvm为Sun Classic VM;
  • 1996年5月 首届JavaOne大会;
  • 1997年2月 JDK1.1(内部类、反射、jdbc、javabean、rmi);
  • 1998年 JDK1.2 发布J2Se J2EE J2ME swing jit Hotspot VM;
  • 2000年5月 JDK1.3 Timer Java2d;
  • 2002年2月 JDK1.4 Struts Hibernate Spring 正则表达式 NIO 日志 Xml解析器;
  • 2004年9月 JDK1.5(tiger) 自动装箱拆箱 泛型 注解 枚举 增强for 可变参数 Spring2.X;
  • 2006年 JDK6 JavaSe JavaEE JavaME 提供脚本语言支持 支持http服务器api;
  • 2009年 Java7 Jigsaw模块化 Orical74亿收购Sun;
  • 2014年 Java8 Lambda表达式 函数式接口 方法引用 默认方法 Stream;
  • 2017年 Java9 模块化

Java技术体系

  • Java程序设计语言
  • 各硬件平台上的Java虚拟机
  • Class文件格式,可以自己设计语言,自己编写编译器,生成相同的class文件即可
  • Java API
  • 第三方的Java类库

Sun Classic VM

  • 已经淘汰,是世界上第一款商用虚拟机,只能使用纯解释器(没有JITJust in time编译器)的方法来执行Java代码。

Exact VM

  • Exact Memory Management 准确式内存管理; 编译器和解释器混合工作以及两级即时编译器。

HotSpot VM

  • 热点代码技术,使用最多的虚拟机产品,并非由Sun公司开发。官方JDK均采用HotSpot VM。

KVM

  • kilobyte 简单、轻量、高度可移植,在手机平台运行,运行速度慢。

JRockit

  • BEA公司开发,是世界上最快的Java虚拟机,专注于服务端应用,全部靠编译器执行。

J9

  • IBM开发 原名:IBM Techn0ology for Java Virtual Machine IT4j

Davik

  • 不是java虚拟机,寄存器架构而不是栈结构,执行dex(dalvik Executable)文件。

Microsoft JVM

  • 只能运行在windows下面。

Azul VM Liquid VM

  • 高性能的java虚拟机,在HotSpot基础上改进,专用的虚拟机。

Taobao VM

  • 淘宝公司开发

程序计数器

  • 程序计数器(处于线程独)占区是一个非常小的内存空间,它可以看成是当前线程所执行的字节码的行号指示器。此区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。如果线程执行的是java方法,这个计数器记录的是正在执行的虚拟字节码指令的地址。如果正在执行的是native方法,那么这个计数器的值为undefined。
    注:java中没有goto,为保留字

虚拟机栈

  • 虚拟机栈描述的是Java方法执行的动态内存模型。
    栈帧: 每个方法执行都要创建一个栈帧,方法执行完毕,栈帧销毁。用于存储局部变量表,操作数栈,动态链接,方法出口等。
    局部变量表:存放编译期可知的各种基本数据类型,引用类型,局部变量表的大小在编译期便已经可以确定,在运行时期不会发生改变。
    栈的大小:如果栈满了,StackOverFlowError,递归调用很常见。
public class Hello {
    public static void main(String[] args) {
        test();
    }
    
    public static void test() {
        System.out.println("start......");
        test();
    }/*给大家推荐一个免费的学习交流君样:826021115  */
}

// 报错Exception in thread "main" java.lang.StackOverflowError

本地方法栈

  • 本地方法栈为虚拟机执行native方法服务

Java堆

  • java虚拟机最大的内存区域,存放对象实例,也是垃圾收集器管理的主要区域,分为新生代(由Eden 与Survivor Space
    组成)和老生代,可能会抛出OutOfMemoryError异常。
    在这里插入图片描述
    方法区
  • 存储虚拟机加载的类信息(类的版本、字段、方法、接口),常量,静态常量,即时编译后的代码等数据,也可能会抛出OutOfMemoryError异常。
    方法区与永久代实际并不等价,对于HotSpot中才有永久代的概念。

最新2021整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,SpringBoot、Spring Cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君羊:826021115

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值