10 2021 档案

double转String结果为指数问题
摘要:Double类型转String类型 说明:double类型转String类型结果显示为指数,如: @Test public void doubleTest() { double d = 49000000L; Double aDouble = Double.valueOf(d); // 输出为:4.9
0
0
0
5.9堆是分配对象的唯一选择吗
摘要:5.9堆是分配对象的唯一选择吗 在《深入理解Java虚拟机》中关于Java堆内存有这样的一段描述: 随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也逐渐变得不那么"绝对"了。 在Java虚拟机中,对象是在Java堆中分配内存的,
45
0
0
5.8堆空间的参数设置
摘要:5.8堆空间的参数设置 官网说明:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html -XX:+PrintFlagsInitial 查看所有的参数的默认初始值 -XX:+PrintFlagsFinal 查看所有的参
55
0
0
TLAB线程私有缓存区
摘要:TLAB线程私有缓存区 为什么有TLAB(Thread Local Allocation Buffer)? 堆区是线程共享区域,任何线程都可以访问到堆区中的共享数据。 由于对象实例的创建在JVM中非常频繁,因此在并发环境下从堆区中划分内存空间是线程不安全的。 为避免多个线程操作同一地址,需要使用加锁
55
0
0
5.5MinorGC、MajorGC、FullGC
摘要:5.5MinorGC、MajorGC、FullGC JVM在进行GC时,并非每次都对上面三个内存区域一起回收,大部分时候回收都是指新生代。 针对HotSpot VM的实现,它里面的GC按照回收区又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)。 部分收集:不
95
0
0
5.6堆空间分代思想&5.7内存分配策略
摘要:5.6堆空间分代思想 为什么需要把Java堆分代?不分代就不能正常工作吗? 不同对象的生命周期不同。70% - 99%的对象是临时对象。 新生代:有Eden、两块大小相同的Survivor(又称from/to,s0/s1)构成,to总为空。 老年代:存放新生代中经历多次GC仍然存活的对象。 5.7内
28
0
0
5.4图解对象分配过程
摘要:5.4图解对象分配过程 对象分配过程概述: 1.new的对象放在伊甸园区,此区大小有限制。 2.当伊甸园区的空间填满时,程序有需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。再加载新的对象放在伊甸园区。 3.然后将伊甸园
157
0
0
5.3年轻代与老年代
摘要:5.3年轻代与老年代 存储在JVM中的Java对象可以被划分为两类: 一类是生命周期较短的瞬时对象,这类对象的创建和消亡都非常迅速 另一类对象的生命周期却非常长,在某些极端的情况下还能够与JVM的生命周期保持一致。 Java堆区进一步细分的话,可以划分为年轻代(YoungGen)和老年代(OldGe
190
0
0
5.1堆的核心概述&设置堆内存大小与OOM
摘要:5.堆 5.1堆的核心概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的。 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该
105
0
0
4.9本地方法接口
摘要:4.9本地方法接口 一个Native Method就是一个java调用非java代码的接口,一个Native Method是这样一个java方法:该方法的实现由非java语言实现,比如C。这个特征并非java所持有,很多其他的编程语言都有这一机制,比如在c中,你可以用extern "C"告知c编译其
40
0
0
4.10本地方法栈
摘要:4.10本地方法栈 Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOve
38
0
0
4.7方法返回地址与一些附加信息
摘要:4.7方法返回地址 存放调用该方法的pc寄存器的值。 一个方法的结束有两种方式: 正常执行完成 出现未处理的异常,非正常退出。 无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。**方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址。**而通过异常退
116
0
0
4.6方法的调用
摘要:4.6方法的调用 静态链接与动态链接 在JVM中,将符号引用转换为调用方法的直接引用与方法的绑定机制相关。 静态链接: 当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可知,且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接。 动态链接: 如果被调
66
0
0
4.5动态链接
摘要:4.5动态链接 每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。比如:invokedynamic指令。 在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(Symb
53
0
0
4.4操作数栈
摘要:4.4操作数栈 每一个独立的栈帧中除了包含局部变量表之外,还包含一个后进先出(Last-In-First-Out)的操作数栈,也可以称之为表达式栈(Expression Stack)。 操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)/出栈(pop)。 某些字
173
0
0
4.3局部变量表
摘要:4.3局部变量表 局部变量表也称为局部变量数组或本地变量表 定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddress类型。 由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安
344
0
0
4.2虚拟机栈
摘要:4.2虚拟机栈 4.2.1概述 概念: java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。是线程私有的。 生命周期: 生命周期和线程一致
53
0
0
4.1程序计数器(PC寄存器)
摘要:4.运行时数据区 4.1程序计数器(PC寄存器) 作用:PC寄存器用来存储指向下一条指令的地址,即将要执行的指令代码。由执行引擎读取下一条指令。 它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命
645
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起