1. 怎样查看java线程内存使用情况

首先加入一个静态方法:
public static long getMemory() {
return Runtime.getRuntime().freeMemory();
}
这个是查看运行时空闲内存的语句。
线程启动前
long point1 = getMemory();
线程调用
long point2 = getMemory();

两数之差 就是占用内存

2. 在java中是否能限制每个线程的占用内存

进程是可以控制的,线程的是没法控制的。只能增大XmxXms这些参数,或者优化程序。
避免因为用户查询大量数据占用内存这个可以通过程序优化的方式来解决,比如:用分页、动态分页、流的方式向前台输出数据。

3. java 创建多个线程,为什么线程是一同进入内存的

建议去看看多线程的底层原理,以及为何要使用多线程!!
为何要使用多线程?答:多线程就象是人体一样,一直在并行的做许多工作,例如,人可以同时呼吸,血液循环,消化食物的。多线程可以将一个程序划分成多个任务,他们彼此独立的工作,以方便有效的使用处理器和用户的时间.这种比喻精辟,只要我们的机器资源够用,就要尽量提高程序的执行速度,这样能让用户感到舒服。
如果要想实现线程同步可以考虑线程同步的问题!
线程同步的方法:
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

4. jvm中线程本地内存是真实存在的,还是一个抽象概念

jvm内存模型:Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。

运行时内存模型,分为线程私有和共享数据区两大类,其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含Java堆、方法区,在方法区内有一个常量池。java运行时的内存模型图,如下:

从图中,可知内存分为线程私有和共享两大类:

(1)线程私有区,包含以下3类:
程序计数器,记录正在执行的虚拟机字节码的地址;
虚拟机栈:方法执行的内存区,每个方法执行时会在虚拟机栈中创建栈帧;
本地方法栈:虚拟机的Native方法执行的内存区;

(2)线程共享区,包含以下2类
Java堆:对象分配内存的区域;
方法区:存放类信息、常量、静态变量、编译器编译后的代码等数据;
常量池:存放编译器生成的各种字面量和符号引用,是方法区的一部分。

楼主提到的Java栈,一般而言是指图中的虚拟机栈,在代码中的方法调用过程中,往往需要从一个方法跳转到另一个方法,执行完再返回,那么在跳转之前需要在当前方法的基本信息压入栈中保存再跳转。

三、关于寄存器的问题

对于java最常用的虚拟机,sun公司提供的hotspot虚拟机,是基于栈的虚拟机;而对于android的虚拟机,则采用google提供的dalvik,art两种虚拟机,在android 5.0以后便默认采用art虚拟机,这是基于寄存器的虚拟机。 楼主问的是jvm(即java vm),这是基于栈的虚拟机。那么关于虚拟机栈,这块内存的内容,我们再进一步详细分析,如下图:

可以看到,在虚拟机栈有一帧帧的 栈帧组成,而栈帧包含局部变量表,操作栈等子项,那么线程在运行的时候,代码在运行时,是通过程序计数器不断执行下一条指令。真正指令运算等操作时通过控制操作栈的操作数入栈和出栈,将操作数在局部变量表和操作栈之间转移。

5. 在 java中 线程的工作内存,是不是指的就是,操作数栈 和 局部变量表 求解答!!!

并不是一个层次上的概念,线程中的工作内存可以类比与操作系统中的数据缓存区域,而局部变量表中的变量与操作数栈在虚拟机分配内存时,有可能会分配带数据缓存区域。

6. Java如何获取某个线程所使用的内存的大小

要实时查看某个Thread所使用的内存大小并没有具体的语句。

但是可以通过前后对比法进行阶段性监控与分析。

首先加入一个静态方法:
public static long getMemory() {
return Runtime.getRuntime().freeMemory();
}

这个是查看运行时空闲内存的语句。

所以应该在需要检测的线程执行点前后进行插桩。

long point1 = getMemory();
线程调用
long point2 = getMemory();

注意:另外,在这个过程中不应该有其他的干扰(调用其他线程或者其他操作)

甚至可以在线程中进行插桩,然后分析所有点的数值变化,根据数值差,就可以得出答案。

7. java 线程结束为什么还会操作内存

新建一个线程后,启动该线程.可以是多个.
而此时的main()函数就是主线程,其他线程与他同时进行.main()里的语句执行完毕后就自然结束了(即主线程结束).无须做过多处理.

8. 如何查看java线程占用的内存

首先加入一个静态方法:
public static long getMemory() {
return Runtime.getRuntime().freeMemory();
}
这个是查看运行时空闲内存的语句。
线程启动前
long point1 = getMemory();
线程调用
long point2 = getMemory();

两数之差 就是占用内存

9. java 线程什么时候会从主内存刷新本地缓存

你的4个变量一旦声明会自动在内存中创建。
jvm也没有你说的缓存,高速缓存这些东西,全部放在堆内存中。

堆内存中的东西在GC的时候会移动