面试题

内容来自《v3.0-JavaGuide面试突击版》

1. 介绍下 Java 内存区域(运⾏时数据区)

Java 虚拟机在执⾏ Java 程序的过程中会把它管理的内存划分成若⼲个不同的数据区域。JDK. 1.8 和 之前的版本略有不同,下⾯会介绍到。

JDK 1.6

https://cdn.nlark.com/yuque/0/2021/jpeg/576791/1622123789034-4a597cf3-959d-4b6e-9719-326cc1840f56.jpeg

https://cdn.nlark.com/yuque/0/2020/png/576791/1599485389984-ee7efe15-7e9e-449f-a281-a1f567fc7d62.png#averageHue=%23dbdde6&height=462&id=IJygr&originHeight=651&originWidth=694&originalType=binary&ratio=1&rotation=0&showTitle=false&size=90374&status=done&style=none&title=&width=493

JDK 1.7

https://cdn.nlark.com/yuque/0/2020/png/576791/1601902590102-bb10dc82-8100-4364-9c76-1c98f1ae0c98.png

JDK 1.8

https://cdn.nlark.com/yuque/0/2020/png/576791/1601902590307-c5b0efc6-cae7-4eac-9425-a0c67e9819ff.png

直接内存不归 JVM 管理,但也是 JVM 运行时的一部分数据区域。使用直接内存可以提高性能!因为避免了在 Java 堆和 Native 堆之间来回复制数据。

https://cdn.nlark.com/yuque/0/2020/png/576791/1599485462344-9a6b7ff9-f6d8-43bf-9f64-50ecf1674f08.png#averageHue=%239c9ca5&height=477&id=DyHcL&originHeight=651&originWidth=694&originalType=binary&ratio=1&rotation=0&showTitle=false&size=97974&status=done&style=none&title=&width=508

线程私有的

线程共享的