mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-02-12 10:15:52 +00:00
Quick hack to try and reduce memory consumption for Androids.
Takes a test wallet from around 11.3mb to 9.6mb
This commit is contained in:
parent
d50412e24c
commit
843489111e
@ -17,13 +17,13 @@
|
||||
package com.google.bitcoin.core;
|
||||
|
||||
import com.google.bitcoin.script.Script;
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkElementIndex;
|
||||
@ -52,7 +52,7 @@ public class TransactionInput extends ChildMessage implements Serializable {
|
||||
private byte[] scriptBytes;
|
||||
// The Script object obtained from parsing scriptBytes. Only filled in on demand and if the transaction is not
|
||||
// coinbase.
|
||||
transient private Script scriptSig;
|
||||
transient private WeakReference<Script> scriptSig;
|
||||
// A pointer to the transaction that owns this input.
|
||||
private Transaction parentTransaction;
|
||||
|
||||
@ -159,16 +159,19 @@ public class TransactionInput extends ChildMessage implements Serializable {
|
||||
public Script getScriptSig() throws ScriptException {
|
||||
// Transactions that generate new coins don't actually have a script. Instead this
|
||||
// parameter is overloaded to be something totally different.
|
||||
if (scriptSig == null) {
|
||||
Script script = scriptSig == null ? null : scriptSig.get();
|
||||
if (script == null) {
|
||||
maybeParse();
|
||||
scriptSig = new Script(Preconditions.checkNotNull(scriptBytes));
|
||||
script = new Script(scriptBytes);
|
||||
scriptSig = new WeakReference<Script>(script);
|
||||
return script;
|
||||
}
|
||||
return scriptSig;
|
||||
return script;
|
||||
}
|
||||
|
||||
/** Set the given program as the scriptSig that is supposed to satisfy the connected output script. */
|
||||
public void setScriptSig(Script scriptSig) {
|
||||
this.scriptSig = checkNotNull(scriptSig);
|
||||
this.scriptSig = new WeakReference<Script>(checkNotNull(scriptSig));
|
||||
// TODO: This should all be cleaned up so we have a consistent internal representation.
|
||||
setScriptBytes(scriptSig.getProgram());
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ import java.io.IOException;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.math.BigInteger;
|
||||
|
||||
import static com.google.common.base.Preconditions.*;
|
||||
@ -44,7 +45,7 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
||||
private byte[] scriptBytes;
|
||||
|
||||
// The script bytes are parsed and turned into a Script on demand.
|
||||
private transient Script scriptPubKey;
|
||||
private transient WeakReference<Script> scriptPubKey;
|
||||
|
||||
// These fields are Java serialized but not Bitcoin serialized. They are used for tracking purposes in our wallet
|
||||
// only. If set to true, this output is counted towards our balance. If false and spentBy is null the tx output
|
||||
@ -118,11 +119,17 @@ public class TransactionOutput extends ChildMessage implements Serializable {
|
||||
}
|
||||
|
||||
public Script getScriptPubKey() throws ScriptException {
|
||||
if (scriptPubKey == null) {
|
||||
// Quick hack to try and reduce memory consumption on Androids. SoftReference is the same as WeakReference
|
||||
// on Dalvik (by design), so this arrangement just means that we can avoid the cost of re-parsing the script
|
||||
// bytes if getScriptPubKey is called multiple times in quick succession in between garbage collections.
|
||||
Script script = scriptPubKey == null ? null : scriptPubKey.get();
|
||||
if (script == null) {
|
||||
maybeParse();
|
||||
scriptPubKey = new Script(scriptBytes);
|
||||
script = new Script(scriptBytes);
|
||||
scriptPubKey = new WeakReference<Script>(script);
|
||||
return script;
|
||||
}
|
||||
return scriptPubKey;
|
||||
return script;
|
||||
}
|
||||
|
||||
protected void parseLite() throws ProtocolException {
|
||||
|
Loading…
x
Reference in New Issue
Block a user