读java编程思想 第一遍开启全新认知

读<java编程思想> 第一遍:开启全新认知

第一个知识点:

​ java中像int和float这种基本数据类型,由于使用的频率很高,所以Java像c/c++一样都是采用了
​ 不通过new的方式来进行创建,而是通过使用自动变量,这个变量存储再栈中,并且可以直接存储值

此时:映射最近学习的volatile 该方法中一个证明 volatile可以实现 线程之间的可见性 的实例

​ 如果该实例使用中使用的是 int类型 是否需要添加 volatile 进行修饰.

具体代码如下:

public class T01_HelloVolatile {
	volatile int running = 10; //对比一下有无volatile的情况下,整个程序运行结果的区别
	void m() {
		System.out.println("m start");
		while(running==10) {
		}
		System.out.println("m end!");
	}
	
	public static void main(String[] args) {
		T01_HelloVolatile t = new T01_HelloVolatile();
		
		new Thread(t::m, "t1").start();

		try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		t.running = 11;
	}
	
}

这块产生问题:就是java中的int是存储再栈中, 我们volatile修饰的会让

首先第一点问题: volatile 中第一点保证内存的可见性, 这个过程是:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSKoSU4Z-1597053809311)(C:\Users\zhuzheng\AppData\Roaming\Typora\typora-user-images\image-20200810115434777.png)]

​ 那么问题来了: 我的int类型创建的时候直接存储在我们的栈中,那么为什么会发生这个读取堆内存中缓存不一制问题

第二个知识点:

​ 数据库的三范式:

					第一范式:数据库表中的每一列都是具有原子性,就是不可以再拆分,但是这种要视情况而定,
				
						举例子: 地址,这一列看着没什么问题可以直接作为一个列进行使用,但是有些项目要求,
									将省和市还有详细地址拆分出来,这样的话那么你的这个地址列就不具有原子性这个特性
						
					第二范式:确保数据库表中每一列都与主键相关 
					第三范式:确保数据库表中的每一列都与数据库表直接相关而不是间接相关

第三个知识点:

​ java中的内存:

​ 内存分为五个部分:寄存器:运行速度最快,但是不可自己手动分配使用,
​ 但是在c和c++中是支持推荐寄存器的使用方式,

栈内存:用于存放方法:栈指针向下移动分配内存,栈指针向上移动释放内存,

堆内存:用于存放对象的实体类,与栈内存一样属于RAM内存中,常量池通常通常直接存放到程序代码中,如需严格保护的话吗,
可以存放到ROM(Read Only memory) 还有就是非RAM存储区,数据完全存在于程序之外,最明显的两个例子:
一个是序列化对象被转换成字节流被发往另一台机器,第二个是持久化对象

y memory) 还有就是非RAM存储区,数据完全存在于程序之外,最明显的两个例子:
一个是序列化对象被转换成字节流被发往另一台机器,第二个是持久化对象

目前看到这里:发现上面的一些问题,后期还会继续添加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值