假设没有为程序生成字节码,比如在Ruby,Perl或PHP中,在这种情况下,每次执行再次到达第1行时,下面的第1行是否重新解释?
while ($indexArrayMoviesData < $countArrayMoviesData + $countNewlyAddedMoviesData) {
# do something
}
Run Code Online (Sandbox Code Playgroud)
也就是说,如果循环运行100,000次,那么该行将被重新解释100,000次?
如果是这样,字节码创建不仅有助于程序的初始启动,还有助于执行期间?(因为代码不需要再次重新解释)
我用这个脚本加密我的Lua代码.
local script = string.dump(
function()
local function h4x(strtbl)
buffer=""
for v in strtbl do
buffer=buffer..strtbl[v]
end
return buffer
end
print("encrypted")
end
)
buff=""
for v=1,string.len(script) do --Convert our string into a hex string.
buff=buff..'\\'..string.byte(script,v)
end
file=io.open('encrypted.txt','w') --Output our bytecode into ascii format to encrypted.txt
file:write(buff)
file:flush()
file:close()
Run Code Online (Sandbox Code Playgroud)
encrypted.txt的输出类似于"00/12/46/4/2/6/4/62 /".我如何解密字节码?
运行在32位计算机上编译并在64位计算机上运行的Java应用程序是否存在已知问题?
我想知道Integer课堂上的一些内部工作.
例如,我们可以写:
Integer num = 9;
Run Code Online (Sandbox Code Playgroud)
我想知道Integer在这种情况下如何创建一个类,因为我们还没有创建任何类Object.它在内部如何运作?
我正在用Java字节码创建一个类.我需要知道如何引用此对象中的字段.首先,我需要知道如何引用"this"对象,就像我this.var1从课堂上访问一样TestClass.我知道如何访问其他对象中的字段,但不知道我正在执行的同一个对象.
假设某人给了我以下源代码的Java字节码:
class MyClass {
public static void foo() {
final String bar = "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
我想扫描这个类中的所有方法MyClass.如果任何方法包含一个final String被调用的变量bar,我需要输出变量的文字值.在这种情况下,Hello.
我设法得到bar方法中调用的变量如下:
// Scala code
import scala.collection.JavaConversions._
import org.objectweb.asm._
import org.objectweb.asm.tree._
def processClass(is:java.io.InputStream) = {
val cn = new ClassNode
val cr = new ClassReader(is)
cr.accept(cn, 0)
is.close
val methods = cn.methods.asInstanceOf[java.util.List[MethodNode]]
val m = methods(0) // get first method as an example
val vars = m.localVariables.asInstanceOf[java.util.List[LocalVariableNode]];
val bar = vars.find(_.name == "bar").find(v …Run Code Online (Sandbox Code Playgroud) 据我所知,如果我有一个带有两个过滤器的流,它们将与字节码中的&&结合使用.
例如
IntStream.range(1,10)
.filter(i -> i % 2 == 0)
.filter(i -> i % 3 == 0)
.sum();
Run Code Online (Sandbox Code Playgroud)
会像i%2 == 0 && i%3 == 0.
偷看会影响这个吗?
如果你在第一个文件管理器后偷看你得到2468,如果你偷看第二个,你只得到6(当然).
但如果你偷看这两个地方
IntStream.range(1,10)
.filter(integer -> integer % 2 == 0)
.peek(i-> System.out.print(i))
.filter(integer -> integer % 3 == 0)
.peek(i-> System.out.print(i))
.sum();
Run Code Online (Sandbox Code Playgroud)
你得到24668.
我的假设是,这必然意味着操作在某种程度上是由于窥视调用而分开的.就像是
if(i%2==0)
peek
if(i%3==0)
Run Code Online (Sandbox Code Playgroud)
这是真的,如果是这样会影响性能(我认为不会).
因此,我有一些功能不良的代码可以调试在某些地方抛出NPE的地方,我想逐步介绍一些生成的方法,以尝试找出原因。
除了盲目踏步不是真正有用的。
Thread-4[1] list
Source file not found: Foo.java
Thread-4[1] locals
Local variable information not available. Compile with -g to generate variable information
Run Code Online (Sandbox Code Playgroud)
代码已生成,因此当然没有.java可用于JDB的文件。
而且由于我不使用javac进行编译,因此也没有指定任何-g标志。
我可以告诉JDB给我看一下字节码吗(他显然有字节码,因为否则Java将没有任何执行力)?
我可以告诉ASM生成本地信息,就像使用它进行编译一样javac -g吗?
还是那里有一个有用的调试器可以满足我的需求?
对于以下两个类,它们具有相同的Java字节码。
Java版本:
Java版本“ 1.8.0_181” Java™SE运行时环境(内部版本1.8.0_181-b13)Java HotSpot(TM)64位服务器VM(内部版本25.181-b13,混合模式)
javac和javap版本:
1.8.0_181
我的疑问是
不应法同步关键字有不同的字节码,我们可以看到在synchronized块中有monitorenter和monitorexit,或让我们假设我不应该混合synchronized块和synchronized方法再
JVM如何以不同方式处理这两种方法?
public class MySingleton1 {
private MySingleton1() {}
private static MySingleton1 ourInstance;
public static MySingleton1 getInstance() {
if (ourInstance == null) {
ourInstance = new MySingleton1();
}
return ourInstance;
}
}
Run Code Online (Sandbox Code Playgroud)
和
public class MySingleton2 {
private MySingleton2() {}
private static MySingleton2 ourInstance;
public static synchronized MySingleton2 getInstance() {
if (ourInstance == null) {
ourInstance = new MySingleton2(); …Run Code Online (Sandbox Code Playgroud)bytecode ×10
java ×8
debugging ×1
encryption ×1
jar ×1
java-8 ×1
java-stream ×1
jdb ×1
jvm ×1
lua ×1
performance ×1
scala ×1
synchronized ×1