编写一个程序计算几何图形的面积,运行效果如下:
形状的类型
1.长方形
2. 圆形
3. 三角形
4. 退出
请输入选项(1/2/3/4):1
请输入长方形的详细信息
长为:5
宽为:8
该长方形的面积为:40.0
现代追踪式(可达性分析)的垃圾回收器几乎都借鉴了三色标记的算法思想,尽管实现的方式不尽相同:比如白色/黑色集合一般都不会出现(但是有其他体现颜色的地方)、灰色集合可以通过栈/队列/缓存日志等方式进行实现、遍历方式可以是广度/深度遍历等等。
对于读写屏障,以Java HotSpot VM为例,其并发标记时对漏标的处理方案如下:
CMS:写屏障 + 增量更新
G1:写屏障 + SATB
ZGC:读屏障
工程实现中,读写屏障还有其他功能,比如写屏障可以用于记录跨代/区引用的变化,读屏障可以用于支持移动对象的并发执行等。功能之外,还有性能的考虑,所以对于选择哪种,每款垃圾回收器都有自己的想法。
值得注意的是,CMS中使用的增量更新,在重新标记阶段,除了需要遍历 写屏障的记录,还需要重新扫描遍历GC Roots(当然标记过的无需再遍历了),这是由于CMS对于astore_x等指令不添加写屏障的原因,具体可参考
这里。import java.util.Scanner;
public class GeometryAreaCalculator {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int choice;
do {
System.out.println("形状的类型");
System.out.println("1.长方形");
System.out.println("2.圆形");
System.out.println("3.三角形");
System.out.println("4.退出");
System.out.print("请输入选项(1/2/3/4):");
choice = input.nextInt();
switch (choice) {
case 1:
double length, width, rectangleArea;
System.out.println("请输入长方形的详细信息");
System.out.print("长为:");
length = input.nextDouble();
System.out.print("宽为:");
width = input.nextDouble();
rectangleArea = length * width;
System.out.println("该长方形的面积为:" + rectangleArea);
break;
case 2:
double radius, circleArea;
System.out.println("请输入圆形的详细信息");
System.out.print("半径为:");
radius = input.nextDouble();
circleArea = Math.PI * radius * radius;
System.out.println("该圆形的面积为:" + circleArea);
break;
case 3:
double base, height, triangleArea;
System.out.println("请输入三角形的详细信息");
System.out.print("底为:");
base = input.nextDouble();
System.out.print("高为:");
height = input.nextDouble();
triangleArea = 0.5 * base * height;
System.out.println("该三角形的面积为:" + triangleArea);
break;
case 4:
System.out.println("谢谢使用!");
break;
default:
System.out.println("输入无效,请重新输入!");
break;
}
System.out.println();
} while (choice != 4);
input.close();
}
}