JVM问题1类加载器
什么是类的加载?类的加载是指将类的字节码文件数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区内中的Class对象,Class对象封装了类在方法区内的数据结构,并且向java程序员提供了访问方法区内的数据结构的接口。
类加载器包括:
启动类加载器(BootStrap)——主要有C++进行实现的。用来加载jdk安装目录下的:jre/lib下的可执行jar包。也可以通过设置 -XbootClasspath来动态指定jar包位置。在java代码中无法获取到该对象。
12345String str = new String("HelloWorld");System.out.println(str.getClass().getClassLoader());//控制台打印null
扩展类加载器(ExtClassLoader)
——是java代码实现的,用来加载java安装目录下 jre/lib/ext 目录中的可执行ja ...
java
未读JVM面试题
原文:https://github.com/Homiss/Java-interview-questions/blob/master/JVM/JVM%E9%9D%A2%E8%AF%95%E9%A2%98.md
第一弹什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
不是java语言跨平台,而是Java虚拟机跨平台
Java内存结构?
方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域。
Java堆(Heap),是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
方法区(Method Area) ...


