![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM虚拟机
搬砖升级打怪
这个作者很懒,什么都没留下…
展开
-
垃圾收集器与内存分配策略
垃圾收集器与内存分配策略线程私有的程序计数器、虚拟机栈和本地方法栈的内存大小在编译期间可知,生命周期是随着线程或者方法的开始而开始,结束而结束。而线程共享的堆和方法区不一样,只有在程序执行期间才知道需要创建多少个对象以及一个方法不同分支的内存分配。问题:哪些内存需要回收什么时候回收怎么回收java引用:JDK1.2之后,java对引用的概念进行了扩充,分为强引用、软引用、弱引用和虚引用四种,引用强度逐渐减弱。强引用:程序代码中普遍存在的,比如Object a = new Ob原创 2020-08-06 21:55:34 · 76 阅读 · 0 评论 -
java和C++的编译器对比
java和C++的编译器对比也是java的即时编译器和C++的静态编译器之间的对比。1、即时编译器的运行占用的是用户程序的运行时间,具有很大的时间压力2、java的动态类型安全语言需要虚拟机确保程序不会违反语言语义或访问非结构化内存。也就是需要编译器不断进行类型检查,消耗时间。3、运行时多态性的特点使得编译器的优化难度大于C++的静态优化编译器。4、动态可扩展的语言特性使得程序可以在运行时加载新的类,从而可能会改变继承关系,影响全局优化,比如方法内联。5、java的对象在堆上分配,垃圾回收机制需原创 2020-08-06 00:50:37 · 263 阅读 · 0 评论 -
JVM之代码优化
JVM之代码优化java的编译分为 1. 前端编译器:将.java文件编译成字节码文件, javac 2. 运行时编译JIT:将字节码文件转换成机器指令文件。Hotspot VM的C1、C2编译器 3. 静态提前编译AOT:直接将.java文件转换成机器指令文件。早期编译优化 javac编译器是使用java语言实现的编译器。 因为虚拟机规范了class文件的格式,但并没有严格规定如何从.java文件编译成class文件,因此class文件的编译某种程度上与JDK相关联。 编译过程分为:原创 2020-08-06 00:40:21 · 203 阅读 · 0 评论 -
Java之解语法糖
java的语法糖语法糖不会改变程序的实质性功能,但能提高效率,减少代码出错的机会。泛型与类型擦除泛型:JDK1.5引入的,本质是参数化类型的应用,即所操作的数据类型被指定为一个参数。这种参数被用在类、接口、方法上,又分别称为:泛型类、泛型接口、泛型参数。与c#的泛型不同的是,前者的泛型在程序源码,编译后的中间语言,或者运行期间的CLR中都是存在的,是真泛型;而java的泛型在编译期的语法分析阶段会被擦除为原生类型,并且在相应的地方添加了强制性类型转换,伪泛型。类型擦除只是在字节码的Code属原创 2020-08-05 23:15:12 · 221 阅读 · 0 评论 -
JVM学习笔记之内存区域
JVM学习笔记之内存区域运行时数据区:java虚拟机在执行java程序的过程中把它所管理的内存划分为若干个不同的数据区域,用于不同的用途,并具有不同的创建和销毁时间。程序计数器:当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变该计数器的值来选取下一条即将执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖该计数器。java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间来实现的。因此每个线程都需要有一个独立的程序计数器,互不干扰,即线程私有的内存。如果执行的原创 2020-07-28 19:55:22 · 76 阅读 · 0 评论