这里讲述的是JAVA的内存模型(变量的同步)的文章,具体方法请看介绍
一个线程中变量的修改可能不会立即对其他线程可见,事实上也许永远不可见。
在代码一中,如果一个线程调用了MyClass.loop(),将来的某个时间点,另一个线程调用了MyClass.setValue(100),第一个线程可能仍然不会终止,可能永远循环下去
代码一:
public class MyClass{
private static final String TAG="MyClass";
偶然看到一道面试题,Java在实例化一个类的时候,数据在堆和栈中是如何存放的?
public class A{
public int i=1;
public static A a1 = new A();
public static void mian(String args[]){
int c = 2;
A a=new A();
}
}
答案是:
处于栈中的数据:A对象的引用a和局部变量c
处于堆中的数据:变量a所指向的对象,变量
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但是,也正因为内存管理完全由JVM负责,所以也使Java很多程序员不再关心内存分配,导致很多程序低效,耗内存。因此有了Java程序员到后应该去了解JVM,才能写出更高效,充分利用有限的内存的程序。
1、Java在内存中的状态
首先我们先写一个代码为例子:
Person.java
pa