我正在使用VisualVM来分析核心转储.我怀疑一些XML对象会导致泄漏,但是有太多的String对象要逐一进行.
我可以使用OQL搜索以'GH'开头的字符串吗?
谢谢你的帮助.
我想了解为什么声明为final的Reference不能声明为Volatile.在SO上有一个类似的问题[ 为什么Object成员变量在Java中不是最终的和易变的?
[1]:为什么Object成员变量在Java中不能是final和volatile?但我不确定在答案中是否理解了FINAL.
现在,最终变量的状态在初始化后肯定可以更改.只能将引用初始化为另一个对象.
例如,考虑以下成员变量
final StringBuilder sb = new StringBuilder("CAT");
Run Code Online (Sandbox Code Playgroud)
现在另一个线程改变sb为:
sb.append("S");
Run Code Online (Sandbox Code Playgroud)
如果此变量是非易失性的,那么根据Java内存模型,此更改是否可用于不同的线程?
编辑:我把StringBuffer改为StringBuilder让一些人明白我的观点.
这是一个倡导的范例,应该在synchronized块内的while循环内调用wait().
我的问题是waiting()线程如何获得锁定?
// Thread 1
synchronized (mon) {
while (!condition)
mon.wait();
// Do something
}
//Thread 2
synchronized (mon) {//set condition appropriately
mon.notify();
}
Run Code Online (Sandbox Code Playgroud)
考虑线程1首先运行并开始等待条件.它释放锁并且线程2获得锁设置条件并通知线程1.现在线程1获取锁,检查条件并开始执行"做某事".
我的问题是当线程1被通知它从while条件开始执行时,具有Synchronized(mon)的代码行永远不再执行,那么线程1如何获得锁定?将锁定回到线程1的内部动态是什么?
如果我run()在一个Thread上调用该方法并且该run()方法抛出一个未被捕获的异常会产生什么结果呢?
谁抓住了这个例外?是否异常,甚至被逮住?
你将如何顺序执行三个线程?例如.Thread1,Thread2,Thread3.无法将一个Thread的引用传递给另一个Thread并从run()方法调用.
所以代码应该是这样的:
Thread1.start();
Thread2.start();
Thread3.start();
Run Code Online (Sandbox Code Playgroud)
应该是
Printing Thread1
Printing Thread2
Printing Thread3
Run Code Online (Sandbox Code Playgroud)
这可以通过使用ThreadPoolExecutor并使用阻塞队列来实现,但即使这样也不是可接受的答案.
当JVM崩溃时,他会写一个错误日志hs_err_pid.log.我想找出导致JVM崩溃的原因?如何理解这些日志,是否记录了日志的排列方式.我试图在网上搜索但无济于事:-(
指出相关的URL将不胜感激.谢谢.
这是一个需要针对时间进行优化的面试问题.
假设您有一个二维数组,并且您在数组中有一个字符串说"亚马逊",这样各个字符可以从左到右,从右到左,从上到下,从下到上.
我将用例子解释:
char[][] a = {
{B,B,A,B,B,N},
{B,B,M,B,B,O},
{B,B,A,B,B,Z},
{N,O,Z,B,B,A},
{B,B,B,B,B,M},
{B,B,B,B,B,A}
};
Run Code Online (Sandbox Code Playgroud)
上面的Array有两个Amazon Strings.您需要返回存在的此类字符串的数量.
JDBC中的连接对象是什么?如何保持此连接(我的意思是它是网络连接)?它们是TCP/IP连接吗?为什么每次创建连接都是一项代价高昂的操作?为什么这些连接在一段时间后变得陈旧,我需要刷新池?为什么我不能使用一个连接来执行多个查询?
我对Java中的Prepared Statements有以下问题.
当SQL Query没有任何Where子句时,使用Prepared Statements是否有益?假设一个简单的查询Select*from tablename;
据说Prepared Statement被编译一次,只有值被第二次替换.因此,它可以更快,因为可以跳过查询验证和编译步骤.编译表格存储在哪里?这个编译表格的生命周期是多少?
您将获得一个数字BST.您必须在其中找到两个数字(a,b),以便a + b = S在O(n)时间和O(1)空间中.
什么算法?
一种可能的方法是将两个BST转换为双向链接列表,然后从前端和尾端开始:
if front + end > S then end--
Run Code Online (Sandbox Code Playgroud)
要么:
if front + end < S then front++
Run Code Online (Sandbox Code Playgroud) java ×7
algorithm ×2
jdbc ×2
big-o ×1
concurrency ×1
connection ×1
crash ×1
jvisualvm ×1
jvm ×1
jvm-hotspot ×1
locking ×1
networking ×1
oql ×1
tcp ×1
visualvm ×1
volatile ×1
wait ×1