2022-04-11 对象的创建

java 对象的创建过程

  1. 虚拟机在遇到一个new 指令时,首先会去常量池中定位到这个类的符号引用,并且检查这个类是否已经被加载、解析和初始化过,如果没有,那必须先进行相应的类加载的过程。
  2. 类加载检查完成后,开始为对象分配内存
  3. 内存的分配方式有两种:① 指针碰撞:内存是规整的,用过的内存和空间内存用指针隔开,当需要内存时,只需要移动指针即可。② 空闲列表 :内存不是规整的,使用的内存和空闲内存相互交错,虚拟机通过维护一个列表来记录那些内存是可用的,分配内存时从列表中找到相应大小的内存即可。采用哪种分配方式取决于垃圾收集器是否带有压缩整理的功能。一般来说,新生代的垃圾搜集算法是复制-清除,分配内存的方式为指针碰撞老年代的垃圾收集器采用的算法是标记-清除,分配内存的方式是空闲列表(当否老年代中找不到连续的大空间分配内存时就会发生Full GC)。
  4. 分配内存时需要考虑线程安全问题(对象A分配内存时,指针还没来得及修改,这时对象B又使用的原来的指针)。有两种解决方案:① 同步处理:虚拟机采用cas加上失败重试的方式保证分配内存的原子性。② 在java堆中,为每个线程预先分配一小块内存,成为本地线程分配缓冲(Thread Local Allocation Buffer TLAB),只有TLAB用完需要分配新的TLAB时,才需要同步(是否使用TLAB,可以通过参数控制)。
  5. 内存分配完成后,虚拟机将分配到的内存空间都赋值为0,这个操作保证了对象在不赋值的时候也可以直接使用。
  6. 设置对象头中的信息(哪个类的实例,hash码,分代年龄,是否启用偏向锁)。
  7. 对于虚拟机来说,一个对象就创建完成了。对于程序员来说,还需要进行初始化操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 ECharts 的柱状图(Bar Chart)来满足您的需求。根据您的描述,以下是一个示例代码,展示了如何使用 ECharts 创建柱状图,并根据数据生成横坐标和纵坐标的内容: ```html <template> <div id="bar-chart" style="width: 600px; height: 400px;"></div> </template> <script> import echarts from 'echarts'; export default { mounted() { this.renderChart(); }, methods: { renderChart() { const chartData = [ { startTime: '2022-03-04 11:11:00', endTime: '2022-03-05 11:11:00' }, // ... 其他数据项 ]; // 获取最早的开始时间和最晚的结束时间 const startTime = chartData .map((item) => new Date(item.startTime)) .sort((a, b) => a - b)[0]; const endTime = chartData .map((item) => new Date(item.endTime)) .sort((a, b) => b - a)[0]; // 生成横坐标的时间范围 const xAxisData = []; let currentDate = new Date(startTime); while (currentDate <= endTime) { xAxisData.push(currentDate.toLocaleString()); currentDate.setDate(currentDate.getDate() + 1); } // 生成纵坐标的数据 const yAxisData = chartData.map((item, index) => index + 1); // 创建图表实例 const chartInstance = echarts.init(document.getElementById('bar-chart')); // 配置图表选项 const options = { xAxis: { type: 'category', data: xAxisData, }, yAxis: { type: 'value', }, series: [ { type: 'bar', data: yAxisData, }, ], }; // 渲染图表 chartInstance.setOption(options); }, }, }; </script> ``` 在上述示例中,我们首先根据数据获取最早的开始时间和最晚的结束时间,然后根据这个时间范围生成横坐标的数据。纵坐标的数据则是根据数组的长度生成的。最后,使用 ECharts 的 `init` 方法创建图表实例,并通过设置图表的配置选项来创建柱状图。 请注意,上述代码中的日期处理可能需要根据具体情况进行调整,以适应您的数据格式和需求。另外,您需要在项目中引入 ECharts 库,可以通过 npm 安装,并在代码中使用 `import` 引入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值