多语言展示
当前在线:1863今日阅读:103今日分享:49

了解java虚拟机

java 虚拟机 (jvm) 是运行程序的平台。
工具/原料
1

IntelliJ IDEA

2

jdk1.8

一、JVM简介
1

java 虚拟机 (jvm) 是运行程序的平台。它是为特定的操作系统和体系结构而构建的, 位于操作系统和您编写的任何编译程序或应用程序之间, 使其成为不可知论。java 程序被编译 (使用 javac) 到字节码。jvm 将此解释为该体系结构和操作系统的具体说明。

2

其他编译的语言 (如 c++ 或 Objective-C) 需要编译才能使用定义的主机体系结构和操作系统运行, 但 java 的情况并非如此。无论在哪个平台编译 java 代码, 它都可以在相同或更高版本的任何 jvm 上运行。

3

考虑到这就是代码运行的位置, 了解 jvm 的工作原理以及如何调整某些参数以获得代码的最佳性能非常重要。

二、如何分配内存
1

new关键字在 java 堆上分配内存。堆是内存的主池, 可供整个应用程序访问。如果没有足够的内存可用于为该对象分配, jvm 将尝试使用垃圾回收从堆中回收一些内存。

2

如果它仍然无法获得足够的内存, 则会引发 outofmemoryerror, 然后退出 jvm。堆被拆分为几个不同的部分, 称为代。随着对象在更多垃圾回收中生存, 它们被提升到不同的代。老年代不是经常被垃圾收集的。因为这些对象已经被证明寿命更长, 所以它们被垃圾回收的可能性较小。

3

当对象首次构造时, 它们被分配在Eden Space(伊甸园)空间中。如果他们在垃圾收集中幸存下来, 他们就会被提升到Survivor Space(幸存者区)空间, 如果他们在那里活得足够长, 他们就会被分配给Tenured Gen(老年代-养老区)。这一代垃圾收集的频率要低得多。

4

还有第四代, 叫 '永久一代', 也就是 permgen。驻留在此处的对象不符合垃圾回收的条件, 通常包含运行 jvm 所需的不可变状态, 如类定义和 string 常量池。请注意, permgen 空间已经从 java 8 中删除, 并替换为一个名为 metaspace(元空间) 的新空间, 该空间将保存在本机内存中。

注意事项

jdk1.8内存分配不同之前版本的分配方式

推荐信息