面试题-JVM
1:JVM1-1:JVM1.8 新特性在 1.7 之前在 (JDK1.2 ~ JDK6) 的实现中,HotSpot 使用永久代实现方法区,而在 1.8 之后方法区被彻底移除了,而使用元空间取而代之,方法区位于堆内存中,而元空间使用的是本地内存。元空间存储的是类的元数据,常量池还是在堆内存中。
1-2:JDK1.8 默认垃圾回收器使用 java -XX:+PrintCommandLineFlags -version 命令查看
1234-XX:InitialHeapSize=266668608 -XX:MaxHeapSize=4266697728 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGCjava version "1.8.0_201"Java(TM) SE Runtime Environment (build 1.8.0_201-b09 ...
常量池
Class 常量池
原文地址:Java 工程师成神之路
在 Java 中,常量池的概念想必很多人都听说过。这也是面试中比较常考的题目之一。在 Java 有关的面试题中,一般习惯通过 String 的有关问题来考察面试者对于常量池的知识的理解,几道简单的 String 面试题难倒了无数的开发者。所以说,常量池是 Java 体系中一个非常重要的概念。
谈到常量池,在 Java 体系中,共用三种常量池。分别是字符串常量池、Class 常量池和运行时常量池。
本文先来介绍一下到底什么是 Class 常量池。
什么是 Class 文件在Java 代码的编译与反编译那些事儿中我们介绍过 Java 的编译和反编译的概念。我们知道,计算机只认识 0 和 1,所以程序员写的代码都需要经过编译成 0 和 1 构成的二进制格式才能够让计算机运行。
我们在《深入分析 Java 的编译原理》中提到过,为了让 Java 语言具有良好的跨平台能力,Java 独具匠心的提供了一种可以在所有平台上都能使用的一种中间代码——字节码(ByteCode)。
有了字节码,无论是哪种平台(如 Windows、Linux 等), ...
Java内存结构
概述总所周知,Java 代码都是运行在虚拟机上的,而虚拟机在执行 Java 程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。这些区域的统称就是运行时数据区域。也正是因为 Java 的自动内存管理机制,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。这篇文章就是介绍一下 Java 内存结构即运行时数据区域。
Java 内存结构在《Java 虚拟机规范(Java SE 8)》中描述了 JVM 运行时内存区域结构如下:
图片来自JVM 内存结构 VS Java 内存模型 VS Java 对象模型
线程共享
线程私有
Java 堆
PC 寄存器(程序计数器)
方法区
Java 虚拟机栈
本地方法栈
JDK1.8 后,方法区的实现由永久代改为了元空间,这里按下不表,后面再说。
PC 寄存器(程序计数器)程序计数器是一块较小的内存空间,几乎可以忽略不记,也是运行速度最快的存储区域(因为只存放了指向下一条指令的地址)。可以看作是当前线程所执行的字节码的行号指示器。
字节码解释器工 ...