赞
踩
答:JVM是一个可以执行字节码(.class)文件的虚拟计算机,同时提供了内存管理,垃圾回收等机制。它包含了以下几个主要部分。
答:运行时数据区是JVM在执行Java程序时为其分配的内存区域。
答:栈(Java虚拟机栈)中存放的数据:
答:将永久代替换为元空间主要是为了解决永久代的一些固有问题和限制,提高JVM的性能和灵活性。
答:堆空间的基本结构主要由新生代、老年代和永久代组成。JDK8以后永久代被元空间取代,使用本地内存来存储。
对象进行老年代的情况:
// 动态年龄计算代码
uint ageTable::compute_tenuring_threshold(size_t survivor_capacity) {
//survivor_capacity是survivor空间的大小
size_t desired_survivor_size = (size_t)((((double) survivor_capacity)*TargetSurvivorRatio)/100);//TargetSurvivorRatio 为50
size_t total = 0;
uint age = 1;
while (age < table_size) {
total += sizes[age];//sizes数组是每个年龄段对象大小
if (total > desired_survivor_size) break;
age++;
}
uint result = age < MaxTenuringThreshold ? age : MaxTenuringThreshold;
...
}
答:大对象(非常大的数组和字符串)通常会直接分配在老年代内存区域。这是为了避免新生代进行频繁的垃圾回收时,大对象频繁地在Eden区和Survivor区之间复制,从而提高垃圾收集效率。
配置大对象直接进入老年代的阈值:
# 将大于1MB的对象直接分配在老年代
java -XX:PretenureSizeThreshold=1m -jar your-application.jar
答:
/**
* 创建对象的示例代码
*/
public class MyClass {
private int value;
public MyClass(int value) {
this.value = value;
}
public static void main(String[] args) {
MyClass obj = new MyClass(10);
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。